0

そのため、このコードでJLabelを機能させようとしています。ボタンとアクションリスナーは機能しますが、ラベルは機能しません。MyDiceは、パネルとボタンを作成する場所です。

public class MyDice
{
    public static void main(String[] args)
    {
        JFrame frame = new JFrame("MyDice v1.0");
        frame.setSize(800,600);
        frame.setLocation(560, 240);
        frame.setResizable(false);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel();
        panel.setBackground(new Color(200,200,200));
        panel.setSize(800,600);
        frame.add(panel);
        panel.setVisible(true);

        JButton button_d4    = new JButton("Roll d4");
        panel.add(button_d4);
        button_d4.addActionListener   (new MyRoll(4,panel));
    }
}

そして、MyRollは、ボタンをクリックしたときに何かを実行するアクションリスナーを取得した場所です。

public class MyRoll implements ActionListener
{
    int dice;
    JPanel panel;

    public MyRoll (int dice, JPanel panel)
    {
        this.dice = dice;
        this.panel = panel;
    }

    public void actionPerformed(ActionEvent e)
    {
        rollDice(dice,1);
    }

    public void rollDice (int dice, int times)
    {
        int r=0;
        for (int i=0; i<times;i++)
        {
            double rand = Math.random();
            rand = rand*dice + 1;
            r = (int) rand;
        }

            System.out.println("You rolled "+r+" out of "+dice);

        JLabel output = new JLabel();
        output.setText("You rolled "+r+" out of "+dice);
        panel.add(output);

    }
}

ただし、この最後の部分は機能しません。なぜ何かアイデアはありますか?

4

3 に答える 3

3

JLabelを使用して、ロジックにラベルメッセージを設定します

投稿された更新されたコードの改訂

ロジックの外部でラベルを設定し、最初の空の値でパネルに追加してから、ロジックでラベルの値を変更する必要があります

すなわち

//Setting up your GUI
JLabel label = new JLabel("");
panel.add(label);


//Within your Logic method
System.out.println("Printing info");
label.setLabel("Printing info");

そうすれば、パネルにJLabelを常に追加しているわけではありません。

于 2012-09-19T20:27:10.267 に答える
2

次のコードを見てください。

    JLabel output = new JLabel(); 
    output.setText("You rolled "+r+" out of "+dice); 
    panel.add(output);

JLabelここでは、ボタンをクリックするたびに、パネル(メインフレームにあります)に新しいものを追加しています。ただし、自分で塗り直すように指示することはできません。

これを修正するための私の提案は、を作成してinにJLabel追加し、JLabel参照をクラスに渡すことです。その後、いつでも電話をかけることができます。;への参照は本当に必要ありません。への参照が必要です。JPanelmain()MyRollsetText()JPanelMyRollJLabel

psあなたの方法についていくつかコメントしたいと思いますmain()。特に、コードを別の方法で編成すると、コードを少し単純化できます。通常、Swing GUIの作成は、次の手順に従います。

  1. を作成しますJFrame

  2. を作成しますJPanel

  3. コンポーネントをに追加しますJPanel

  4. にを追加JPanelJFrameます。

  5. 表示を設定しJFrameます。

最後に呼び出す場合は、setVisible()を呼び出すだけでよいことに注意してください。これにより、とそのすべてのサブコンポーネントJFrameが自動的に呼び出さsetVisible()れます。JPanel

于 2012-09-19T20:29:00.140 に答える
0

リフレッシュメソッドを探しているなら、私が知っているものはありません。代わりに、提供するロジックに応じて出力を更新するスレッドを設定できます。

于 2012-09-19T20:33:45.860 に答える