首页 > 解决方案 > 如何在 JFrame 内的 JPanel 内绘制形状

问题描述

我在使用 Netbeans GUI 添加的 JPanel 内绘制形状时遇到问题。现在,我不知道在哪里添加用于在该 JPanel 内绘制一个圆圈的代码,以及如何在现在空置的 JPanel 中插入和调用它,等待绘制这个形状。我已经将目标 JPanel 设置为 Flow 布局。Netbeans Designer 创建了一个大类,其中我有这个 JPanel 的整个框架,我想将它保留在其中,因为我无法以其他任何方式添加它,因为 Designer 不允许我更改 main initComponents 方法,其中所有组件现在就坐。我一直在阅读教程和以前的帖子,但没有人真正使用 Netbeans Designer 遇到过这个问题。所以有人可以帮我在这个框架类中添加正确的方法,以及如何从我想要绘制的 JPanel 中调用它。

所以按照@Abra,我更改了一些代码:

所以我创建了一个新的 Circle 类,对其进行了一些调整,因为我不想创建一个新框架,而是将它放在 JPanel 中。

public class Circle extends JPanel {
Color color;
public void circle(Color color)    {
    this.color = color;
    setPreferredSize(new Dimension (30,30));
}
public void paintComponent(Graphics g)    {
    super.paintComponent(g);
    g.drawOval(0, 0, r, r);
    g.setColor(color);
}
private void showGUI() {
    JPanel panel = new JPanel();
    panel.add(this, FlowLayout.CENTER);
    panel.setVisible(true);
}       
}  
                                                                                                                        

然后我在 Designer 中打开了 JPanel,并在 initComponents 方法中添加了运行它的代码,如下所示:

circlePanel.setPreferredSize(new java.awt.Dimension(40, 40));
    new Circle().showGUI();
    PanelDS.add(circlePanel); 
                   

                                                      

circlePanel 是此绘图的目标,并且位于 PanelDS 本身内。它不能以这种方式工作,但 Netbeans 显示代码中没有错误。此外,我如何将颜色转发给圆形课程。

标签: javaswingnetbeansgraphicsjpanel

解决方案


为了在 a 上绘图,JPanel您需要覆盖 的paintComponent()方法JPanel。为了覆盖该方法,您需要创建一个扩展类JPanel。我认为不存在可以为您生成所需代码的 GUI 设计器。所以你必须编写扩展类的代码JPanel

这是一个最小的例子。它显示一个蓝色圆圈。

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;

public class Drawing2 extends JPanel {
    private JFrame  frame;

    public Drawing2() {
        setPreferredSize(new Dimension(100, 100));
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.BLUE);
        g.fillOval(25, 25, 50, 50);
    }

    private void showGui() {
        frame = new JFrame("Drawing");
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.add(this, BorderLayout.CENTER);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new Drawing2().showGui();
    }
}

这是您在运行上述代码时应该看到的内容。

蓝色圆圈


推荐阅读