3

ランダムな三角形を描くプログラムがあります。クリックすると、別のランダムな三角形を消去して再生成するボタンを追加したかったのです。私は別のプログラムでボタンを表示できるかどうかをテストしましたSwingButtonTest.java(これが私が転がる方法です、私は学んでいます)、そしてそれは成功しました。

次に、基本的に、ボタンを表示するために必要と思われるすべてのコードをそのプログラムから三角形のプログラムにコピーしました。残念ながら、プログラムはボタンを表示しません...

繰り返しになりますが、助けていただければ幸いです。

import javax.swing.*;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


@SuppressWarnings({ "serial" })
public class TriangleApplet extends JApplet implements ActionListener {

   int width, height;
   int[] coords = new int[6];
   JButton refresh;

   public void init() {
      //This stuff was added from SwingButtonTest.java
      Container container = getContentPane();
      container.setLayout(null);

        container.setLayout(null);

        refresh= new JButton("I like trains");
        refresh.setBackground(Color.yellow);
        refresh.setSize(140, 20);
        refresh.addActionListener(this);

        container.add(refresh);
      //End of SwingButtonTest.java stuff

      coords = randomTri();
   }


    public static int[] randomTri() {
        int[] pointArray = new int[6];
        int x;
        for (int i = 0; i < 6; i++) {
            x = ((int)(Math.random()*40)*10);
            pointArray[i] = x;
        }
        return pointArray;
    }


   public void paint( Graphics g ) {
        g.setColor(Color.BLUE);

        g.drawLine(coords[0], coords[1], coords[2], coords[3]);
        g.drawString("A: " + coords[0]/10 + ", " + coords[1]/10, coords[0], coords[1]);
        g.drawLine(coords[2], coords[3], coords[4], coords[5]);
        g.drawString("B: " + coords[2]/10 + ", " + coords[3]/10, coords[2], coords[3]);
        g.drawLine(coords[4], coords[5], coords[0], coords[1]);
        g.drawString("C: " + coords[4]/10 + ", " + coords[5]/10, coords[4], coords[5]);
        //Math for AB
        int abXDif = Math.abs(coords[0]/10 - coords[2]/10);
        int abYDif = Math.abs(coords[1]/10 - coords[3]/10);
        int abLength = (abXDif*abXDif) + (abYDif*abYDif);
        g.drawString("AB: Sqrt of "+ abLength, 0, 10);
        //Math for BC
        int bcXDif = Math.abs(coords[2]/10 - coords[4]/10);
        int bcYDif = Math.abs(coords[3]/10 - coords[5]/10);
        int bcLength = (bcXDif*bcXDif) + (bcYDif*bcYDif);
        g.drawString("BC: Sqrt of "+ bcLength, 0, 20);
        //Math for AC
        int acXDif = Math.abs(coords[4]/10 - coords[0]/10);
        int acYDif = Math.abs(coords[5]/10 - coords[1]/10);
        int acLength = (acXDif*acXDif) + (acYDif*acYDif);
        g.drawString("AC: Sqrt of "+ acLength, 0, 30);


   }

@Override
public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub

}
}
4

1 に答える 1

6

ボタンが表示されない理由は、電話をかけないためです。

super.paint(g);

paint()メソッドで。この呼び出しにより、ボタンとその他の追加されたコンポーネントがペイントされます。

Swingでのカスタムペイントへのより良いアプローチは、Swingの最適化されたペイントモデルを利用するために拡張JComponentおよびオーバーライドするコンポーネントにカスタムペイントを配置することです。paintComponent

コンポーネントのサイズと配置にレイアウトマネージャーを使用することも検討してください。絶対測位(nullレイアウト)の使用は避けてください。レイアウトマネージャーなしで行うことから:

レイアウトマネージャーなしで実行することは可能ですが、可能であればレイアウトマネージャーを使用する必要があります。レイアウトマネージャーを使用すると、ルックアンドフィールに依存するコンポーネントの外観、さまざまなフォントサイズ、コンテナーのサイズの変更、およびさまざまなロケールへの調整が容易になります。

于 2012-11-03T21:26:00.107 に答える