我想将输入到文本字段中的字符串转换为数组的新元素,但每当我尝试将它们打印出来时,它们仍会注册为null。如果您可以尝试忽略与问题无关的内容,因为我正在尝试使用它们,但我无法向数组中添加新元素。
这是创建和初始化数组的地方。
public class AssignSeat {
String[] arrangement = new String[12];
public String[] SeatStart() {
arrangement[0] = "Collins";
arrangement[2] = "Faivre";
arrangement[3] = "Kinnard";
arrangement[6] = "Morgans";
arrangement[7] = "Rohan";
arrangement[8] = "Shatrov";
arrangement[9] = "Sword";
arrangement[11] = "Tuckness";
System.out.format("%-15s%-15s%n", "seat", "passenger");
for (int i=0; i<arrangement.length; i++) {
System.out.format("%-15s%-15s%n", i+1, arrangement[i]);
}
System.out.println();
return arrangement;
}
public String[] getArrangement() {
return arrangement;
}
public void setArrangement(String[] arrangement) {
this.arrangement = arrangement;
}
}
这是我尝试添加数组元素的地方。特别是第二,第五,第六和第十一。
public void actionPerformed(ActionEvent event) {
//String name = null;
AssignSeat seat = new AssignSeat();
seat.SeatStart();
if(event.getSource() instanceof JButton){
JButton clickedButton = (JButton) event.getSource();
String buttonText = clickedButton.getText();
if (buttonText.equals("2")) {
entername.setVisible(true);
seatnum.setVisible(true);
confirmed.setVisible(true);
inputline.setVisible(true);
outputline.setVisible(true);
inputline.setEditable(true);
inputline.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
String name = null;
AssignSeat seat = new AssignSeat();
seat.SeatStart();
if (key == KeyEvent.VK_ENTER) {
Toolkit.getDefaultToolkit().beep();
name = inputline.getText();
seat.arrangement[1] = name;
System.out.println(seat.arrangement[1]);
inputline.setEditable(false);
outputline.setText("2");
two.setForeground(Color.black);
for( ActionListener al : two.getActionListeners() ) {
two.removeActionListener( al );
}
}
}
});
} else if(buttonText.equals("5")) {
entername.setVisible(true);
seatnum.setVisible(true);
confirmed.setVisible(true);
inputline.setVisible(true);
outputline.setVisible(true);
inputline.setEditable(true);
inputline.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
String name = null;
AssignSeat seat = new AssignSeat();
seat.SeatStart();
if (key == KeyEvent.VK_ENTER) {
Toolkit.getDefaultToolkit().beep();
name = inputline.getText();
seat.arrangement[4] = name;
System.out.println(seat.arrangement[4]);
inputline.setEditable(false);
outputline.setText("5");
five.setForeground(Color.black);
for( ActionListener al : five.getActionListeners() ) {
five.removeActionListener( al );
}
}
}
});
} else if (buttonText.equals("6")) {
entername.setVisible(true);
seatnum.setVisible(true);
confirmed.setVisible(true);
inputline.setVisible(true);
outputline.setVisible(true);
inputline.setEditable(true);
inputline.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
String name = null;
AssignSeat seat = new AssignSeat();
seat.SeatStart();
if (key == KeyEvent.VK_ENTER) {
Toolkit.getDefaultToolkit().beep();
name = inputline.getText();
seat.arrangement[5] = name;
System.out.println(seat.arrangement[5]);
inputline.setEditable(false);
outputline.setText("6");
six.setForeground(Color.black);
for( ActionListener al : six.getActionListeners() ) {
six.removeActionListener( al );
}
}
}
});
} else if (buttonText.equals("11")) {
entername.setVisible(true);
seatnum.setVisible(true);
confirmed.setVisible(true);
inputline.setVisible(true);
outputline.setVisible(true);
inputline.setEditable(true);
inputline.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
String name = null;
AssignSeat seat = new AssignSeat();
seat.SeatStart();
if (key == KeyEvent.VK_ENTER) {
Toolkit.getDefaultToolkit().beep();
name = inputline.getText();
seat.arrangement[10] = name;
System.out.println(seat.arrangement[10]);
inputline.setEditable(false);
outputline.setText("11");
eleven.setForeground(Color.black);
for( ActionListener al : eleven.getActionListeners() ) {
eleven.removeActionListener( al );
}
}
}
});
}
}
}
}
答案 0 :(得分:0)
我会认为你对Java和编程很新,从你的代码来看。
查看Java Tutorials - Arrays以了解数组的工作原理。
现在,对于您的代码,正如Dheeraj所说,每次单击按钮然后调用seat
时,您都会创建一个新的SeatStart()
对象。这意味着您对阵列所做的每一项更改都会浪费掉。您可能无法看到,因为在您的GUI中,您没有检查数组的值以填充显示您座位的任何内容。所以你只保留你最后的改变。
使用printArray()
这样的新私有方法移动打印代码,以便您可以在SeatStart()
上调用它,并在进行更改时不必在其他地方再次编写相同的代码。
你有重复的代码执行完全相同的事情。想想把它放在同一个地方并通过改变一个变量,你可以产生同样的效果。这使您的代码更清晰,更易于维护。如果你想要更灵活的东西,你可以用if或者一段时间来做。
我会尽力给你一个概述。首先,您不会在动作侦听器中实例化seat
但是在帧加载时。动作监听器与您单击的按钮有关,因此没有任何意义。
public void actionPerformed(ActionEvent event) {
if(event.getSource() instanceof JButton){
JButton clickedButton = (JButton) event.getSource();
String buttonText = clickedButton.getText();
if (buttonText.equals("2") || buttonText.equals("5") || buttonText.equals("6") || buttonText.equals("11")){
int seatNum = Integer.parseInt(buttonText); // you get the seat number into an integer.
//this only works if the text is actually representing a number
entername.setVisible(true);
seatnum.setVisible(true);
confirmed.setVisible(true);
inputline.setVisible(true);
outputline.setVisible(true);
inputline.setEditable(true);
inputline.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode(); // don't put code between this and if.
//No point doing something if the key is not enter
if (key == KeyEvent.VK_ENTER) {
Toolkit.getDefaultToolkit().beep();
String name = inputline.getText();
seat.arrangement[seatNum - 1] = name;
System.out.println(seat.arrangement[seatNum - 1]);
inputline.setEditable(false);
outputline.setText(buttonText);
clickedButton.setForeground(Color.black); // I'm guessing this is the button that got clicked?
for( ActionListener al : clickedButton.getActionListeners() ) {
clickedButton.removeActionListener( al );
}
}
}
});
}
}
}
当然这只是一种方法,有很多方法可以做到。尽量让员工留在他们所属的地方。例如,那些setVisible实际上并不属于按钮的动作侦听器。你可以将它们移动到另一种方法等。你明白了......
希望我有所帮助:)
编辑1.我刚刚审核了您的代码。你想用KeyListener来实现什么?最好在创建所需组件的位置添加KeyListener,而不是在另一个actionListener中。那将是非常糟糕的调试。