0

コードのスニペットはここにあります:

        int area;
        int[] xcoords = new int[3];
        xcoords[0] = coordsAX;
        xcoords[1] = coordsBX;
        xcoords[2] = coordsCX;
        sortArray(xcoords);
        int[] ycoords = new int[3];
        ycoords[0] = coordsAY;
        ycoords[1] = coordsBY;
        ycoords[2] = coordsCY;
        sortArray(ycoords);
        //Remember, array[0] is the biggest and array[2] is the smallest!
        int rectWidth = xcoords[0] - xcoords[2];
        int rectHeight = ycoords[0] - ycoords[2];

        area = (rectWidth * rectHeight);
        System.out.println(area);
        lblArea.setText("Area: " + area);

コード全体が私のアプレットのpaint(g)メソッド内にあります。ユーザーがJLabelを見ることができるようにすることを目指しています。計算は完全にうまくいきます。しかし、実行すると、アプレットは次のようになります。

ここに画像の説明を入力してください

setText行はpaint(g)にすべきではないことを収集しましたが、その場合、新しい三角形が生成されるまでJLabelが同じままになるように、どこに配置すればよいですか([クリックしてください]をクリックします)。ボタン)?

私は自分でJavaを教えている高校生であり、その結果、言語に関する私の知識はスイスチーズの塊のように見えることに注意してください。基本的なアプレット作成のレベルをはるかに超えるトピックをあまり説明しない説明をいただければ幸いです。:)

助けに感謝します!ありがとう!

4

1 に答える 1

2

おそらく、「クリックしてください」ボタンにアクションリスナーがアタッチされていると思います。

アクションが発生したら、その時点でラベルと UI を更新します。

アクション リスナーの作成方法」を参照してください。

(Swing の代わりに AWT を使用しているように見えることも心配ですが、間違っている可能性があります ;))

更新された例

ここに画像の説明を入力

public class TestArea {

    public static void main(String[] args) {
        new TestArea();
    }

    public TestArea() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new AreaPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class AreaPane extends JPanel {

        private JLabel areaLabel;

        public AreaPane() {
            areaLabel = new JLabel("Area: ...");
            JButton clickMe = new JButton("Click Me");
            clickMe.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    areaLabel.setText("Area: " + NumberFormat.getNumberInstance().format(Math.random() * 1000));
                    // update UI as required
                }

            });

            add(areaLabel);
            add(clickMe);
        }
    }
}
于 2012-11-15T03:11:03.380 に答える