Java - Swing - 绘画(在JPanel上添加其他形状)

时间:2013-05-06 16:31:21

标签: java swing paint

制作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() {
    //
}}

第二个类是第一个类使用的JPanel

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

在面板上添加另一个矩形的最简单方法是什么? (我想将代码添加到第一个类的add()方法中,如果可能的话)

1 个答案:

答案 0 :(得分:2)

您不想调用方法“添加”。每个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组件放在Event Dispatch线程(EDT)上。

  • 创建GUI模型。

  • 创建GUI框架类和面板类。

  • 将“矩形”添加到GUI模型中。

  • 打包JFrame。