JDialog setVisible

时间:2015-01-28 11:19:46

标签: java swing jdialog

我有两个类:class jDialog和JFrame

当我单击JFrame中的按钮时,它调用jDialog类并获取jDialog内文本字段上的文本并将其设置为另一个变量。 这是伪代码

class JFrame {
  private jDialog jd;
  private JButton b;

  public JFrame(){

  b actionListener {
    jd = new jDialog();
    jd.setModal(true);
    jd.setVisible(true);

    String someString = jd.getString();

    checkIfExists(someString);
   }
     }
       }

 public void checkIfExists(String someString){

    if(someString exists) {
       JOptionPane.showMessageDialog(null,"String exists);
       jd.setVisible(true);

    } else {
        save someString
        jd.setVisible(true);
    }
  }

 class jDialog {
 private JButton a;
 private String s = "";  
 private JTextField t;

   public jDialog{

     a actionListener {
     s = t.getText();
      setVisible(false);
     }
        }

   public String getString() {
   return s;
   }
}

当我输入一个存在的字符串时,它会提示JOptionPane它是否存在,但程序只流一次。当我尝试编辑文本字段时,它不会回到“检查”状态。如果字符串存在,则该流程停止在' setVisible(false)' on' actionListener'在' jDialog班'我使用system.out跟踪它。 (同样适用于!存在,它只保存一次,当我尝试保存另一个不存在的字符串时,它会停止)

知道如何保持jDialog运行吗? 我只使用setVisible()来隐藏它,而不是dispose();

1 个答案:

答案 0 :(得分:0)

  

当我尝试编辑文本字段时,如果字符串存在,则不会返回到“检查”字符串

那是因为checkIfExists(someString)是在b监听器中完成的,它实例化了一个新的jDialog(),立即在字段中获取字符串并执行检查。

您应该只实例化一个jDialog(在JFrame代码中):

class JFrame {
    private jDialog jd = new jDialog();

b侦听器集中可见jd对象(并最终重置JTextField的内容):

b actionListener {
    jd.setVisible(true);

a听众(jDialog班级)中执行检查:

a actionListener {
    checkIfExists(t.getText());
    setVisible(false);
}