0

テキストフィールドに配列jの値を表示するのに問題があります。実行すると1つの要素しか表示されません。

import java.util.Collections;
import java.util.ArrayList;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class SwingCounter extends JFrame implements ActionListener {

    // use Swing's JTextField instead of AWT's TextField
    private JTextField tfCount;
    private int counterValue = 0, numbers=0, j=0;

    public SwingCounter () {

        // retrieve the content pane of the top-level container JFrame
        Container cp = getContentPane();
        // all operations done on the content pane
        cp.setLayout(new FlowLayout());

        cp.add(new JLabel("Counter"));
        tfCount = new JTextField(10);
        tfCount.setEditable(true);
        tfCount.setText(numbers + "");
        cp.add(tfCount);

        JButton btnCount = new JButton("Count");
        cp.add(btnCount);
        btnCount.addActionListener(this);

        // exit program if close-window button clicks
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // set initial window size
        setSize(280,80);
        // location in screen
        setLocation(400,200);
        // set this JFrame's title
        setTitle("Swing Counter");
        setVisible(true);     // Show it
    }

    public void actionPerformed(ActionEvent evt) {
        counterValue++;

        //define ArrayList to hold Integer objects
        ArrayList<Integer> numbers = new ArrayList<Integer>();
        for(int i = 0; i < 45; i++)
        {
            numbers.add(i+1);
        }

        Collections.shuffle(numbers);

        System.out.print("This week's lottery numbers are: ");
        for(int j =0; j < 6; j++)
        {
            System.out.print(numbers.get(j) + " ");
            tfCount.setText(numbers.get(j) + " ");
        }
    }
}
4

4 に答える 4

1

これを行う必要があります:

String text=""
for(int j =0; j < 6; j++)
{
text+=numbers.get(j) 
}
tfCount.setText(text); 
于 2013-02-24T10:08:20.460 に答える
1

forループでこれを呼び出しています:

tfCount.setText(numbers.get(j) + " "); 

そうすれば、常に最後の数字が TextField に表示されます。ループ内の番号を連結し、tfCount.setText()後で呼び出す必要があります。

このような:

String concatenatedNumbers = "";
for(int j =0; j < 6; j++) {
   concatenatedNumbers = concatenatedNumbers + ", " + numbers.get(j);
 }
 tfCount.setText(concatenatedNumbers); 
于 2013-02-24T10:09:16.353 に答える
1

6 回のテキストをオーバーライドしているJTextFieldため、最後のテキストのみが表示されます。

最初にStringすべての数値を含む を作成し、その値を使用してテキストを設定します。

// String to hold the lottery numbers
String numbersString = "";
for(int j =0; j < 6; j++)
{
  // Print number to log/terminal
  System.out.print(numbers.get(j));
  // Append the string with the current number
  numbersString += numbers.get(j) + " ";
}
// Update the value of the JTextField with all the numbers at once
tfCount.setText(numbersString); 
于 2013-02-24T10:09:53.840 に答える
1

テキスト フィールドを呼び出すたびsetText()に、表示されるテキストを別のテキストに置き換えます。したがって、最初の 6 つの数字を保持する文字列を作成し、結果をテキスト フィールドのテキストに設定します。

StringBuilder sb = new StringBuilder();
for (int i = 0; i < 6; i++) {
    sb.append(numbers.get(i));
    sb.append(' ');
}
tfCount.setText(sb.toString());
于 2013-02-24T10:10:20.207 に答える