Zapisywanie komponentów.

0

Witam. Mam pewien problem z programem. Prosiłbym o pomoc, ponieważ nie wiem jak zrobić aby komponenty takie jak JCheckBox oraz JComboBox zapisywały się poprawnie. Zacząłem już coś z JCheckBox . Wyjaśnię na poniższym przykładzie:

        a = new JCheckBox("Angielski");
        b = new JCheckBox("Francuski");
        c = new JCheckBox("Rosyjski");
        d = new JCheckBox("Niemiecki");
        a.setBounds(120,140,100,20);
        b.setBounds(120,160,100,20);
        c.setBounds(120,180,100,20);
        d.setBounds(120,200,100,20);
        add(a);
        add(b);
        add(c);
        add(d);

Powyższy kod przedstawia zmienne a,b,c,d przypisane do JCheckBox.

    public void actionPerformed(ActionEvent e)
    {
    	Object source = e.getSource();
    	if (source==exit)
    	{
    		System.exit(0);
    	}	
        else if (source==save)
        {
           try
           	{

           String nazis= naz.getText();
           String imieis = im.getText();
           String uwagis = pta.getText();
           String angis = a.getText();
           String betis = b.getText();
           String cetis = c.getText();
           String detis = d.getText();
           FileWriter stream = new FileWriter("C:/file.txt");
           BufferedWriter zap = new BufferedWriter(stream);
           zap.write("Nazwisko: " +nazis);
           zap.newLine();
           zap.write("Imię: " +imieis);
           zap.newLine();
           zap.write("Wybrałeś język: " +angis);
           zap.newLine();
           zap.write("Wybrałeś język: " +betis);
           zap.newLine();
           zap.write("Wybrałeś język: " +cetis);
           zap.newLine();
           zap.write("Wybrałeś język: " +detis);
           zap.newLine();
           zap.write("Uwagi: " +uwagis);
           zap.newLine();
           zap.close(); 	
           	} catch(Exception ex){}
        }

Powyższy kod jest częścią kodu public void actionPerformed(ActionEvent e)w którym zawarta jest odczytywanie funkcji klawisza exit oraz save. Klawisz save niestety działa tak, że jeżeli zaznaczę np. tylko angielski to i tak zapisuje wszystko z JCheckBox. Prosiłbym o pomoc z tym JCheckBox i tak jak wyżej napisałem JComboBox, który jest zawarty w poniższym kodzie:

        //ComboBox//
        String[] r = new String[46];
        String[] mi = new String[13];
        String[] dz = new String[32];
        

        rok= new JComboBox();
        miesiac= new JComboBox();
        dzien= new JComboBox();
        
                   dz[0] = "Dzień";
           for(int x = 1; x<32;x++)
           	{
           dz[x] = Integer.toString(x);
            dzien = new JComboBox(dz);
            }
            
           mi[0] = "Miesiąc";
           for(int x = 1; x<13;x++)
    	    {
           mi[x] = Integer.toString(x);
           miesiac = new JComboBox(mi);
            }
            
           r[0] = "Rok";
           for(int x = 1; x<46;x++)
           	{
            r[x] = Integer.toString(x + 1969);
            rok = new JComboBox(r);
            }
            
        dzien.setBounds(130,95,60,25);
        miesiac.setBounds(190,95,70,25);
        rok.setBounds(260,95,60,25);
        
        add(dzien);
        add(miesiac);
        add(rok);
1
if(a.isSelected())
{
    zap.write("Wybrałeś język: "+a.getText());
    zap.newLine();
}

Problemu z JComboBox nie rozumiem.

0

Dziękuję metoda if działa :) Z JComboBox już też sobie poradziłem :) Chodziło o to, że program miał zapisać wybrany dzień. Gdyby ktoś chciał to udostępniam kod:

          String r, mi, dz;
           try
           	{
           FileWriter stream = new FileWriter("C:/file.txt");
           BufferedWriter zap = new BufferedWriter(stream);
           zap.write("Nazwisko: " +naz.getText());
           zap.newLine();
           zap.write("Imię: " +im.getText());
           zap.newLine();
           if(m.isSelected())
           {
           zap.write("Płeć: "+m.getText());
           zap.newLine();
           }
           else if(k.isSelected())
           {
           zap.write("Płeć: "+m.getText());
           zap.newLine();
           }
           zap.write("Data urodzenia: Dzień: ");
           zap.write(dz =(String)dzien.getSelectedItem());
           zap.write(" Miesiac: ");
           zap.write(mi =(String)miesiac.getSelectedItem());
           zap.write(" Rok: ");
           zap.write(r =(String)rok.getSelectedItem());
           zap.newLine();
           if(a.isSelected())
           {
           zap.write("Język obcy: "+a.getText());
           zap.newLine();
           }
           if(b.isSelected()) 
           	{
           zap.write("Język obcy: "+b.getText());
           zap.newLine();
            }
           if(c.isSelected()) 
           	{
           zap.write("Język obcy: "+c.getText());
           zap.newLine();
            }
           if(d.isSelected()) 
           	{
           zap.write("Język obcy: "+d.getText());
           zap.newLine();
            }
           zap.write("Uwagi: " +pta.getText());
           zap.newLine();
           zap.close(); 
0
           if(a.isSelected())
           {
           zap.write("Język obcy: "+a.getText());
           zap.newLine();
           }
           if(b.isSelected()) 
               {
           zap.write("Język obcy: "+b.getText());
           zap.newLine();
            }
           if(c.isSelected()) 
               {
           zap.write("Język obcy: "+c.getText());
           zap.newLine();
            }
           if(d.isSelected()) 
               {
           zap.write("Język obcy: "+d.getText());
           zap.newLine();
            }

Poważnie? o_O za takie kody powinien być zakaz używania komputera...

  1. Wrzuć te checboxy do kolekcji, a moze nawet i do mapy.
  2. Za pomocą pętli wybieraj te które są selected.
  3. Wykonaj instrukcje zapisywania, bo przecież jest IDENTYCZNA za każdym razem

Zawsze zastanawia mnie: gdzie jest granica kiedy włączyłbyś myslenie? Przy ilu językach? 10? 20? 100? Kiedy pomyślałbyś że może kopiowanie ifów to nie jest dobre rozwiązanie? Bo powinieneś już kiedy liczba przypadków przekroczyła 2, max 3...
Poza tym actionListener powinien być osobną klasą dla każdego guzika, a nie klockiem na kilkaset linii z milionem ifów.

0

Hmm jestem początkującym programistą i cieszę się że działa w ten sposób, ale ważne że działa. Moim zadaniem było w okienku porobić pewne komponenty i je zapisać do pliku. Zapisuje? Zapisuje. Ja się cieszę.

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