2012-04-23 99 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中。這將非常糟糕的調試。

相關問題