Java 开关按钮

标签 java swing

我有一个 Swing JFrame 面板,其中有 2 个文本字段和一个按钮。我需要该按钮能够触发不同文本字段中文本的更改(具体来说,从“打开”到“关闭”)。复杂的因素是我需要它只更改最后单击的文本区域的文本。

下面是我到目前为止的代码。请注意,单击文本字段本身会切换我想要的文本。但我也希望按钮能够切换文本 - 但仅限用户在单击按钮之前单击的最后一个文本区域中的文本。我现在的方式是按钮切换两个文本字段,这是我不想要的。

我怀疑可能有一种简单的方法来实现我忽略的这一点。

public class SwitchesTest extends JFrame {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new SwitchesTest().displayJFrame();
            }
        });
    }

    private void displayJFrame() {
        JFrame frame = new JFrame("Switches");

        JButton button = new JButton("Switch");
        JTextArea switch1 = new JTextArea("On",1,3);
        JTextArea switch2 = new JTextArea("On",1,3);

        frame.getContentPane().setLayout(new GridBagLayout());

        frame.add(switch1);
        frame.add(switch2);
        frame.add(button);

        button.addActionListener(e -> {
            switch1.setText("On".equals(switch1.getText()) ? "Off" : "On");
            switch2.setText("On".equals(switch2.getText()) ? "Off" : "On");
        });

        switch1.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                switch1.setText("On".equals(switch1.getText()) ? "Off" : "On");
            }
        });

        switch2.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                switch2.setText("On".equals(switch2.getText()) ? "Off" : "On");
            }
        });

        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}

最佳答案

未经测试,但只需保存最后单击的文本区域,以便稍后切换。

注意:在我看来,这里使用“静态”开始成为一种反模式。考虑将此类切换为已实例化并在其构造函数中完全初始化的对象。

public class SwitchesTest {

   static private JTextArea lastClicked;

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                displayJFrame();
            }
        });
    }

    static void displayJFrame() {
        JFrame frame = new JFrame("Switches");

        JButton button = new JButton("Switch");
        JTextArea switch1 = new JTextArea("On",1,3);
        JTextArea switch2 = new JTextArea("On",1,3);

        frame.getContentPane().setLayout(new GridBagLayout());

        frame.add(switch1);
        frame.add(switch2);
        frame.add(button);

        button.addActionListener(e -> {
            if( lastClicked != null ) 
              lastClicked.setText("On".equals( lastClicked.getText()) ? "Off" : "On");
        });

        switch1.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                switch1.setText("On".equals(switch1.getText()) ? "Off" : "On");
            lastClicked = switch1;
            }
        });

        switch2.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                switch2.setText("On".equals(switch2.getText()) ? "Off" : "On");
            lastClicked = switch2;
            }
        });

关于Java 开关按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45900045/

相关文章:

java - 上下文菜单与 TabHost 问题

java - 在 JTextArea 中将字符串设置为粗体?

java - 如何解析在html请求中发送的java中的javascript对象?

java - 控制对 JAR 中类的访问

java - 第一个数据库桌面应用程序

java - 在jsp中传递变量时出错?

java - 使用 Java Swing 应用程序,如何将对话框面板中的值获取到主应用程序中?

java - 使 JFrame 透明中断 Mac 上的滚动

java - 在java中设计GUI组件的方法

java - 如何在 JButton 矩阵中创建事件?