java - 在 JPanel 上绘制矩形

标签 java swing jpanel draw graphics2d

我有一个 JScrollPane,在它上面有一个名为“panel1”的 JPanel。 我想要在这个 JPanel 上绘制一些矩形。

我有一个名为 DrawRectPanel 的类,它扩展了 JPanel 并执行所有绘图工作。 问题是,我尝试通过编写以下代码在 panel1 上绘制矩形:

panel1.add(new DrawRectPanel());

但是 panel1 上什么也没出现 然后我尝试了,就像对 DrawRectPanel 类的测试一样:

JFrame frame = new JFrame();
frame.setSize(1000, 500);
Container contentPane =    frame.getContentPane();
contentPane.add(new DrawRectPanel());
frame.show();

这有效,并生成了绘图,但在单独的 JFrame 上 如何在 panel1 上绘制矩形? 提前致谢。

编辑: DrawRectPanel 的代码

public class DrawRectPanel extends JPanel  {

    DrawRectPanel() {
        Dimension g = new Dimension(400,400);
        this.setPreferredSize(g);
        System.out.println("label 1");
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        System.out.println("label 2");
        g.setColor(Color.red);
        g.fillRect(20, 10, 80, 30);
    }
 }

屏幕上仅打印标签 1

最佳答案

还是不知道,

例如

enter image description here

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JComponent;
import javax.swing.JFrame;

public class CustomComponent extends JFrame {

    private static final long serialVersionUID = 1L;

    public CustomComponent() {
        setTitle("Custom Component Graphics2D");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public void display() {
        add(new CustomComponents());
        pack();
        // enforces the minimum size of both frame and component        
        setMinimumSize(getSize());
        setVisible(true);
    }

    public static void main(String[] args) {
        CustomComponent main = new CustomComponent();
        main.display();
    }
}

class CustomComponents extends JComponent {

    private static final long serialVersionUID = 1L;

    @Override
    public Dimension getMinimumSize() {
        return new Dimension(100, 100);
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(400, 300);
    }

    @Override
    public void paintComponent(Graphics g) {
        int margin = 10;
        Dimension dim = getSize();
        super.paintComponent(g);
        g.setColor(Color.red);
        g.fillRect(margin, margin, dim.width - margin * 2, dim.height - margin * 2);
    }
}

关于java - 在 JPanel 上绘制矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7723591/

相关文章:

java - 两台计算机上的 Hazelcast 实例看不到对方

java - 从另一个类构造函数的 main 方法调用时出现 ".class expected"错误

java - 从其父 JMenu 获取 JMenuItem 的位置

java - JPasswordBox 字段太大。我怎样才能让它变小?

java - 选择 JTabbedPane 选项卡时更改 JFrame 显示

Java 面板不显示

java - 最终引用列表的 akka 不可变消息

java - 尝试使用智能卡 I/O API 读取和写入字符串到智能卡

java - JPanel 中的图像尺寸变小

java - 我已经创建了一个基本的 GUI,但按钮不会与文本字段交互