我有并编辑按钮,它应该打开一个不同的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();

按钮处理程序:

ButtonHandler类实现ActionListener {
公共无效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();
}

请精简您的代码示例。 您也指着女巫按钮。

"编辑"按钮,对不起,我是新来的

基本上,当您在框架上调用setVisible时,代码将继续运行而不会停止。

这导致的是...

frame1.setVisible(true);
.
.
.
frame1.dispose();

基本上,使框架可见,但是稍后在代码中,您将其丢弃。

您真正想要的是一个模式对话框,当该对话框可见时,它将阻止代码执行,直到将其关闭。

看看如何制作对话框了解更多详细信息

评论...

不要扩展PlainDocument以执行字段过滤,而是使用DocumentFilter。看一下文本组件功能和MDP的Weblog

不要在文本字段上使用KeyListener来执行过滤,而是使用DocumentFilter

不要呼叫JTable.updateUI。这与在内容更改时更新UI无关,并且用于在外观更改时更新外观。相反,请依赖TableModel并引发适当的事件以告知表进行自身更新

降低actionPerformed方法的复杂性。尝试将逻辑分解为单独的方法,甚至可能是单独的ActionListener,或者如果您真的想尝试模块化和高级的方法,请查看如何使用动作

+1,您输入的速度比我快得多。 我正忙着输入所有这些点。

@camickr自从我殴打你已经有一段时间了;)

我做了像你一样的事情,结果与你一样,所以我可以给你一个方法来做,

你可以得到一个打印外观的方法,然后frame.setVible(true)可以被一个方法调用,

创建更多的框架,当您要对其进行更新或重新粉刷时,可以调用一个方法。

希望我所说的可以对您有所帮助。