java - 一个框架可以访问另一个框架的按钮/组件吗?

标签 java swing jframe awt

我有两个框架,我想单击框架 2 中的按钮并禁用框架 1 中的按钮。这可能吗?程序从第 1 帧开始执行并打开第 2 帧。从这个frame2开始,我想禁用frame1中的那个按钮,但它不起作用......怎么办?

附加信息:当我使用面板时,我也遇到类似的问题。我就是不明白。请帮忙!

以下是程序开始执行的第 1 帧的编码:

public class Frame1 extends javax.swing.JFrame {

Frame2 frm2 = new Frame2();    

public Frame1() {
    initComponents();        
}    

public void buttonDisable(){
    Btn1.setEnabled(false);
}
private void Btn1ActionPerformed(java.awt.event.ActionEvent evt) {                                     
    frm2.setVisible(true);
}                                    

public static void main(String args[]) {

    java.awt.EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            new Frame1().setVisible(true);
        }
    });
}

public javax.swing.JButton Btn1;

}

这是我想要禁用该按钮的第 2 帧的编码:

public class Frame2 extends javax.swing.JFrame {

public Frame2() {
    initComponents();
}                       

private void Btn2ActionPerformed(java.awt.event.ActionEvent evt) {                                     
    Frame1 frm1 = new Frame1();
    frm1.buttonDisable();
}                                    

public static void main(String args[]) {

    java.awt.EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            new Frame2().setVisible(true);
        }
    });
}

public javax.swing.JButton Btn2;

}

最佳答案

这很简单,你的抽象可以很好地工作。这是实现您想要的目标的基本方法:

class FrameTwo extends JFrame {
    private FramOne firstFrame;

    public FrameTwo(FrameOne firstFrame) {
        this.firstFrame = firstFrame;
    };

    public void doSomething() {
        System.out.println(this.firstFrame.someMethod());
    };
};

基本上,我将 FrameOne 类的实例传递给 FrameTwo 构造函数。有几个选项可以实现此目的,使用静态成员、使用两个框架作为某个类的实例、使用 View 抽象等。您的问题是简单的 OOP,也许可以阅读更多相关内容。

另外,请注意,您可以将 import javax.swing.Frame 添加到文件顶部,然后只需键入 class FrameOne extends Frame 而不是 类 FrameOne 扩展了 javax.swing.Frame;

最重要

在同一应用程序中使用多个框架的情况极为罕见,强烈建议不要这样做。我会考虑创建使用 JPanel 嵌套元素的 View ,然后您可以在同一框架内切换面板和对话框。

关于java - 一个框架可以访问另一个框架的按钮/组件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15842324/

相关文章:

java - servlet 未响应 ajax 请求

java - 从 SQLite 获取数据到 Recyclerview 它导致我为 null

java - 如何更改 ComboBoxEditor 的边框?

Java MVC 何时何地获取我对 EDT 的看法以及我的 Controller 如何对 EDT 执行操作?

java - 如何在两个不同的 JFrame 中绘图

java - 总是在顶部窗口

java - 使用 JRocket 追踪 ColdFusion 内存泄漏

java - RCaller、线程处理和 Java GUI

java - 使用 jcombobox 在 java 中过滤国家/地区-州-城市代码

java - 简单测验不显示下一个答案