0
我想禁用JDialog框架上的按钮,我尝试了一切,但它不起作用。该程序的执行从一个框架开始,当点击该按钮时,弹出对话框。很简单,当你点击对话框上的按钮时,框架的按钮应该被禁用,对话框将关闭。无法从JDialog禁用框架按钮
顺便说一句:一切正常,它只是框架的按钮,不会被禁用!
PS:我在NetBeans上编写了这个代码,所以为了简单起见,我删除了不必要的代码。
下面是帧编码:
public class Frame extends javax.swing.JFrame {
Dialog D = new Dialog(this, true);
public Frame(){
setTitle("Frame");
initComponents();
setResizable(false);
}
void buttonDisable(){
Btn1.setEnabled(false);
}
private void Btn1ActionPerformed(java.awt.event.ActionEvent evt) {
D.setVisible(true);
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Frame().setVisible(true);
}
});
}
// Variables declaration - do not modify
public javax.swing.JButton Btn1;
// End of variables declaration
}
下面是对JDialog盒编码:
public class Dialog extends javax.swing.JDialog {
public Dialog(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
setTitle("Dialog");
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
new Frame().buttonDisable();
dispose();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
Dialog dialog = new Dialog(new javax.swing.JFrame(), true);
dialog.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent e) {
System.exit(0);
}
});
dialog.setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
// End of variables declaration
}
我只是尝试这样做,这是行不通的。通过在对话框中保存父项,你的意思是什么? – Anafam
@Anafam你没有在正确的实例上调用buttonDisable。事实上,你应该保留对原始帧的引用,并在该帧上调用buttonDisable(而不是创建一个与第一帧不同的新帧)。您应该回顾一下Java的基本概念,以充分理解您的问题。 –
在您的框架代码中,您正在创建一个私有变量Dialog(不是真正根据命名规则,但除此之外)接收“this”作为参数。当我们查看你的Dialog代码时,我们看到了这个很好的构造函数来获取Frame,并且只是使用框架来调用super()。但是你真正想要的是将这个父母保存到一个私有变量中,以便稍后可以访问它,当你真正需要它时,你可以在父母上触发一些特定的功能。 我还不清楚为什么在对话框中需要第二个主对话 – 3xil3