java jframe中的button不能自动显示出来_关于Java:单击按钮时,我的Jframe不会保持打开状态...

我有并编辑按钮,它应该打开一个不同的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)可以被一个方法调用,

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值