【问题标题】:Can a frame access buttons/componenets of another frame?一个框架可以访问另一个框架的按钮/组件吗?
【发布时间】:2013-03-28 08:44:20
【问题描述】:

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

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

这是程序开始执行的frame1的编码:

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;

}

这是我要禁用该按钮的 frame2 的编码:

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;

}

【问题讨论】:

  • 一个应用程序应该只有一个 JFrame。请参阅:stackoverflow.com/questions/9554636/…。让frame2成为模型JDialog,那么你就不用担心禁用按钮了。
  • 谢谢,我不太确定 Dialog 的工作原理,但我研究了一下,现在我要把它们用于这些目的:)

标签: java swing jframe awt


【解决方案1】:

这很简单,您的抽象也可以正常工作。这是实现您想要的基本方法:

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 而不是class FrameOne extends javax.swing.Frame

最重要的

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

【讨论】:

  • 我不确定 FrameOne 的外观如何,您能否将 FrameOne 类添加到您的代码中?我使用 Netbeans 制作了这个,所以它可以即时添加导入。是的,我是一个新的 Java 学习者,但还不错。这只是一个简单的编码来了解我做错了什么。
  • 是的,实际上我在我的应用程序中使用面板来处理所有内容,但我只有一个小的登录屏幕,它在单独的 JFrame 中打开。使用文件菜单访问登录屏幕,该菜单是单个 Jframe 的一部分,用于显示所有其他面板:)
  • 虽然技术上是正确的,但它确实具有将第一帧暴露给第二帧的副作用。这允许第二帧能够更改您可能不想要的第一帧。你可以看看this,它讨论了一个类似的问题
猜你喜欢
  • 2011-03-31
  • 2017-01-04
  • 1970-01-01
  • 2014-01-31
  • 2017-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多