【发布时间】:2015-07-23 18:27:15
【问题描述】:
大家好,我是一名业余程序员(Gr12),正在开发一个程序,该程序通过自定义 JDialog(使用 eclipse WindowBuilder 创建)向用户询问用户名和密码
我遇到的问题是从“弹出窗口”中检索数据,我编写了一个测试程序,但在我输入任何数据之前会显示这些值。
这是我的代码:
package winowbuilderstuff;
public class TestDialog {
/**
* @param args
*/
public static void main(String[] args) {
LoginDialog login = new LoginDialog ();
login.setVisible(true);
String username = login.getUser();
String password = login.getPass();
System.out.println("Username: " + username);
System.out.println("Password: " + password);
}
}
package winowbuilderstuff;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JPasswordField;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class LoginDialog extends JDialog {
private final JPanel contentPanel = new JPanel();
private JTextField txtfUsername;
private JPasswordField pswrdf;
/**
* Launch the application.
*/
public static void main(String[] args) {
try {
LoginDialog dialog = new LoginDialog();
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Create the dialog.
*/
public LoginDialog() {
setTitle("Login");
setBounds(100, 100, 478, 150);
getContentPane().setLayout(new BorderLayout());
contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
getContentPane().add(contentPanel, BorderLayout.CENTER);
contentPanel.setLayout(null);
{
JLabel lblUsername = new JLabel("Username");
lblUsername.setBounds(25, 13, 68, 14);
contentPanel.add(lblUsername);
}
{
txtfUsername = new JTextField();
txtfUsername.setToolTipText("Enter your username");
txtfUsername.setBounds(137, 13, 287, 17);
contentPanel.add(txtfUsername);
txtfUsername.setColumns(10);
}
JLabel lblPassword = new JLabel("Password");
lblPassword.setBounds(25, 52, 68, 14);
contentPanel.add(lblPassword);
pswrdf = new JPasswordField();
pswrdf.setToolTipText("Enter your password");
pswrdf.setBounds(137, 50, 287, 17);
contentPanel.add(pswrdf);
{
JPanel buttonPane = new JPanel();
buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
getContentPane().add(buttonPane, BorderLayout.SOUTH);
{
JButton btnLogin = new JButton("Login");
btnLogin.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
getUser();
getPass();
dispose();
}
});
btnLogin.setActionCommand("OK");
buttonPane.add(btnLogin);
getRootPane().setDefaultButton(btnLogin);
}
{
JButton btnCancel = new JButton("Cancel");
btnCancel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
dispose();
}
});
btnCancel.setActionCommand("Cancel");
buttonPane.add(btnCancel);
}
}
}
public String getUser(){
return txtfUsername.getText();
}
public String getPass(){
return pswrdf.getText();
}
}
【问题讨论】:
-
contentPanel.setLayout(null);Java GUI 必须在不同的语言环境中使用不同的 PLAF 在不同的操作系统、屏幕尺寸、屏幕分辨率等上工作。因此,它们不利于像素完美布局。而是使用布局管理器,或 combinations of them 以及 white space 的布局填充和边框。 -
..哦,除非问题是关于 IDE。
-
请参阅编辑回答。