java - 将 JFrame 设置为只读

标签 java swing jframe

是否有任何方法可以将 JFrame 转换为只读,类似于 Collections.unmodifyingList()

我需要将它作为参数传递给许多类,但我不希望它们关闭窗口或执行除咨询之外的任何操作。另外,我需要一些可用的自定义方法(因为我正在扩展 JFrame)。

(我的意思不是禁用所有组件,我的意思是如果您有对该对象的引用,则无法在该对象上写入)。

最佳答案

不,没有办法做到这一点。正确的解决方案是根本不扩展 JFrame。一般来说,您永远不应该扩展组件类来完成您只需调用其公共(public)方法就可以完成的事情;像 JFrame 这样的类的常规使用并不构成一种新型的 JFrame,就像将不同的人放在大众汽车中不能将其视为一种新型汽车一样。

相反,您应该将 JFrame 包装在一个不扩展任何内容的类中,并将 JFrame 隐藏在其中。然后你可以只暴露你想要暴露的方法:

public class MyAppWindow {
    private final JFrame frame;

    private final JComponent frameContents;

    public MyAppWindow() {
        this.frame = new JFrame("My App");
        this.frameContents = new JPanel();
        // Set up frameContents here...
    }

    public void show() {
        frame.setVisible(true);
    }

    public void hide() {
        frame.setVisible(false);
    }

    public void addField(Component field,
                         String labelText) {

        JLabel label = new JLabel(labelText);
        label.setLabelFor(field);

        // Create layout constraints for label here...

        frameContents.add(label, constraints);

        // Create layout constraints for field here...

        frameContents.add(field, constraints);
    }
}

从技术上讲,没有 extends 子句的类将从 Object 继承。

关于java - 将 JFrame 设置为只读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36679602/

相关文章:

java - Gradle 构建错误(Android Studio 2.2.2)

java - 使用 JButton 关闭当前打开的应用程序

java - 如何在使用 ActionListener 按钮和 GUI 时将项目添加到数组列表?

java - 在 Eclipse 中运行 Junit 5 所需的最低 Maven 依赖项是什么?

java - 类必须声明为抽象或实现抽象方法 : Intellij error?

java - 排序实现 Comparable 不适用于 Android

java - 多线程程序中的Swing图形

java - 如何使用 2 个 JPanel 对象对齐 JButton 以形成基本的 java GUI

java - 设置 JButton 的宽度以容纳一定数量的字符

java - 尝试在 JFrame 上绘制图像