2013-09-21 5 views
-1

새 레코드를 추가하기 위해 JDialog가있는 테이블이 있습니다. Button을 추가 할 때 클릭하고 새 레코드를 추가하고 JDialog를 열고 JDialog 창을 닫은 다음 모든 열을 null 반환합니다. 내 테이블 행의.null을 반환합니다. JDialog를 닫을 때

이 내 JDialog를 생성자입니다 :

public class AddBookDialog extends JDialog implements ActionListener { 

public AddBookDialog(JFrame owner) { 
    super(owner, "Add New Book", true); 
    initComponents(); 
    saveBtn.addActionListener(this); 
    setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); 
    setVisible(true); 
    } 

@Override 
public void actionPerformed(ActionEvent e) { 
    if (e.getSource() == cancelBtn) dispose(); 
    else if (e.getSource() == saveBtn) saveAction(); 
     } 
} 
    public void saveAction() { 
    if (nameTf.getText().trim().length() != 0) { 
     if (!haveDigit(nameTf.getText().trim())) setBookName(nameTf.getText().trim()); 
     else { 
      JOptionPane.showMessageDialog(null, "Book Name have digit"); 
      return; 
     } 
    } else { 
     JOptionPane.showMessageDialog(null, "Enter Book Name"); 
     return; 
    } 
    if (isbnTf.getText().trim().length() != 0) { 
     if (haveSpace(isbnTf.getText().trim()) || haveLetter(isbnTf.getText().trim())) { 
      JOptionPane.showMessageDialog(null, "Enter Correct ISBN"); 
      return; 
     } 
     setIsbn(isbnTf.getText().trim()); 
    } else { 
     JOptionPane.showMessageDialog(null, "Enter Book ISBN"); 
     return; 
    } 

    setBorrowStatus("No"); 
    setDate(dateGenerate()); 
    dispose(); 
} 

내 테이블 GUI 클래스에서이 문제를 제어하려고 :

public class BookPage_Admin extends JFrame implements ActionListener { 
... 

    public void addAction() { 
    AddBookDialog dialog = new AddBookDialog(this); 
    if (dialog.getBookName() != null && dialog.getIsbn() != null && dialog.getBorrowStatus() != null && 
      dialog.getDate() != null) { 
     Object[] added = new Object[]{dialog.getBookID(), dialog.getBookName(), dialog.getIsbn(), dialog.getBorrowStatus(), dialog.getDate()}; 
     model.addRow(added); 
    } 
    } 
} 

하지만 난 그것을 닫을 때 여전히 내 행 null가 반환합니다.

null 닫는 방법을 막는 방법?

+3

더 나은 도움을 더 빨리 [SSCCE] (http://sscce.org/), 짧고, 실행 가능한, 컴파일 가능한, 그냥 오전 문제에 대해 – mKorbel

+0

'model'이 테이블의 모델을 섀도우하게 만들지 않는지 확인하십시오. – trashgod

+0

@trashgod 더 설명해 주시겠습니까? – Sajad

답변

1

이런 경우에 아무도 당신에 응답하지 않을 경우 :

당신이 대화를 시작하면, 일명 AddBookDialog dialog = new AddBookDialog(this); 당신이 좋아하는 프레임 측에 ActionListener을 재정의 할 수

AddBookDialog dialog = new AddBookDialog(this); 
dialog.setModal(true); 

dialog.getSaveBtn().addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 

     Object[] added = new Object[]{dialog.getBookID(), dialog.getBookName(), dialog.getIsbn(), dialog.getBorrowStatus(), dialog.getDate()}; 
     model.addRow(added); 

      } 
     }); 

// importent set visible after ActionListener!! 
dialog.setVisible(true); 

그것이 도움이 될 것입니다 희망,

+0

음, 이제 'saveAction()'을 어디에 삽입해야합니까? – Sajad

+0

당신은'Save '버튼에 리스너를 추가하기 때문에'actionPerformed (ActionEvent e)'아래에서'dialog.saveAction()'처럼 호출하면됩니다. –

관련 문제