public class Login extends JFrame{
JFrame frame; //frame
JTextField field; //to get username
JPasswordField p; //password field
JLabel l; //used for printing on frame
JButton b;
Login() {
frame = new JFrame("Login");
frame.setSize(350,200);
frame.setLocationRelativeTo(null);
frame.setLayout(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
l = new JLabel("Enter Username");
l.setLocation(10,10);
l.setSize(l.getPreferredSize());
frame.add(l);
field = new JTextField();
field.setColumns(15);
field.setSize(field.getPreferredSize());
field.setLocation(120,10);
frame.add(field);
l = new JLabel("Enter Password");
l.setLocation(10,40);
l.setSize(l.getPreferredSize());
frame.add(l);
p = new JPasswordField();
p.setColumns(15);
p.setSize(p.getPreferredSize());
p.setLocation(120,40);
frame.add(p);
b = new JButton("OK");
b.setSize(b.getPreferredSize());
b.setLocation(120, 80);
frame.add(b);
frame.setVisible(true);
}
private class b implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
String str;
str = field.getText();
if(str.equals("")) {
JOptionPane.showMessageDialog(null,"Please enter username");
field.requestFocusInWindow();
} else {
}
}
}
public static void main (String[] args) {
new Login();
}
}
按钮在我点击时无法正常运行
答案 0 :(得分:4)
按下它时按钮不起作用
您需要将ActionListener
添加到按钮:
b = new JButton("OK");
b.addActionListener( new b() );
让您的班级名称更具描述性。 “b”不具有描述性。此外,类名应以大写字符开头。
不要使用null布局和setBounds(...)。 Swing旨在与Layout Managers一起使用。为Swing基础知识提供方便的教程链接。
答案 1 :(得分:2)
查看How to Write an Action Listeners和How to Use Buttons, Check Boxes, and Radio Buttons。
基本上,您从未使用ActionListener
JButton
b.addActionListener(new b());
如果使用有意义的变量名称并遵循语言的建立编码约定,则代码将更容易阅读。看一下Code Conventions for the Java TM Programming Language,了解更多细节,它会让人们更容易阅读您的代码并让您阅读其他代码
您可能还想阅读您可能希望阅读Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?,但由于您被放弃了布局管理器,因此使用setPreferredSize
完全没有意义。
避免使用null
布局,像素完美布局是现代ui设计中的一种幻觉。影响组件个体大小的因素太多,您无法控制。 Swing旨在与布局管理器一起工作,放弃这些将导致问题和问题的终结,您将花费越来越多的时间来纠正