从其他JFrame控制JCheckBox

时间:2018-12-16 09:24:15

标签: java swing jframe jcheckbox

我正在开发一个Swing应用程序,该应用程序需要从另一个JCheckBox的{​​{1}}中取消选中或检查JFrame。我尝试了多种方法,但无法做到。 那可能吗?我的应用程序离线。 请帮我。谢谢

2 个答案:

答案 0 :(得分:1)

这应该不是问题。你干了什么?

常见问题包括:

  • 倾向于不必要地继承。该消息似乎已经通过java.lang.Thread,但是由于某种原因,GUI没有通过。
  • 关注点分离差(直接用于模型)。
  • 从组件开始并获取模型,而不是从模型开始并以此构建组件。

这是您可能如何做的一个例子。

import javax.swing.*;

public class Example {
    public static void main(String[] args) { 
        java.awt.EventQueue.invokeLater(Example::go);
    }
    private static void go() {
        ButtonModel model = new JToggleButton.ToggleButtonModel();
        openFrame("Frame A", model);
        openFrame("Frame B", model);
    }
    private static void openFrame(String title, ButtonModel checkModel) {
        JFrame frame = new JFrame(title);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        JCheckBox checkBox = new JCheckBox("Tick me!");
        checkBox.setModel(checkModel);
        frame.add(checkBox);
        frame.pack();
        frame.setVisible(true);
    }
}

答案 1 :(得分:1)

您还可以通过按钮来毫无问题地控制它:

import javax.swing.*;
import java.awt.Dimension;

public class Frames {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            JCheckBox cb = new JCheckBox("Checkbox");
            JButton b = new JButton("Click me!");
            b.addActionListener(e -> cb.setSelected(!cb.isSelected()));

            createFrame("Frame 1", cb);
            createFrame("Frame 2", b);
        });
    }
    private static void createFrame(String title, JComponent b) {
        JFrame frame = new JFrame(title);
        frame.add(b);
        frame.setMinimumSize(new Dimension(300, 50));
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }
}