Как эффективно ссылаться на указанную кнопку на основе определенной характеристики - PullRequest
0 голосов
/ 23 июня 2018

Этот вопрос похож на этот: Как вы ссылаетесь на кнопку внутри ее actionlistener?

Я хочу создать простую форму, содержащую 8 кнопок переключения.Если я выберу кнопку переключения и нажму кнопку «Сохранить», она запишется в текстовый файл, например «Кнопка x, Вкл».В следующий раз, когда я открою форму, форма будет проверять в блокноте, если кнопка Х уже включена.Если эта кнопка включена, кнопка переключения уже будет выбрана, и наоборот.

Я знаю, как писать и читать из блокнота, но я не уверен, как проверить, т.е. кнопка выбора пользователя 2, а затем коднапишу во вторую строку "Button2, on"

Вот мой код, который нужно написать:

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

, и это мой код при открытии формы:

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();
            }
        }

Ответы [ 3 ]

0 голосов
/ 23 июня 2018

В качестве альтернативы вы можете попробовать что-то вроде ниже:

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 голосов
/ 24 июня 2018

Мне удалось найти простой способ решения проблемы, добавив кнопку в массив.

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){

   }
}
0 голосов
/ 23 июня 2018

Для простоты я рекомендую вам написать все состояния кнопок одновременно и записать их непосредственно как логическое значение:

//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());

Затем прочитать его обратно в виде одной строки и просто сравнить каждыйиз 8 элементов, разделенных на «,»:

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);
}

Очевидно, вам следует добавить проверку ошибок и убедиться, что все кнопки отменены, прежде чем устанавливать, выбраны они или нет.Но я уверен, что вы можете решить эту часть.

...