Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将JTextField和JCheckBox添加到ArrayList对象_Java_Swing_Arraylist_Jcheckbox - Fatal编程技术网

Java 如何将JTextField和JCheckBox添加到ArrayList对象

Java 如何将JTextField和JCheckBox添加到ArrayList对象,java,swing,arraylist,jcheckbox,Java,Swing,Arraylist,Jcheckbox,我正在开发我的第一个GUI应用程序 我有一个父类Plant的ArrayList,其中我有四个子类 我有一些JTextFields和一些信息,还有一些jcheckbox和其他信息 JTextFields应转换为字符串,JCheckBoxs应转换为布尔值 我需要将所有这些组件添加到ArrayList中,然后显示植物列表 我该怎么做 例如: public class Flower extends Plant{ private boolean thorns; private boolean

我正在开发我的第一个GUI应用程序

我有一个父类Plant的ArrayList,其中我有四个子类

我有一些JTextFields和一些信息,还有一些jcheckbox和其他信息

JTextFields应转换为字符串,JCheckBoxs应转换为布尔值

我需要将所有这些组件添加到ArrayList中,然后显示植物列表

我该怎么做

例如:

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<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));
        }
    });
}
调用addPlantBtn ActionListener时,使用它收集所需的信息

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,用于收集用户详细信息,并在您请求从字段值生成花时生成花,那么您也会发现它更容易。然后,您可以在需要时在某种对话框上使用此面板

请查看以了解更多详细信息

例如

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;
}
或者将其添加到其他容器中

调用时,使用addPlantBtn ActionListener收集所需的信息

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,用于收集用户详细信息,并在您请求从字段值生成花时生成花,那么您也会发现它更容易。然后,您可以在需要时在某种对话框上使用此面板

请查看以了解更多详细信息

例如

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;
}

或者将其添加到其他容器中

只需尝试字符串jTextFieldValue=JTextField.getText;然后将jTextFieldValue添加到ArrayListYo Downvoter。。。这是一个体面的问题。。请尝试字符串jTextFieldValue=JTextField.getText;然后将jTextFieldValue添加到ArrayListYo Downvoter。。。这是一个体面的问题。。请comment@d_PI很高兴它能help@d_PI很高兴能帮上忙