2012-04-23 12 views
0

テキストフィールドに入力された文字列を取り出して配列の新しい要素に変換したいのですが、それらを出力しようとするたびに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; 
} 
} 

ここで、配列の要素を追加しようとしています。具体的には、第2、第5、第6、第11。

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

+3

なぜelse ifループで新しいオブジェクトを作成しますか? ?新しいオブジェクトを作成しても、単一のコピーで作業しているわけではありません。つまり、複数のコピーを作成しているということです。 –

+0

新しいキーワードは新しいオブジェクトを作成します。あなたは同じオブジェクトを使用したい場合は、オブジェクトを一度作成して使用してシングルトンを使用する必要があります。 –

答えて

0

私は、あなたのコードから判断すると、Javaとプログラミングにとってはかなり新しいです。

Java Tutorials - Arraysを見て、配列の仕組みを見てください。

Dheeraj氏によると、コードを入力すると、ボタンをクリックしてSeatStart()に電話するたびに新しいseatオブジェクトが作成されます。つまり、アレイに対して行ったすべての変更は無駄になります。 GUIでは、配列の値をチェックしていないため、座席を表示しているものがあればそれを埋め込むため、おそらくそれを見ることはできません。あなたはあなたが最後に行った変更だけを保持します。

印刷コードをprintArray()のような新しいプライベートメソッドに移動して、SeatStart()で呼び出すことができます。変更を加えたときに、同じコードを別の場所にもう一度書き込む必要はありません。

まったく同じことを繰り返すコードがあります。それを同じ場所に置き、1つの変数を変更することで、同じ効果を得ることができます。これにより、コードをより明瞭に保ちやすくなります。あなたは何かをもっと柔軟にしたい場合は、ifまたはwhileのどちらかで行うことができます。

私はあなたに概要を説明しようとします。まず、アクションリスナで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.を助けた...あなたのアイデアを得る別の方法などにそれらを移動することができます。 EnterのKeyListenerで何を達成しようとしていますか?必要なコンポーネントを作成していて、別のactionListenerの中にではなく、KeyListenerを追加する方がよいでしょう。それはデバッグが非常に悪いことです。

関連する問題