Diese Frage ähnelt der folgenden: Wie verweisen Sie auf a Schaltfläche in seinem Actionlistener?

Ich möchte ein einfaches Formular mit 8 Schaltflächen erstellen. Wenn ich die Umschalttaste auswähle und auf die Schaltfläche Speichern klicke, wird sie in die Textdatei geschrieben, d. h. "Taste x, Ein". Wenn ich das Formular das nächste Mal öffne, prüft das Formular im Notizblock, ob Button x bereits aktiviert ist. Wenn diese Option aktiviert ist, ist die Umschalttaste bereits ausgewählt und umgekehrt.

Ich weiß, wie man in den Notizblock schreibt und aus ihm liest, aber ich bin nicht sicher, wie ich überprüfen soll, ob der Benutzer die Schaltfläche 2 auswählt, dann schreibt der Code in die zweite Zeile "Button2, on".

Hier ist mein bisher zu schreibender Code:

Path path = Paths.get(csvFile);

// check if button x is selected, if yes : <- how to refer to button x ?
BufferedWriter bw = new BufferedWriter(New FileWriter(csvFile, true);
writer.write ("button x,on" + "\r\n");
writer.close

Und das ist mein Code, wenn das Formular geöffnet wird:

BufferedReader br = null;
String line = "";
String resFilesplitby = ",";
br = new BufferedReader(new FileReader(csvFile));

        while((line = br.readLine()) != null){
            String[] condition = line.split(csvFilesplitby);
            String power = condition[1];

            // check if button x is already selected
            if (button x power.equals("on")){
                button x.isSelected();
            }
        }
0
Kevin Guswanto 23 Juni 2018 im 13:41

3 Antworten

Beste Antwort

Es gelingt mir, einen einfachen Weg zu finden, um das Problem zu lösen, indem ich die Schaltfläche einem Array hinzufüge.

JToggleButton[] buttons = new JToggleButton[8];

buttons[0] = seat1; //this is variable name of my button.
buttons[1] = seat2;
buttons[2] = seat3;
buttons[3] = seat4;
buttons[4] = seat5;
buttons[5] = seat6;
buttons[6] = seat7;
buttons[7] = seat8;

// do the work here
for (JToggleButton btn : buttons){
   if(btn.isSelected){

   }
}
1
Kevin Guswanto 16 Juli 2018 im 10:32

Der Einfachheit halber empfehle ich, dass Sie alle Schaltflächenstatus gleichzeitig schreiben und sie direkt als booleschen Wert schreiben:

//Write the state of all the buttons in a single line:
writer.write (
    x1.isSelected() + "," + 
    x2.isSelected() + "," + 
    x3.isSelected() + "," + 
    x4.isSelected() + "," + 
    x5.isSelected() + "," + 
    x6.isSelected() + "," + 
    x7.isSelected() + "," + 
    x8.isSelected());

Lesen Sie es dann als einzelne Zeile zurück und vergleichen Sie einfach jedes der 8 Elemente, die durch das "," getrennt sind:

String[] condition = line.split(csvFilesplitby);
if (condition[0].equalsIgnoreCase("true")){
    x1.setSelected(true);
}else if (condition[1].equalsIgnoreCase("true")){
    x2.setSelected(true);
}else if (condition[2].equalsIgnoreCase("true")){
    x3.setSelected(true);
}else if (condition[3].equalsIgnoreCase("true")){
    x4.setSelected(true);
}else if (condition[4].equalsIgnoreCase("true")){
    x5.setSelected(true);
}else if (condition[5].equalsIgnoreCase("true")){
    x6.setSelected(true);
}else if (condition[6].equalsIgnoreCase("true")){
    x7.setSelected(true);
}else if (condition[7].equalsIgnoreCase("true")){
    x8.setSelected(true);
}

Natürlich sollten Sie eine Fehlerprüfung hinzufügen und sicherstellen, dass alle Schaltflächen deaktiviert sind, bevor Sie festlegen, ob sie ausgewählt sind oder nicht. Aber ich bin sicher, dass Sie diesen Teil klären können.

0
sorifiend 23 Juni 2018 im 11:33

Alternativ können Sie Folgendes ausprobieren:

import java.awt.Component;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
import javax.swing.*;

public class Ques1 extends JFrame implements ActionListener {

    private JPanel panel;
    private JToggleButton[] buttons;

    public Ques1() {

        initComponents();
        buttonswork();
    }

    private void initComponents() {

        buttons = new JToggleButton[6];
        panel = new JPanel();

        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.LINE_AXIS));
        panel.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0));

        for (int i = 0; i < buttons.length; i++) {
            JToggleButton tb = buttons[i];
            tb = new JToggleButton("tb" + (i + 1));
            tb.addActionListener(this);
            panel.add(tb);
        }

        getContentPane().add(panel);
        pack();
    }

    private void buttonswork() {
        try {
            String line = "";
            String buttonString = "tb1-0\n"
                    + "tb2-0\n"
                    + "tb3-0\n"
                    + "tb4-1\n"
                    + "tb5-1\n"
                    + "tb6-0\n";

            BufferedReader br = new BufferedReader(new StringReader(buttonString));
            while ((line = br.readLine()) != null) {
                Component[] components = panel.getComponents();

                for (Component c : components) {
                    if (c instanceof JToggleButton) {
                        String ac = ((JToggleButton) c).getActionCommand();
                        ((JToggleButton) c).addActionListener(this);
                        if (ac.equalsIgnoreCase(line.split("-")[0])) {
                            ((JToggleButton) c).setSelected(Integer.parseInt(line.split("-")[1]) == 1);
                        }
                    }
                }
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }

    }

    public static void main(String[] args) {

        EventQueue.invokeLater(() -> {
            new Ques1().setVisible(true);
        });
    }

    @Override
    public void actionPerformed(ActionEvent e) {

      switch (e.getActionCommand()) {
        case "tb1":
            //do your work here ...
            break;
        case "tb2":
            //do your work here ...
            break;

      }
    }
}
0
Madushan Perera 23 Juni 2018 im 12:49