从其他 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);
    }
}