2013-07-18 37 views
0

我試圖讓面板與對方一起工作RECURSIVELY。ActionListener兩個之間的匿名類JPanel

當我在主界面我有一個按鈕第一JPanel中添加客戶端, 一旦點擊它帶給我的JPanel的一個表格,然後我養傷這些值, 和JTable中趕他們走在主GUI的第一個JPanel中。

當我然後嘗試插入第二條記錄。我得到一個空白的GUI。我不太確定我做錯了什麼。我如何實現多次同一動作重複?這是加載形式,輸入信息,推它在桌子上,並重復儘可能多的過程,因爲我需要它。

這是在主界面

Button btn_AddClient = new Button("Add Client"); 
     btn_AddClient.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 
       panel.setVisible(false); 
       contentPane.setVisible(false); 
       setContentPane(contentPaneClient); 
      } 
     }); 
     btn_AddClient.setBounds(259, 12, 70, 22); 
     contentPane.add(btn_AddClient); 

此添加客戶端按鈕聲明的格式的第二面板中的添加按鈕

JButton btnAdd = new JButton("Add"); 
     btnAdd.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent arg0) { 


       setContentPane(contentPaneClient); 
       panel.setVisible(true); 
       contentPane.setVisible(true); 
       contentPaneClient.setVisible(false); 
       LigneJTab l = new LigneJTab(textFieldPrenomClient.getText(),textFieldNomClient.getText(), textFieldAdresseClient.getText(), chckbxHomme.isSelected(), Sport.FOOTBALL); 
       myModel.addLine(l); 
       setContentPane(contentPane); 
      } 
     }); 
     btnAdd.setBounds(263, 40, 117, 29); 
     contentPaneClient.add(btnAdd); 
+5

1 - 我會非常小心混合AWT和Swing組件('Button'和'JButton'),2-避免使用'setBounds',使用合適的佈局管理器,3-看看['CardLayout'](http://docs.oracle.com/javase/tutorial/uiswing /layout/card.html),這將使不同視圖之間的交換變得相當簡單,4-嘗試提供[SSCCE](http://sscce.org/),因爲代碼片段沒有提供足夠的上下文 – MadProgrammer

+0

將研究SSCCE因爲這是其中之一我在Java中的第一篇文章。爲什麼混合AWT和Swing是一個壞主意? – hayonj

+0

代碼太長以至於無法提供SSCCE,並且它包含一些其他類。 – hayonj

回答

0
JButton btnAdd = new JButton("Add"); 
    btnAdd.addActionListener(new ActionListener() { 

     public void actionPerformed(ActionEvent arg0) { 

      //setContentPane(contentPaneClient); 
      //panel.setVisible(true); 
      //contentPane.setVisible(true); 
      //contentPaneClient.setVisible(false); 

      LigneJTab l = new LigneJTab(textFieldPrenomClient.getText(),textFieldNomClient.getText(), textFieldAdresseClient.getText(), chckbxHomme.isSelected(), Sport.FOOTBALL); 
      myModel.addLine(l); 

      panel.setVisible(true); 
      contentPane.setVisible(true); 
      setContentPane(contentPane); 

     } 
    }); 
    btnAdd.setBounds(263, 40, 117, 29); 
    contentPaneClient.add(btnAdd); 

評論上部和添加setContentPane(contentPane);和那工作!

謝謝!

0

另一個想法:你不需要換出內容窗格來索取數據。更優雅的方式是使用模態對話框。爲了使一個,首先創建一個對話框類:

public class MyDialog extends JDialog { 
    public MyDialog(Frame parent) { 
     super(parent); 
     setModalityType(Dialog.ModalityType.APPLICATION_MODAL); 
     // add components to getContentPane() 
     // to close dialog, use setVisible(false) in listeners 
    } 

    public OutputData getData() { 
     OutputData data = new OutputData(); 
     show(); 
     // show only returns after a setVisible(false) 
     data.field = textField.getText(); 
     // for example, repeat as many times as necessary 
     return data; 
    } 
} 

爲了從JFrame調用此對話框,使用下面的代碼:

MyDialog dialog = new MyDialog(this); 
OutputData data = dialog.getData() 
// now retrieve fields from data 
+0

哇,這看起來很有趣......它很難遵循一切工作來自JavaScript背景,一切都沒有輸入和所以程序.... java是完全面向對象的,它很難遵循所有這些類和多少事情......所有的適配器和像泛型類的術語......子類或類內部...我發現它很難跟隨像變量....上下文上下文.....父母...這個..界面和抽象類之間的差異....對於非常緩慢的初學者的良好網站的任何建議? – hayonj

+0

它不起作用,我到處都是紅色。我做的不對?http:// pastebin。com/LPYztq7Z – hayonj

+0

你沒有做錯任何事情。我不知道爲什麼這不起作用,但我可能會對此進行更新。 – tbodt