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 );
                     }
                 }
             }
        });
        }
    }

}

}
4

1 に答える 1

0

あなたのコードから判断すると、あなたは Java とプログラミング全般にかなり慣れていないと思います。

Java チュートリアル - 配列を見て、配列がどのように機能するかを確認してください。

コードについては、Dheeraj が言ったようにseat、ボタンをクリックして を呼び出すたびに新しいオブジェクトを作成していますSeatStart()。これは、配列に対して行ったすべての変更が無駄になることを意味します。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を追加することをお勧めします。それはデバッグするのが非常に悪いでしょう。

于 2012-04-23T06:44:45.687 に答える