2012-04-23 79 views
0

我想将输入到文本字段中的字符串转换为数组的新元素,但每当我尝试将它们打印出来时,它们仍会注册为空。如果您可以尝试忽略与问题无关的内容,因为我正在尝试使用这些内容,但无法将新元素添加到数组中。我在向数组中添加新元素时遇到问题

这是数组被创建和初始化的地方。

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

在排序,你想要什么... 你想更新你的字符串数组已经有一些数据..并想让其他人可见... – abhi 2012-04-23 05:52:31

+3

为什么你在每个if else循环中创建新的对象?创建新的对象并不意味着你正在处理单个副本。这意味着您正在处理多个副本。 – 2012-04-23 05:52:48

+0

新的关键字创建一个新的对象。如果你想使用同一个对象,那么你需要创建一个对象并使用它并使用单例。 – 2012-04-23 05:54:25

回答

0

我会认为你对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中。这将非常糟糕的调试。

相关问题