0

JTextFeld からユーザー入力を受け取り、それらを JTextArea に追加するプログラムを取得しました。アクションリスナークラスは次のとおりです。

/**
 * Action listener class for reading in data and processing it
 * when the Add reading button is clicked.
 */
class AddReadingListener implements ActionListener
{
    public void actionPerformed(ActionEvent event)
    {
        // Fetch the new reading details

            int newDay = Integer.parseInt(dayEntryField.getText());
            double newRain = Double.parseDouble(rainEntryField.getText());

            // Clear the input
            dayEntryField.setText("");
            rainEntryField.setText("");
            dataArea.append(newDay + ": " + newRain + " cm" + "\n");
        }
    }
}

ユーザー入力を格納する配列を作成しましたが、JLabel の値を配列に格納する方法がわかりません。ボタンが押されたときにアクションリスナークラスに実装する必要があると思いますか?

public void getRain()
{
    double[] rArray = new double[32];
    for(int c = 0;c<rArray.length;c++)
    {
        rArray[1] = Integer.parseInt(""+dayEntryField);
    }
}

配列が正しいとは思えませんが、助けていただければ幸いです!

4

3 に答える 3

1

2つの入力を何らかの方法でリンクしたい場合、あなたの質問には記載されていません。その場合は、1 つを使用する必要がありますHashMap(または、より簡単な場合は 2 つの ArrayList を使用できます)。

あなたが現在持っている方法は機能していません。以下で説明します。

public void getRain() //if you create a method that adds something, it should be named addRain() instead
{
    double[] rArray = new double[32]; //This creates a array with size 33
    for(int c = 0;c<rArray.length;c++) // here you create a loop that will run 33 times
    {
        rArray[1] = Integer.parseInt(""+dayEntryField); // This will input the value thats in the variable dayEntryField in index 1 of the array.
                                                        //This is not what you want since it will overwrite the current value thats in index 1 each time.
    }
} // End of method. Since you have added the value to an array that was created inside this method, the array will be removed by the garbage collector at this point. Hence your data will not be saved!

するべきこと:

//Create the list outside the method
private ArrayList<Double> arr = new ArrayList<Double>();

public void addRain() // You could also design the method to take an array as parameter, and add the data to that list (which is normally what you do(
{
   arr.add(dayEntryField); //altho, since adding element is a one-liner this could easily be done inside your listener. If you have your arraylist inside a class you will need a method tho.
}

これは、これ以上コードを表示せずに提供できるのとほぼ同じです。でも覚えておいて:

  1. ArrayList動的で操作が簡単なため、over arrayを使用します。
  2. 配列リストがメソッドの外で初期化されていることを確認してください (メソッドを使用して値を追加する場合)
  3. メソッドの名前が実行内容に対応していることを確認してください
于 2013-04-16T12:12:57.953 に答える
1

次のようなことを試すことができます:

   public class RainApplet extends JFrame {


   public RainApplet(){

   final JTextField rainEntryField = new JTextField("0", 10);

   final JTextField dayEntryField = new JTextField("0", 10);

   final JTextArea dataArea = new JTextArea("", 10, 10);

         rainEntryField.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e) {
                      // Fetch the new reading details

                    int newDay = Integer.parseInt(dayEntryField.getText());
                    double newRain = Double.parseDouble(rainEntryField.getText());

                    // Clear the input
                    dayEntryField.setText("");
                    rainEntryField.setText("");
                    dataArea.append(newDay + ": " + newRain + " cm" + "\n");

                    arr.add(newRain);
                                 }



    // end of ActionListener
        });

        // create new JPanel 'content' and add all components using BorderLayout
        JPanel content = new JPanel();
        content.setLayout(new BorderLayout(5, 5));

        // placing components around the JPanel
        content.add(rainEntryField , BorderLayout.NORTH);
        content.add(  dayEntryField, BorderLayout.EAST );
        content.add(  dataArea , BorderLayout.EAST );


        // set desirable properties for panel
        this.setContentPane(content);
        this.pack();
        this.setTitle("Rain Applet");
        this.setResizable(false);
        this.setLocationRelativeTo(null);
        this.setVisible(true);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);

           }

             private ArrayList<Double> arr = new ArrayList<Double>();

            public void addRain(Double d)  
            {
               arr.add(d); 
              }
               }

これはトリックを実行し、@John Snow によって説明された理由で上記の配列を使用する必要があります

于 2013-04-16T12:28:49.167 に答える