从其他 JFrame 控制 JCheckBox
Controlling JCheckBox from other JFrame
我正在开发一个 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);
}
}
我正在开发一个 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);
}
}