[Projekt] Notatnik, problem z listą rozwijaną.

0

Witam, mam problem z utworzeniem listy rozwijanej nadającej kolor czcionki w projekcie notatnik. Kod wygląda tak:

public class Notatnik extends JFrame implements ActionListener {

private JTextArea textArea;
private JComboBox kolorList;

public Notatnik() {

    setTitle("Notatnik");

    Toolkit zestaw = Toolkit.getDefaultToolkit();
    Dimension rozmiarEkranu = zestaw.getScreenSize();
    int szerEkranu = rozmiarEkranu.width;
    int wysEkranu = rozmiarEkranu.height;
    setBounds(szerEkranu / 4, wysEkranu / 4, szerEkranu / 2, wysEkranu / 2);

    setResizable(false);

    setJMenuBar(doPasekMenu());

    textArea = new JTextArea();
    JScrollPane sp = new JScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    setLayout(new BorderLayout());
    add(sp, BorderLayout.CENTER);

    JPanel panelLewy = new JPanel(new FlowLayout(FlowLayout.CENTER));
    JPanel panelSrodek = new JPanel(new FlowLayout(FlowLayout.CENTER));
    JPanel panelPrawy = new JPanel(new FlowLayout(FlowLayout.CENTER));

    JPanel panelPrzyciski = new JPanel(new GridLayout(1, 2));

    panelPrzyciski.add(panelLewy);
    panelPrzyciski.add(panelSrodek);
    panelPrzyciski.add(panelPrawy);

    add(panelPrzyciski, BorderLayout.SOUTH);

    JToggleButton tytul = new JToggleButton("Tytuł");
    JButton podpis = new JButton("Podpis");
    panelLewy.add(tytul);
    tytul.addActionListener(this);
    tytul.setActionCommand("41");
    panelLewy.add(podpis);
    podpis.addActionListener(this);
    podpis.setActionCommand("42");

    JRadioButton bi = new JRadioButton("Biały", true);
    JRadioButton zo = new JRadioButton("Żółty");
    JRadioButton zi = new JRadioButton("Zielony");

    ButtonGroup bg1 = new ButtonGroup();

    bg1.add(bi);
    bg1.add(zo);
    bg1.add(zi);

    bi.addActionListener(this);
    zo.addActionListener(this);
    zi.addActionListener(this);

    bi.setActionCommand("51");
    zo.setActionCommand("52");
    zi.setActionCommand("53");

    panelPrawy.add(bi);
    panelPrawy.add(zo);
    panelPrawy.add(zi);

    Border obramowanie1 = BorderFactory.createEtchedBorder();
    panelLewy.setBorder(obramowanie1);

    Border obramowanie2 = BorderFactory.createEtchedBorder();
    panelPrawy.setBorder(obramowanie2);

    Border obramowanie3 = BorderFactory.createEtchedBorder();
    panelSrodek.setBorder(obramowanie3);

    String[] czKolory = {"czerwona", "zielona", "niebieska", "czarna", "biala"};
    JLabel etyKolory = new JLabel("Kolor czcionki:  ");
    JComboBox kolorList = new JComboBox(czKolory);
    kolorList.setSelectedIndex(3);
    panelSrodek.add(etyKolory);
    panelSrodek.add(kolorList);
    JComboBox komboBox = (JComboBox) (e.getSource()); // podkreśla e, o co chodzi?

}

private JMenuBar doPasekMenu() {

    JMenuBar pasek = new JMenuBar();

    JMenu mPlik = new JMenu("Plik");

    JMenuItem otworz = new JMenuItem("Otwórz");
    JMenuItem zapisz = new JMenuItem("Zapisz");
    JMenuItem zakoncz = new JMenuItem("Zakończ");

    mPlik.add(otworz);
    otworz.addActionListener(this);
    otworz.setActionCommand("11");

    mPlik.add(zapisz);
    zapisz.addActionListener(this);
    zapisz.setActionCommand("12");

    mPlik.addSeparator();
    mPlik.add(zakoncz);
    zakoncz.addActionListener(this);
    zakoncz.setActionCommand("13");

    otworz.setAccelerator(KeyStroke.getKeyStroke("ctrl O"));
    zapisz.setAccelerator(KeyStroke.getKeyStroke("ctrl Z"));
    zakoncz.setAccelerator(KeyStroke.getKeyStroke("ctrl K"));

    JMenu mEdycja = new JMenu("Edycja");

    JRadioButtonMenuItem powiekszC = new JRadioButtonMenuItem("Czcionka mała", true);
    JRadioButtonMenuItem pomniejszC = new JRadioButtonMenuItem("Czcionka duża");

    powiekszC.addActionListener(this);
    powiekszC.setActionCommand("21");

    pomniejszC.addActionListener(this);
    pomniejszC.setActionCommand("22");

    JMenuItem wyczysc = new JMenuItem("Wyczyść");
    wyczysc.setAccelerator(KeyStroke.getKeyStroke("ctrl D"));

    wyczysc.addActionListener(this);
    wyczysc.setActionCommand("23");

    mEdycja.add(powiekszC);
    mEdycja.add(pomniejszC);
    mEdycja.addSeparator();
    mEdycja.add(wyczysc);

    ButtonGroup bg = new ButtonGroup();

    bg.add(powiekszC);
    bg.add(pomniejszC);

    JMenu mPomoc = new JMenu("Pomoc");

    JMenuItem oAutorze = new JMenuItem("O Autorze");

    mPomoc.add(oAutorze);

    oAutorze.addActionListener(this);
    oAutorze.setActionCommand("31");

    mPlik.setMnemonic('P');
    mEdycja.setMnemonic('E');
    mPomoc.setMnemonic('o');

    pasek.add(mPlik);
    pasek.add(mEdycja);
    pasek.add(mPomoc);
    return pasek;
}

public static void main(String[] args) {

    try {
        UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
        Notatnik nt = new Notatnik();
        nt.setVisible(true);
        nt.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    } catch (java.lang.Exception ed) {
        System.out.println("Błąd!");
    }

}

@Override
public void actionPerformed(ActionEvent e) {

    switch (Integer.parseInt(e.getActionCommand())) {
        case 11: {
            JFileChooser pliki = new JFileChooser(".");
            if (JFileChooser.APPROVE_OPTION == pliki.showOpenDialog(this)) {
                try {
                    File f = pliki.getSelectedFile();
                    setTitle(f.getAbsolutePath() + " Notatnik");
                    BufferedReader br = new BufferedReader(new FileReader(f));
                    String temp = "";
                    while (br.ready()) {
                        temp += br.readLine() + "\n";
                    }
                    textArea.setText(temp);
                } catch (IOException ex) {
                    System.out.println("Brak pliku");
                }
            }
            break;
        }
        case 12: {
            JFileChooser pliki = new JFileChooser(".");
            if (JFileChooser.APPROVE_OPTION == pliki.showSaveDialog(this)) {
                try {
                    File f = pliki.getSelectedFile();
                    BufferedWriter bw = new BufferedWriter(new FileWriter(f));
                    bw.write(textArea.getText());
                    bw.flush();
                    bw.close();
                } catch (IOException ee) {
                    System.out.println("Problemy z zapisem");
                }
            }
            break;
        }
        case 13: {
            System.exit(0);
            break;
        }
        case 21: {
            Font f = new Font("Arial", Font.PLAIN, 10);
            textArea.setFont(f);
            break;
        }
        case 22: {
            Font f = new Font("Arial", Font.PLAIN, 18);
            textArea.setFont(f);
            break;
        }
        case 23: {
            textArea.setText(" ");
            break;
        }
        case 31: {
            JOptionPane.showMessageDialog(this, "Autor: \n \n \n");
            break;
        }
        case 41: {
            textArea.setText("Szanowny Panie \n\n" + textArea.getText());
            break;
        }
        case 42: {
            textArea.setText(textArea.getText() + "\n\n Z poważaniem \n");
            break;
        }
        case 51: {
            textArea.setBackground(Color.WHITE);
            break;
        }
        case 52: {
            textArea.setBackground(Color.YELLOW);
            break;
        }
        case 53: {
            textArea.setBackground(Color.GREEN);
            break;
        }
    }
    switch (kolorList.getSelectedIndex()) {
        case 0: {
            textArea.setForeground(Color.RED);
            break;
        }
        case 1: {
            textArea.setForeground(Color.GREEN);
            break;
        }
        case 2: {
            textArea.setForeground(Color.BLUE);
            break;
        }
        case 3: {
            textArea.setForeground(Color.BLACK);
            break;
        }
        case 4: {
            textArea.setForeground(Color.WHITE);
            break;
        }
    }

}

}

