用户界面-我如何在中创建一个数组列表,并添加和查看按钮



我正在尝试制作一个GUI程序,该程序可以从数组列表中输入和删除汽车,并使用JButtons显示汽车。我无法通过单击其中一个按钮来打印数组列表。我也不确定我的数组列表是否正确。如有任何帮助,我们将不胜感激。

import java.util.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class Window extends JFrame {
    public Window() {
    super ("Rent-a-Car");
    setSize(400, 100);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setVisible(true);
    JPanel p = new JPanel();
    JButton b1 = new JButton("Add Car");
    JButton b2 = new JButton("Rent Car");
    JButton b3 = new JButton("Library");
    p.add(b1);
    p.add(b2);
    p.add(b3);
    add(p);
    final ArrayList<String> cars = new ArrayList<String>();
    cars.add("Audi");
    cars.add("VolksWagon");
    cars.add("Mercedes");
    cars.add("BMW");
    cars.add("Ford");
    cars.add("Subaru");
    cars.add("Lexus");
    cars.add("Acura");
    cars.add("Nissan");
    b1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            Scanner sc = new Scanner(System.in);
            JOptionPane.showInputDialog("Enter car model");
            String model = sc.next();
            JOptionPane.showMessageDialog(null, "Car added");
            cars.add(model);
        }
    });

    /*b3.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            for(int i=0 < cars.size(); i++) {
                System.out.println();
            }
        }
    });*/

    }
}

ActionListener for b1中,您试图从错误的位置扫描它。如果您运行此程序,您可能已经注意到,当您使用添加按钮提交汽车时,JOptionPane不会执行任何操作。但是,如果您在终端中输入字符串,则会弹出一个对话框,显示"已添加汽车"。这是因为扫描仪sc正在扫描System.in!这不适用于GUI。

幸运的是,从JOptionPane获取输入非常简单。

EDIT:在JScrollPane中添加了一些东西,比如易于附加的JTextArea,并将其更改为简单的GridLayout。

我还将ActionListeners移到了一个内部类中,这样您就不会在代码中到处都是匿名函数。使用(e.getSource())条件语句添加内容也比较容易。

将模型设置为等于showInputDialog的结果,如下所示:

import java.util.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.GridLayout;
import javax.swing.*;
public class Window extends JFrame {
    private JPanel p;
    private JButton b1, b2, b3;
    private JTextArea textArea;
    private JScrollPane scrollPane;
    private ArrayList<String> cars;
    public Window() {
        super ("Rent-a-Car");
        setLayout(new GridLayout(2, 1));
        setSize(400, 100);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
        p = new JPanel();
        b1 = new JButton("Add Car");
        b2 = new JButton("Rent Car");
        b3 = new JButton("Library");
        b1.addActionListener(new ButtonListener());
        b2.addActionListener(new ButtonListener());
        b3.addActionListener(new ButtonListener());
        textArea = new JTextArea("");
        textArea.setEditable(false);
        scrollPane = new JScrollPane(textArea);
        p.add(b1);
        p.add(b2);
        p.add(b3);
        add(p);
        //add(textArea);
        add(scrollPane);
        cars = new ArrayList<String>();
        cars.add("Audi");
        cars.add("VolksWagon");
        cars.add("Mercedes");
        cars.add("BMW");
        cars.add("Ford");
        cars.add("Subaru");
        cars.add("Lexus");
        cars.add("Acura");
        cars.add("Nissan");
    }
    public void displayText(String s) {
        textArea.append(s + "n");
        textArea.setCaretPosition(textArea.getDocument().getLength());
    }
    private class ButtonListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            if (e.getSource() == b1) {
                String model = JOptionPane.showInputDialog("Enter car model");
                cars.add(model);
                displayText("Added car: " + model);
            }
            else if (e.getSource() == b2) {
                //add something later
            }
            else if (e.getSource() == b3) {
                for (String car : cars) {
                    displayText(car);
                }
            }
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新