我有两个框架,我想单击框架 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/