Czy mógłby mi ktoś pomóc z tym?

0
  • podziel kod na metody bo jest strasznie nieczytelny
  • masz w złej kolejności dodane panele (panelLewy, panelPrawy, panelSrodkowy)
  • jak ma Ci się wyświetlać ComboBox jak go nie dodajesz do żadnego panelu? dodaj np.
 panelSrodek.add(kolorList);

co do tego kodu:

 //w tym fragmencie też jest coś nie tak
  switch (komboBox.getSelectedIndex()) {
            case 0: {
                textArea.setForeground(Color.RED);
                break;
            }

to problem jest w tym że komboBox jest u Ciebie dziwnym tworem... a po drugie kolorList musi być deklarowane w klasie jako np. private a nie w metodzie... jeżeli deklarujesz to tak jak u siebie w konstruktorze to zasięg kolorList jest tylko ograniczony do konstruktora.

private JComboBox kolorList;


//...


  switch (kolorList.getSelectedIndex()) {
            case 0: {
                textArea.setForeground(Color.RED);
                break;
            }
        }
0

Nadal coś jest nie tak. Wyświetla mi (już w dobrym miejscu), ale nie pobiera

public class Notatnik extends JFrame implements ActionListener {

private JTextArea textArea;
private JComboBox kolorList;

public Notatnik() {

    setTitle("Notatnik");

    Toolkit zestaw = Toolkit.getDefaultToolkit();
    Dimension rozmiarEkranu = zestaw.getScreenSize();
    int szerEkranu = rozmiarEkranu.width;
    int wysEkranu = rozmiarEkranu.height;
    setBounds(szerEkranu / 4, wysEkranu / 4, szerEkranu / 2, wysEkranu / 2);

    setResizable(false);

    setJMenuBar(doPasekMenu());

    textArea = new JTextArea();
    JScrollPane sp = new JScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    setLayout(new BorderLayout());
    add(sp, BorderLayout.CENTER);

    JPanel panelLewy = new JPanel(new FlowLayout(FlowLayout.CENTER));
    JPanel panelSrodek = new JPanel(new FlowLayout(FlowLayout.CENTER));
    JPanel panelPrawy = new JPanel(new FlowLayout(FlowLayout.CENTER));

    JPanel panelPrzyciski = new JPanel(new GridLayout(1, 2));

    panelPrzyciski.add(panelLewy);
    panelPrzyciski.add(panelSrodek);
    panelPrzyciski.add(panelPrawy);

    add(panelPrzyciski, BorderLayout.SOUTH);

    JToggleButton tytul = new JToggleButton("Tytuł");
    JButton podpis = new JButton("Podpis");
    panelLewy.add(tytul);
    tytul.addActionListener(this);
    tytul.setActionCommand("41");
    panelLewy.add(podpis);
    podpis.addActionListener(this);
    podpis.setActionCommand("42");

    JRadioButton bi = new JRadioButton("Biały", true);
    JRadioButton zo = new JRadioButton("Żółty");
    JRadioButton zi = new JRadioButton("Zielony");

    ButtonGroup bg1 = new ButtonGroup();

    bg1.add(bi);
    bg1.add(zo);
    bg1.add(zi);

    bi.addActionListener(this);
    zo.addActionListener(this);
    zi.addActionListener(this);

    bi.setActionCommand("51");
    zo.setActionCommand("52");
    zi.setActionCommand("53");

    panelPrawy.add(bi);
    panelPrawy.add(zo);
    panelPrawy.add(zi);

    Border obramowanie1 = BorderFactory.createEtchedBorder();
    panelLewy.setBorder(obramowanie1);

    Border obramowanie2 = BorderFactory.createEtchedBorder();
    panelPrawy.setBorder(obramowanie2);

    Border obramowanie3 = BorderFactory.createEtchedBorder();
    panelSrodek.setBorder(obramowanie3);

    String[] czKolory = {"czerwona", "zielona", "niebieska", "czarna", "biala"};
    JLabel etyKolory = new JLabel("Kolor czcionki:  ");
    JComboBox kolorList = new JComboBox(czKolory);
    kolorList.setSelectedIndex(3);
    panelSrodek.add(etyKolory);
    panelSrodek.add(kolorList);
    //JComboBox komboBox = (JComboBox) (e.getSource()); // podkreśla e, o co chodzi?

}

private JMenuBar doPasekMenu() {

    JMenuBar pasek = new JMenuBar();

    JMenu mPlik = new JMenu("Plik");

    JMenuItem otworz = new JMenuItem("Otwórz");
    JMenuItem zapisz = new JMenuItem("Zapisz");
    JMenuItem zakoncz = new JMenuItem("Zakończ");

    mPlik.add(otworz);
    otworz.addActionListener(this);
    otworz.setActionCommand("11");

    mPlik.add(zapisz);
    zapisz.addActionListener(this);
    zapisz.setActionCommand("12");

    mPlik.addSeparator();
    mPlik.add(zakoncz);
    zakoncz.addActionListener(this);
    zakoncz.setActionCommand("13");

    otworz.setAccelerator(KeyStroke.getKeyStroke("ctrl O"));
    zapisz.setAccelerator(KeyStroke.getKeyStroke("ctrl Z"));
    zakoncz.setAccelerator(KeyStroke.getKeyStroke("ctrl K"));

    JMenu mEdycja = new JMenu("Edycja");

    JRadioButtonMenuItem powiekszC = new JRadioButtonMenuItem("Czcionka mała", true);
    JRadioButtonMenuItem pomniejszC = new JRadioButtonMenuItem("Czcionka duża");

    powiekszC.addActionListener(this);
    powiekszC.setActionCommand("21");

    pomniejszC.addActionListener(this);
    pomniejszC.setActionCommand("22");
    
    JRadioButtonMenuItem pogrubC = new JRadioButtonMenuItem("Pogrubienie");
    pogrubC.addActionListener(this);
    pogrubC.setActionCommand("27");
    
    JRadioButtonMenuItem arialC = new JRadioButtonMenuItem("Arial",true);
    JRadioButtonMenuItem timesC = new JRadioButtonMenuItem("Times New Roman");
    JRadioButtonMenuItem comC = new JRadioButtonMenuItem("Comic Sans MS");
    
    arialC.addActionListener(this);
    arialC.setActionCommand("23");
    
    timesC.addActionListener(this);
    timesC.setActionCommand("24");
    
    comC.addActionListener(this);
    comC.setActionCommand("25");

    JMenuItem wyczysc = new JMenuItem("Wyczyść");
    wyczysc.setAccelerator(KeyStroke.getKeyStroke("ctrl D"));

    wyczysc.addActionListener(this);
    wyczysc.setActionCommand("23");

    mEdycja.add(powiekszC);
    mEdycja.add(pomniejszC);
     mEdycja.addSeparator();
    mEdycja.add(pogrubC);
    mEdycja.addSeparator();
    mEdycja.add(arialC);
    mEdycja.add(timesC);
    mEdycja.add(comC);
    mEdycja.addSeparator();
    mEdycja.add(wyczysc);

    ButtonGroup bg = new ButtonGroup();

    bg.add(powiekszC);
    bg.add(pomniejszC);
    bg.add(pogrubC);
    bg.add(arialC);
    bg.add(timesC);
    bg.add(comC);

    JMenu mPomoc = new JMenu("Pomoc");

    JMenuItem oAutorze = new JMenuItem("O Autorze");

    mPomoc.add(oAutorze);

    oAutorze.addActionListener(this);
    oAutorze.setActionCommand("31");

    mPlik.setMnemonic('P');
    mEdycja.setMnemonic('E');
    mPomoc.setMnemonic('o');

    pasek.add(mPlik);
    pasek.add(mEdycja);
    pasek.add(mPomoc);
    return pasek;
}

public static void main(String[] args) {

    try {
        UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
        Notatnik nt = new Notatnik();
        nt.setVisible(true);
        nt.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    } catch (java.lang.Exception ed) {
        System.out.println("Błąd!");
    }

}

@Override
public void actionPerformed(ActionEvent e) {

    switch (Integer.parseInt(e.getActionCommand())) {
        case 11: {
            JFileChooser pliki = new JFileChooser(".");
            if (JFileChooser.APPROVE_OPTION == pliki.showOpenDialog(this)) {
                try {
                    File f = pliki.getSelectedFile();
                    setTitle(f.getAbsolutePath() + " Notatnik");
                    BufferedReader br = new BufferedReader(new FileReader(f));
                    String temp = "";
                    while (br.ready()) {
                        temp += br.readLine() + "\n";
                    }
                    textArea.setText(temp);
                } catch (IOException ex) {
                    System.out.println("Brak pliku");
                }
            }
            break;
        }
        case 12: {
            JFileChooser pliki = new JFileChooser(".");
            if (JFileChooser.APPROVE_OPTION == pliki.showSaveDialog(this)) {
                try {
                    File f = pliki.getSelectedFile();
                    BufferedWriter bw = new BufferedWriter(new FileWriter(f));
                    bw.write(textArea.getText());
                    bw.flush();
                    bw.close();
                } catch (IOException ee) {
                    System.out.println("Problemy z zapisem");
                }
            }
            break;
        }
        case 13: {
            System.exit(0);
            break;
        }
        case 21: {
            Font f = new Font("Arial", Font.PLAIN, 10);
            textArea.setFont(f);
            break;
        }
        case 22: {
            Font f = new Font("Arial", Font.PLAIN, 18);
            textArea.setFont(f);
            break;
        }
        case 23: {
            Font f = new Font("Arial", Font.PLAIN, 18);
            textArea.setFont(f);
            break;
        }
        case 24: {
            Font f = new Font("Times New Roman", Font.PLAIN, 18);
            textArea.setFont(f);
            break;
        }
        case 25: {
            Font f = new Font("Comic Sans MS", Font.PLAIN, 18);
            textArea.setFont(f);
            break;
        }
        case 26: {
            textArea.setText(" ");
            break;
        }
        case 27: {
           Font f = new Font("Arial", Font.BOLD, 10);
            textArea.setFont(f);
            break;
        }
        case 31: {
            JOptionPane.showMessageDialog(this, "Autor: \n \n \n");
            break;
        }
        case 41: {
            textArea.setText("Szanowny Panie \n\n" + textArea.getText());
            break;
        }
        case 42: {
            textArea.setText(textArea.getText() + "\n\n Z poważaniem \n");
            break;
        }
        case 51: {
            textArea.setBackground(Color.WHITE);
            break;
        }
        case 52: {
            textArea.setBackground(Color.YELLOW);
            break;
        }
        case 53: {
            textArea.setBackground(Color.GREEN);
            break;
        }
    }
    switch (kolorList.getSelectedIndex()) {
        case 0: {
            textArea.setForeground(Color.RED);
            break;
        }
        case 1: {
            textArea.setForeground(Color.GREEN);
            break;
        }
        case 2: {
            textArea.setForeground(Color.BLUE);
            break;
        }
        case 3: {
            textArea.setForeground(Color.BLACK);
            break;
        }
        case 4: {
            textArea.setForeground(Color.WHITE);
            break;
        }
    }

}

}

Nie mam pojęcia co zrobić, czy mógłbyś mi zmodyfikować te dwa fragmenty tak żeby działało? Żeby nie było nie chce się uczyć javy (przynajmniej na razie), potrzebuję szybko zrobić projekt i wysłać na zaliczenie. Potrzebuję jeszcze wyszukiwanie w tekście, zliczanie znaków. Czcionki, pogrubienie też nie działają prawidłowo.

0

Podepnij ActionListenera

    kolorList.addActionListener(e -> changeColor(kolorList.gestSelectedIndex()));
  ...
  private void changeColor(int index)
  {
      switch(index)
      {
           case 0:
               textArea.setForeground(Color.RED);
               break;
...
        }
      }
  }
0

Nadal nie działa, podkreśla mi

private void changeColor(int index)

0

A gdzie umieściłeś poniższy kod:

  private void changeColor(int index)
  {
      switch(index)
      {
           case 0:
               textArea.setForeground(Color.RED);
               break;
...
        }
      }
  }

Może go wstawiłeś do konstruktora? To jest metoda, umieść kod np. tu

}
//tu!!!
@Override
public void actionPerformed(ActionEvent e) {
0

Teraz działa. To może powiesz mi jeszcze jak zrobić wyszukiwanie w tekście i zliczanie znaków :) ?

0

Wyszukiwanie to połączenie textArea.getText() i indexOf(...).
Zliczanie to

                HashMap<Character,Integer> counters = new HashMap<Character,Integer>();
                char[] letters = textArea.getText().toCharArray();
                for(char letter: letters)
                {
                    counters.put(letter,counters.getOrDefault(letter,0) + 1);
                }

1 użytkowników online, w tym zalogowanych: 0, gości: 1