单击按钮时,我的Jframe不会保持打开状态

时间:2013-12-17 00:28:06

标签: java swing user-interface jframe jbutton

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

               }

2 个答案:

答案 0 :(得分:3)

基本上,当你在一个帧上调用setVisible时,代码将继续运行而不会停止。

这导致的是......

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

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

你真正想要的是一个模态对话框,当它被显示时,会阻止代码执行直到它被关闭。

请查看How to make dialogs了解详情

查看...

不要扩展PlainDocument来执行字段过滤,而是使用DocumentFilter。请查看Text Component FeaturesMDP's Weblog

请勿在文字字段上使用KeyListener来执行过滤,而是使用DocumentFilter

请勿致电JTable.updateUI。这与在内容更改时更新UI无关,并且用于在更改时更新外观。相反,依靠TableModel并引发适当的事件来告诉表自己更新

降低actionPerformed方法的复杂性。尝试将逻辑分解为单独的方法,甚至可以单独ActionListener,或者如果您真的想尝试模块化和高级的方法,请查看How to use Actions

答案 1 :(得分:0)

我做了类似你的事情,结果和你一样,所以我可以给你一个方法来接受它, 你可以得到一个打印外观的方法,而frame.setVible(true)可以被一个方法调用, 创建更多框架,当您想要更新或重新绘制它时,您可以调用方法。   我希望我所说的可以为你提供帮助。