我正在尝试制作一个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);
}
}
}
}
}