我在向数组中添加新元素时遇到问题
我想将输入到文本字段中的字符串转换为数组的新元素,但每当我尝试将它们打印出来时,它们仍会注册为空。如果您可以尝试忽略与问题无关的内容,因为我正在尝试使用这些内容,但无法将新元素添加到数组中。我在向数组中添加新元素时遇到问题
这是数组被创建和初始化的地方。
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);
}
}
}
});
}
}
}
}
我会认为你对Java和通常的编程来说比较新,从你的代码来看。
看看Java Tutorials - Arrays看看数组是如何工作的。
现在为您的代码,正如Dheeraj所说,您每次单击按钮时创建一个新的seat
对象,然后您致电SeatStart()
。这意味着你对阵列所做的每一项改变都会浪费。您可能无法看到,因为在您的GUI中,您并未检查数组的值以填充您向您展示座位的任何内容。所以你只保留你所做的最后一项改变。
将打印的代码在一个新的私有方法,像这样printArray()
你可以在你SeatStart()
调用它,当你做出改变,这样你就不必再别的地方写相同的代码。
你有重复的代码,完全相同的事情。想想把它放在同一个地方,通过改变一个变量,你可以得到同样的效果。这使您的代码更清晰,更易于维护。如果你想要更灵活的东西,你可以在一段时间内做到这一点。
我会尽量给你一个概述。首先,您不会在动作侦听器中实例化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中。这将非常糟糕的调试。
在排序,你想要什么... 你想更新你的字符串数组已经有一些数据..并想让其他人可见... – abhi 2012-04-23 05:52:31
为什么你在每个if else循环中创建新的对象?创建新的对象并不意味着你正在处理单个副本。这意味着您正在处理多个副本。 – 2012-04-23 05:52:48
新的关键字创建一个新的对象。如果你想使用同一个对象,那么你需要创建一个对象并使用它并使用单例。 – 2012-04-23 05:54:25