当前位置: 首页 > 知识库问答 >
问题:

如何在JFrame内部的JPel中绘制形状

李耀
2023-03-14

我在使用 Netbeans GUI 添加的 JPanel 中绘制形状时遇到问题。现在,我不知道在哪里添加代码以在该 JPanel 内部绘制圆,以及如何在现在空置的 JPanel 中插入和调用它,等待绘制此形状。我已经将目标 JPanel 设置为流布局。Netbeans 设计器创建了一个大类,其中我用这个 JPanel 拥有整个框架,我想把它保留在其中,因为我无法以任何其他方式添加它,因为设计器不允许我更改所有组件现在都位于其中的主 initComponents 方法。我一直在阅读教程和以前的文章,但没有人真正遇到过使用 Netbeans 设计器的问题。所以有人可以帮助我在这个框架类中添加正确的方法以及如何从我想绘制的 JPanel 调用它。JPanel 是 50x50 像素。

所以根据@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);
}       
}  
                                                                                                                        

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

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

                                                      

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

共有1个答案

亢建白
2023-03-14

为了在JPanel上绘制,需要重写JPanelpaintComponent()方法。为了覆盖该方法,需要创建一个扩展JPanel的类。我认为不存在可以为您生成所需代码的GUI设计器。因此,您必须编写扩展<code>JPanel</code>的类的代码。

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

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();
    }
}

以下是运行上述代码时应该看到的内容。

 类似资料:
  • 我觉得我经历了我需要做的一切: 创建一个名为paintComponent的图形类,并扩展JComponent 将图形g作为参数,然后执行Graphics2D g2d=(Graphics2D)g 将图形类添加到我的JFrame 我没发现有什么问题,所以我有点困惑 我的代码在这里: 和

  • 问题内容: 谁能解释我为什么不应该使用在窗口内直接绘制的方法,而应该在内部使用方法? 提前致谢。 问题答案: 三大原因… 顶层容器不是双缓冲的,在重新绘制框架时会导致闪烁,是的,您可以实现自己的双缓冲,但是… 在框架内绘画不会考虑框架边框,这意味着可以在框架边框下绘画。边框也取决于平台/外观,这意味着尺寸会发生变化 对于Swing窗口,窗口上已经存在一些组件,这意味着它们在大多数情况下都被覆盖(或

  • 问题内容: 我正在像这样扩展JFrame: 但是,屏幕上只画了一个正方形,有人知道为什么吗? 我的广场课也看起来像这样: 问题答案: JFrame的contentPane默认使用BorderLayout。当您向其添加一个Square时,默认情况下会添加BorderLayout.CENTER并覆盖以前添加的所有Square。您将需要阅读所有可用于Swing GUI的布局管理器。 例如,从这里开始:在

  • 问题内容: 我在本教程中使用了六边形代码,并创建了一个createHex类(我应该发布代码吗?)。链接的网页已使用以下代码通过createHex中的数学运算实际绘制六边形: 我遇到的问题是Android没有包含所有必需方法的Graphics类。我在android文档上做了大约一个半小时的钓鱼,而我发现最接近的东西是Path类,但是它没有我需要的方法。我想在顶部的链接文章中使用六边形代码,但找不到等

  • 我是java图形的新手,很难掌握从一个方法(绘制组件())绘制所有图形的整个概念。我只是很好奇,看看我们是否可以在绘制组件之外绘制图形。这可能吗?是否可以在main方法中写一行,如:fillRect(100,100, 500,400);并让它绘制一个矩形?如果可能,是否根据Java常规? 基本上,我想问的是,你是否可以在paintComponent类之外绘制图形,这是常规的吗。

  • 问题内容: 就像标题说的那样,我正在尝试在现有的QGraphicsView中绘制。我使用QT Designer生成的窗口,我想在 QGraphicsView 内部绘制一个16x16正方形的矩阵。 这是我目前拥有的代码: 窗口: 我想在其中创建从窗口从QGraphicsView绘制方法的逻辑类: 我似乎无法找到有关如何在线进行操作的示例,我发现的示例对我来说是模糊的,似乎无法弄清楚。 问题答案: 我