JDialog和JFrame以及新实例

时间:2015-01-27 08:31:33

标签: java swing jframe jdialog

我有2个类 - 带按钮的JFrame和带有少量文本字段的JDialog(弹出窗口)。现在,当我单击JFrame中的按钮时,JDialog会显示:

/*** someClass class ****/  
JButton btnNewButton = new JButton("");
btnNewButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            jd = new jDialog();
            jd.setModal(true);
            jd.setVisible(true);    
        }
    });
public void doStuff(String one....String five){
   ... ..
  }

现在弹出一个jDialog,我需要填写其中的一些文本字段,然后点击另一个按钮进行确认。

/*** jDialog class ***/   
JButton btnConfirm = new JButton("");
btnNewButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            one = 1_tf.getText();
            two = 2_tf.getText();
            three = 3_tf.getText();
            four = 4_tf.getText();
            five = 5_tf.getText();

            doAnything(one,two,three,four,five);

            1_tf.setText("");
            2_tf.setText("");
            3_tf.setText("");
            4_tf.setText("");
            5_tf.setText("");                           
        }
    });

public void doAnything(String one,String two,String three,String four,String five){

 someClass sc = new someClass();
 sc.doStuff(one,two,three,four,five);        
}

textfield的值将传递给doAnything()方法,doAnything()内部是someClass类的一个实例,用于访问sc.doStuff()方法并传递值。

现在的问题是,每当我点击jDialog类上的确认时,就会出现一个新的JFrame,因此有2个JFrame不是我想要的。就像我在jdialog上做的事情一样,它会创建一个新的JFrame而不是重叠原始的JFrame。

2 个答案:

答案 0 :(得分:1)

在doAnything()中,不要重新创建someClass(最好是读取java命名约定 - 类应该从大写字母开始)实例。

为someClass实例定义类字段?只创建一次(如果它为null)并重复使用它。

答案 1 :(得分:0)

这可能是因为在someClass构造函数中您创建了一个JFrame节目。要避免此问题,请对static方法进行doStuff()引用。

声明为:

public static doStuff(one, two, three, four, five) {
    ...
}

并将其用作:

someClass.doStuff(one, two, three, four, five);

现在,当您使用该方法时,您不必创建someClass类的对象,然后您就不必调用构造函数方法。