我有两个框架,我想点击第2帧中的按钮,禁用第1帧中的按钮。这可能吗?程序从frame1开始执行并打开frame2。它来自这个frame2,我想在第1帧中禁用该按钮但是它不起作用.....怎么能这样做?
附加信息:当我使用面板时,我也有类似的问题。我只是不明白。 Plz帮忙!
以下是程序开始执行的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;
}
答案 0 :(得分:3)
这很简单,你的抽象就可以了。这是实现目标的基本方法:
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
嵌套元素的视图,然后您可以在同一帧内切换面板和对话框。