我有和编辑按钮,它应该打开一个不同的Jframe但由于某种原因它在屏幕上闪烁然后消失。我想不出来也许你们可以。我的删除按钮删除所选行上方的行。框架是250,按下按钮是在线323
Button declaration:
btnAdd = new JButton("Add Student");
btnAdd.addActionListener(bh);
btnEdit = new JButton("EDIT");
btnEdit.addActionListener(bh);
btnEdit.setEnabled(false);
btnDelete = new JButton("DELETE");
btnDelete.addActionListener(bh);
btnDelete.setEnabled(false);
btnSort = new JButton("Update");
btnSort.addActionListener(bh);
btnSave = new JButton("SAVE");
btnSave.addActionListener(bh);
btnSave.setActionCommand("Save");
btnAddInput = new JButton("Add Student");
btnAddInput.addActionListener(bh);
btnAddInput.setActionCommand("AddInput");
btnCancel = new JButton("Cancel");
btnCancel.addActionListener(bh);
框架声明:
frame1 = new JFrame("Edit Student");
frame1.setVisible(false);
frame1.setResizable(false);
frame1.setDefaultCloseOperation(HIDE_ON_CLOSE);
frame1.add(addPanel, BorderLayout.CENTER);
frame1.add(buttonPanel2, BorderLayout.PAGE_END);
frame1.pack();
按钮处理程序:
class ButtonHandler实现ActionListener {
public void actionPerformed(ActionEvent e){
if (e.getActionCommand().equals("Add Student")) {
txtID.setText("");
txtName.setText("");
txtMajor.setText("");
txtGPA.setText("");
txtCampus.setText("");
txtAddress.setText("");
txtPhone.setText("");
txtEmail.setText("");
txtCurrent.setText("");
txtPast.setText("");
txtFuture.setText("");
txtNotes.setText("");
frame1.setTitle("Add Student data"); // title bar name for add
frame1.setVisible(true);
Student student = new Student(txtID.getText(), txtName.getName(), txtMajor.getText(), txtGPA.getText(), txtCampus.getText(), txtAddress.getText(), txtPhone.getText(),txtEmail.getText(), txtCurrent.getText(), txtPast.getText(), txtFuture.getText(), txtNotes.getText());
al.add(student);
try {
Student.saveSerialized(student, txtID.getText());
} catch (IOException ex) {
Logger.getLogger(IAdvise.class.getName()).log(Level.SEVERE, null, ex);
}
} else if (e.getActionCommand().equals("EDIT")) {
frame1.setVisible(true);
txtID.setText(data[rowIndex][0] + "");
txtName.setText(data[rowIndex][1] + "");
txtMajor.setText(data[rowIndex][2] + "");
txtGPA.setText(data[rowIndex][3] + "");
txtCampus.setText(data[rowIndex][4] + "");
txtAddress.setText(data[rowIndex][5] + "");
txtPhone.setText(data[rowIndex][6] + "");
txtEmail.setText(data[rowIndex][7] + "");
txtCurrent.setText(data[rowIndex][8] + "");
txtPast.setText(data[rowIndex][9] + "");
txtFuture.setText(data[rowIndex][10] + "");
txtNotes.setText(data[rowIndex][11] + "");
txtID.setEditable(false);
frame1.setTitle("Enter Student data");
btnAddInput.setActionCommand("Edit2");
btnAddInput.setText("ACCEPT");
} else if (e.getActionCommand().equals("DELETE")) {
int confirm = JOptionPane.showConfirmDialog(frame, "ARE YOU SURE?", "CONFIRM",
JOptionPane.YES_NO_OPTION);
if (confirm == 0) {
rowIndex = table.getSelectedRow();
rowNumber = 0;
noOfStudents--;
for (int i = 0; i <= 10; i++) {
if (rowIndex != i && i <= noOfStudents) {
data[rowNumber][0] = data[i][0];
data[rowNumber][1] = data[i][1];
data[rowNumber][2] = data[i][2];
data[rowNumber][3] = data[i][3];
data[rowNumber][4] = data[i][4];
data[rowNumber][5] = data[i][5];
data[rowNumber][6] = data[i][6];
data[rowNumber][7] = data[i][7];
data[rowNumber][8] = data[i][8];
data[rowNumber][9] = data[i][9];
data[rowNumber][10] = data[i][10];
data[rowNumber][11] = data[i][11];
rowNumber++;
} else if (rowIndex != i && i > noOfStudents) {
data[rowNumber][0] = "";
data[rowNumber][1] = "";
data[rowNumber][2] = "";
data[rowNumber][3] = "";
data[rowNumber][4] = "";
data[rowNumber][5] = "";
data[rowNumber][6] = "";
data[rowNumber][7] = "";
data[rowNumber][8] = "";
data[rowNumber][9] = "";
data[rowNumber][10] = "";
data[rowNumber][11] = "";
rowNumber++;
}
}
if (noOfStudents == 1000) {
btnAdd.setEnabled(false);
}
else {
btnAdd.setEnabled(true);
}
if (noOfStudents == 0) {
btnDelete.setEnabled(false);
btnEdit.setEnabled(false);
} else {
btnDelete.setEnabled(true);
btnEdit.setEnabled(true);
}
rowIndex = table.getSelectedRow();
if (data[rowIndex][0] == null || data[rowIndex][0] == "") {
btnEdit.setEnabled(false);
btnDelete.setEnabled(false);
} else {
btnEdit.setEnabled(true);
btnDelete.setEnabled(true);
}
table.updateUI();
}
答案 0 :(得分:3)
基本上,当你在一个帧上调用setVisible
时,代码将继续运行而不会停止。
这导致的是......
frame1.setVisible(true);
.
.
.
frame1.dispose();
基本上,您可以使框架可见,但稍后在代码中,您可以将其丢弃。
你真正想要的是一个模态对话框,当它被显示时,会阻止代码执行直到它被关闭。
请查看How to make dialogs了解详情
查看... 强>
不要扩展PlainDocument
来执行字段过滤,而是使用DocumentFilter
。请查看Text Component Features和MDP's Weblog
请勿在文字字段上使用KeyListener
来执行过滤,而是使用DocumentFilter
请勿致电JTable.updateUI
。这与在内容更改时更新UI无关,并且用于在更改时更新外观。相反,依靠TableModel
并引发适当的事件来告诉表自己更新
降低actionPerformed
方法的复杂性。尝试将逻辑分解为单独的方法,甚至可以单独ActionListener
,或者如果您真的想尝试模块化和高级的方法,请查看How to use Actions
答案 1 :(得分:0)
我做了类似你的事情,结果和你一样,所以我可以给你一个方法来接受它, 你可以得到一个打印外观的方法,而frame.setVible(true)可以被一个方法调用, 创建更多框架,当您想要更新或重新绘制它时,您可以调用方法。 我希望我所说的可以为你提供帮助。