从其他JFrame控制JCheckBox



我正在开发一个Swing应用程序,在该应用程序中,我需要取消选中或从另一JFrame选中JFrame中的JCheckBox。我尝试了多种方法,但都做不到。这可能吗?我的应用程序处于脱机状态。请帮我一下。感谢

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

常见问题包括:

  • 一种不必要的子类化倾向。这个消息似乎已经通过了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);
}
}

您也可以通过一个按钮控制它而不会出现问题:

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

最新更新