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

第二类是第一类使用的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

您不想调用方法“添加”。每个 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 回答