2015-07-22 85 views
1

我正在開發我的第一個GUI應用程序。如何將JTextField和JCheckBox添加到ArrayList對象

我有一個ArrayList的父類Plant其中我有四個子類。

我有一些JTextField s的一些信息和一些JCheckBox s的其他信息......

JTextField S的關係轉化爲String S和JCheckBox s轉換boolean

我需要將所有這些組件添加到ArrayList,然後顯示Plant的列表。

我該怎麼做?

例子:

public class Flower extends Plant{ 

    private boolean thorns; 
    private boolean smell; 

    public Flower(String name, String id, String color, boolean blnThorns, boolean blnSmell){ 
     super(name, id, color); 
     thorns = blnThorns; 
     smell = blnSmell; 

    } 

    public boolean isThorns(){ 

     return thorns; 
    } 

    public void setThorns(boolean blnThorns){ 
     thorns = blnThorns; 
    } 

    public boolean isSmell(){ 

     return smell; 
    } 

    public void setSmell(boolean blnSmell){ 
     smell = blnSmell; 
    } 


} 

這是我的ArrayList

ArrayList<Plant> plantList = new ArrayList<Plant>(); 

在這裏,我嘗試添加的參數爲花:

private void addFlower(ArrayList<Plant> plantList){ 

    //Adding window 
    JFrame addingFrame = new JFrame(); 
    addingFrame.setTitle("Plant Database Interface"); 
    addingFrame.setSize(600, 200); 
    addingFrame.setLocationRelativeTo(null); 
    addingFrame.setVisible(true); 

    //ADDING FRAME LAYOUT 
    addingFrame.setLayout(new BorderLayout()); 

    //TRAITS 
    JPanel fields = new JPanel(); 
    addingFrame.add(fields, BorderLayout.NORTH); 

    JLabel nameLabel = new JLabel("Name:");  
    JTextField nameField = new JTextField(15); 
    String name = nameField.getText(); 


    JLabel idLabel = new JLabel("ID:");  
    JTextField idField = new JTextField(10); 
    String id = idField.getText(); 

    JLabel colorLabel = new JLabel("Color:");  
    JTextField colorField = new JTextField(10); 
    String color = colorField.getText(); 

    fields.add(nameLabel); 
    fields.add(nameField); 

    fields.add(idLabel); 
    fields.add(idField); 

    fields.add(colorLabel); 
    fields.add(colorField); 

    JPanel traits = new JPanel(); 
    addingFrame.add(traits , BorderLayout.CENTER); 

    JCheckBox thornsBox = new JCheckBox("Thorns Present"); 
    thornsBox.setSelected(false); 
    traits.add(thornsBox); 

    JCheckBox smellBox = new JCheckBox("Smell Present"); 
    smellBox.setSelected(false); 
    traits.add(smellBox); 

    JPanel southPanel = new JPanel(); 
    addingFrame.add(southPanel, BorderLayout.SOUTH); 

    JButton addPlantBtn = new JButton("Add Plant"); 
    southPanel.add(addPlantBtn, BorderLayout.EAST); 

    JButton cancelBtn = new JButton("Cancel"); 
    southPanel.add(cancelBtn, BorderLayout.WEST); 

    boolean blnThorns; 
    boolean blnSmell; 

    //I REALLY DON'T KNOW HOW TO DO THIS PART 
    thornsBox.addItemListener(new ItemListener(){ 
     public void itemStateChanged(ItemEvent e){ 
      if(e.getStateChange() == ItemEvent.SELECTED){ 
       blnThorns =true; 
      } 
      else{ 
       blnThorns = false; 
      } 
     } 
    }); 

    smellBox.addItemListener(new ItemListener(){ 
     public void itemStateChanged(ItemEvent e){ 
      if(e.getStateChange() == ItemEvent.SELECTED){ 
       blnSmell =true; 
      } 
      else{ 
       blnSmell = false; 
      } 
     } 
    });    

    addPlantBtn.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      //plantList.add(new Flower(name, id, color, blnThorns, blnSmell)); //HOW TO DO????................ 
     } 
    }); 


    cancelBtn.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      addingFrame.dispatchEvent(new WindowEvent(addingFrame, WindowEvent.WINDOW_CLOSING)); 
     } 
    }); 
} 
+0

只需嘗試'String jTextFieldValue = JTextField.getText();'然後添加'jTextFieldValue'到你的'ArrayList' – mustangDC

+0

Yo Downvoter ...這是一個體面的問題..請評論 –

回答

5

使用您addPlantBtnActionListener來收集信息你需要的時候叫做

addPlantBtn.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     Flower flower = new Flower(nameField.getText(), idField.getText(), colorField.getText(), thornsBox.isSelected(), smellBox.isSelected()); 
     plantList.add(flower); 

你可能會,也發現它更容易,如果你創建了一個專門的JPanel,旨在收集用戶的詳細信息,並生成一個Flower,當你要求它(從字段的值)。當您需要時,您可以在某種對話框上使用此面板。

看一看How to Make Dialogs更多細節

例如...

public class FlowerPane extends JPanel { 

    JTextField nameField = new JTextField(15); 
    JTextField idField = new JTextField(10); 
    JTextField colorField = new JTextField(10); 
    JCheckBox smellBox = new JCheckBox("Smell Present"); 
    JCheckBox thornsBox = new JCheckBox("Thorns Present"); 

    public FlowerPane() { 
     setLayout(new GridBagLayout()); 
     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.gridx = 0; 
     gbc.gridy = 0; 
     gbc.anchor = GridBagConstraints.WEST; 
     gbc.insets = new Insets(2, 2, 2, 2); 

     JLabel nameLabel = new JLabel("Name:"); 
     JLabel idLabel = new JLabel("ID:"); 
     JLabel colorLabel = new JLabel("Color:"); 

     add(nameLabel, gbc); 
     gbc.gridy++; 
     add(idLabel, gbc); 
     gbc.gridy++; 
     add(idLabel, gbc); 

     gbc.gridx++; 
     gbc.gridy = 0; 
     add(nameField, gbc); 
     gbc.gridy++; 
     add(idField, gbc); 
     gbc.gridy++; 
     add(colorField, gbc); 

     gbc.gridx = 0; 
     gbc.gridwidth = GridBagConstraints.REMAINDER; 

     add(thornsBox, gbc); 
     gbc.gridy++; 
     add(smellBox, gbc); 
    } 

    public Flower create() { 
     return new Flower(nameField.getText(), idField.getText(), colorField.getText(), thornsBox.isSelected(), smellBox.isSelected()); 
    } 

} 

然後你可以通過做一些像使用...

FlowerPane flowerPane = new FlowerPane(); 
switch (JOptionPane.showConfirmDialog(null, flowerPane, "Flower", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE)) { 
    case JOptionPane.OK_OPTION: 
     Flower flower = flowerPane.create(); 
     plantList.add(flower); 
     break; 
} 

或加入網站到其他容器

+0

謝謝!這很好! –

+0

@d_PI很高興它可以幫助 – MadProgrammer