0

JFrame を作成し、その上に JPanel を追加し、JPanel 上に長方形を描画するクラス

class Frame {
JFrame frame;
myPanel panel;

void draw() {
    frame = new JFrame ("qwertz");
    frame.setVisible(true);
    frame.setLocationRelativeTo(null);
    frame.setSize(300,200);

    panel = new myPanel();
    panel.setLayout(null);
    frame.add(panel);

    myPanel.a = 50;
    myPanel.b = 30;
}
void add() {
    //
}}

2 番目のクラスは、最初のクラスが使用する JPanel です。

class myPanel extends JPanel {
static int a;
static int b;
public void paint(Graphics g) {
    g.drawRect(a,a,b,b);
}}

パネルに別の長方形を追加する最も簡単な方法は何ですか?
(可能であれば、それを追加するコードを最初のクラスの add() メソッドに入れたいと思います)

4

1 に答える 1

2

メソッド「add」を呼び出したくありません。すべての Swing コンポーネントには add メソッドがあります。

定義したい数の長方形を保持する GUI モデル クラスを作成します。

import java.awt.Graphics;
import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.List;

public class RectangleModel {

    private List<Rectangle> rectangles;

    public RectangleModel() {
        this.rectangles = new ArrayList<Rectangle>();
    }

    public void addRectangle(int x, int y, int width, int height) {
        this.rectangles.add(new Rectangle(x, y, width, height));
    }

    public void addRectangle(Rectangle rectangle) {
        this.rectangles.add(rectangle);
    }

    public void draw(Graphics g) {
        for (Rectangle rectangle : rectangles) {
            g.drawRect(rectangle.x, rectangle.y, rectangle.width,
                    rectangle.height);
        }
    }

}

JPanel を次のように変更します。

class MyPanel extends JPanel {
    private RectangleModel model;

    public MyPanel(RectangleModel model) {
        this.model = model;
        this.setPreferredSize(new Dimension(300, 200));
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        model.draw(g);
    }}
}

これで、メインクラスで行う必要があるのは次のとおりです。

  • 実行SwingUtilities.invokeLaterして、すべての GUI コンポーネントをイベント ディスパッチ スレッド (EDT) に配置します。

  • GUI モデルを作成します。

  • GUI フレーム クラスとパネル クラスを作成します。

  • GUI モデルに長方形を追加します。

  • JFrame をパックします。

于 2013-05-06T17:17:06.970 に答える