运行后,标题可以显示而组件显示不出来,已经将setVisible放到最后了,
定义了setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE); 也无法关闭界面,麻烦大家看一看叭!感谢
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
**public class PtUserOperate **{
public void ptUserOperate() {
JFrame jf = new JFrame("普通用户操作界面");
jf.setLayout(new FlowLayout(FlowLayout.CENTER));
jf.setBounds(460, 300, 400, 300);
Dimension preferredSize = new Dimension(100,30);
JButton b1 = new JButton("查询书籍");
b1.setPreferredSize(preferredSize);
JButton button2 = new JButton("借阅书籍");
button2.setPreferredSize(preferredSize);
JButton button3 = new JButton("归还书籍");
button3.setPreferredSize(preferredSize);
JButton button4 = new JButton("修改密码");
button4.setPreferredSize(preferredSize);
jf.add(b1);
jf.add(button2);
jf.add(button3);
jf.add(button4);
jf.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
jf.setResizable(false);
jf.setVisible(true);
}
}
}
public class PtLogin extends JDialog {
JTextField usernameText;
JPasswordField pwdText;
JLabel label1;
JLabel label2;
JButton button;
PtLogin() {
createGUIElements();
}
void createGUIElements() {
// 设置登录对话框,并设置位置及大小、模态等
JFrame jf = new JFrame("普通用户登录系统");
jf.setBounds(460, 300, 400, 150);
jf.setLayout(new FlowLayout(FlowLayout.CENTER));
setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
label1 = new JLabel("用户名:");
usernameText = new JTextField("",30);
label2 = new JLabel("密 码:");
pwdText = new JPasswordField("",30);
button = new JButton("登录");
button.setSize(40, 20);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
login();
} // 方法结束
});
jf.add(label1);
jf.add(usernameText);
jf.add(label2);
jf.add(pwdText);
jf.add(button);
jf.setResizable(false);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants. HIDE_ON_CLOSE);
}
** void showptOperateWindows()**{//展示普通用户操作界面
PtUserOperate puo= new PtUserOperate();
puo.ptUserOperate();**
}
public void login() // 处理登录按钮事件
{
try {
// boolean a = true;
File file = new File("D:\\IdeaProjects\\Java课设\\src", "用户信息.txt");
String operator = usernameText.getText();
String password = new String(pwdText.getPassword());
FileInputStream intput = new FileInputStream(file);
BufferedReader reader = new BufferedReader(new InputStreamReader(intput));
String tempString;
List<String> list = new ArrayList<>();
while ((tempString = reader.readLine()) != null) {
list.add(tempString);
}
//判断输入的用户名是否存在
boolean flag = false;
String[] userinf = new String[5];
for (String user : list) {
userinf = user.split(",");
if (operator.equals(userinf[0])) { //判断用户名是否存在
flag = true;
break;
}
}
//如果存在,判断密码是否正确
if (flag == true) {
if (password.equals(userinf[1])) {
JOptionPane.showMessageDialog(null, "登陆成功", "登陆成功", JOptionPane.NO_OPTION);
**showptOperateWindows();// 显示主窗体,普通用户操作界面**
//写日志
Date nowDate = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String returnTime = sdf.format(nowDate);
File file2 = new File("D:\\IdeaProjects\\Java课设\\src", "日志.txt");
FileWriter fw1 = new FileWriter(file2, true);
fw1.write(returnTime + " " + operator + "登录了");
fw1.write(System.getProperty("line.separator"));//在段落后添加一个换行符
fw1.close();
//登录
try {
User user = new User();
user.operation(userinf, operator);
} catch (Exception e) {
System.out.println("出错了吧!");
User user = new User();
user.operation(userinf, operator);
}
} else {
JOptionPane.showMessageDialog(null, "密码错误", "密码错误", JOptionPane.WARNING_MESSAGE);
pwdText.setText("");
}
} else {
JOptionPane.showMessageDialog(null, "用户名不存在", "用户名不存在", JOptionPane.WARNING_MESSAGE);
usernameText.setText("");
pwdText.setText("");
}
intput.close();
reader.close();
} catch (Exception e) {
System.out.println("出错了!!!");
PtLogin ptlogin = new PtLogin();
ptlogin.createGUIElements();
return;
}
}
后面调用showptOperateWindows()函数的代码太长就不展示了
这个是执行的结果
窗口的默认布局是BorderLayout的布局方式,所有控件层叠在一起了,要设置布局。