java - 如何在 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 显示代码中没有错误。此外,我如何将颜色转发给圆形课程。
解决方案
为了在 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();
}
}
这是您在运行上述代码时应该看到的内容。
推荐阅读
- react-native - react-native 录音机没有停止
- r - 使用正则表达式在 R 中进行字符串操作出错
- python - 在 X 轴上翻转垂直条形图 Altair
- swiftui - SwiftUI:选取器不会更新同一视图中的文本
- python - 使用额外功能处理错误
- node.js - 我们可以将启用的设置应用于 Elasticsearch 中任何索引的已存在字段吗
- php - Ajax 调用在成功时不显示响应
- flutter - ListView.builder() 出现颤振错误。错误:底部溢出 279 像素
- angular - 当路径有多个段时,角度会因延迟加载而出现 ChunkLoadError 错误
- typescript - 首选休息参数的打字稿 ESLint 错误