【发布时间】:2014-01-10 16:24:37
【问题描述】:
我一直在使用 bash 脚本以及一些 java(控制台)和 python 来满足我的编程需求。我想是时候将我的工作整理到一些图形环境中了,我偶然发现了一项让我挂了几个小时的基本任务。
主函数在启动主应用程序窗口之前调用登录 JDialog。 JDialog 实例运行基本的身份验证检查(简单的 if 语句)并相应地将登录对话框中的类字段设置为 true/false。我很想在调用类中检索此检查的结果和在文本框中输入的用户名。似乎几乎不可能。
那么,创建一个新的窗口实例(无论是更合适的框架、对话框...)并能够检索一些类字段的最佳方法是什么?我想到的表格比是/否的答案要复杂一些。我应该能够调出登录窗口、设置窗口或带有报告参数的表单。
编辑: 一些示例问题的代码。
public class Main extends JFrame {
private JPanel contentPane;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Login login = new Login();
login.showLogin();
System.out.println(login.getTheText());
Main frame = new Main();
frame.setVisible(false);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public Main() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
setContentPane(contentPane);
}
}
public class Login extends JDialog {
private JTextField txtTest;
public void showLogin() {
try {
Login dialog = new Login();
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
public String getTheText() {
return txtTest.getText();
}
public Login() {
setModal(true);
setBounds(100, 100, 450, 300);
getContentPane().setLayout(null);
txtTest = new JTextField();
txtTest.setText("test");
txtTest.setBounds(112, 141, 86, 20);
getContentPane().add(txtTest);
txtTest.setColumns(10);
}
}
我在创建时将文本字段 txtTest 设置为“测试”。无论我在框中输入什么,我都会继续在 Main 中接收原始的“测试”值。
【问题讨论】:
-
查看this answer 创建模态
JDialog登录 -
由于您没有使用模态对话框,因此您出于某种原因忽略了我的建议——为什么?如果您有充分的理由这样做,请告诉我们原因,但请不要忽略记录。另请查看一个多小时前我的回答中的链接。
-
我正在使用模态(我认为)和语句 setModal(true);对话框关闭后文本会出现在控制台中,所以我认为模态语句是可以的。将尝试使用构造函数。
-
对不起,你是对的。当对话框返回或设置 JFrame 可见时,您不会查询对话框。请参阅编辑以回答。
标签: java swing jframe joptionpane jdialog