将画布添加到面板不显示画布?

Posted

技术标签:

【中文标题】将画布添加到面板不显示画布?【英文标题】:Adding a canvas to a panel doesn't show the canvas? 【发布时间】:2016-09-09 12:15:26 【问题描述】:

首先:抱歉,如果之前有人问过这个问题,但我似乎无法在任何地方找到答案,所以我们开始吧:

我试图让一个画布元素在它被添加到面板时显示,面板周围有一个标题边框。这是我的代码。

public class TestClass extends JFrame

    private TestClass() 
        GuiCanvas canvas = new GuiCanvas();

        setTitle("TestClass");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(1300, 800);

        Border menuBorder = BorderFactory.createTitledBorder(
                BorderFactory.createLineBorder(Color.LIGHT_GRAY), "Overview");

        JPanel controlpanel = new JPanel();
        JPanel panelCanvas = new JPanel();

        panelCanvas.setBorder(menuBorder);
        panelCanvas.add(canvas);

        controlpanel.setLayout(new GridLayout(3, 1));
        controlpanel.add(panelCanvas);

        add(controlpanel);
        setLocationRelativeTo(null);
        setVisible(true);

        System.out.println(canvas.getBounds());

    

    private class GuiCanvas extends Canvas 

        GuiCanvas() 
            setBackground(Color.LIGHT_GRAY);
        

        @Override
        public void paint(Graphics g) 
            g.drawLine(20, 20, 20, 200);
        
    

    public static void main(String[] args) 
        new TestClass();
    

当上面的代码应该显示我在 GuiCanvas-Class 中绘制的定义线时,会产生一个带有标题边框的空面板。我在这里错过了什么吗?甚至可以将画布元素添加到面板吗?提前感谢您的帮助:)

【问题讨论】:

避免混合使用重量级和轻量级容器,它们不能很好地相互配合。除非你在玩 BufferStrategy,否则没有必要使用 Canvas 【参考方案1】:

如果您希望画布拉伸到面板的大小,请更改:

JPanel panelCanvas = new JPanel();

收件人:

JPanel panelCanvas = new JPanel(new GridLayout());

另见this answer:

【讨论】:

【参考方案2】:

确实可以将Canvas 对象添加到JPanel

您的问题在于您的Canvas 没有定义大小。 您需要的是以下两行

    canvas.setPreferredSize(new Dimension(1300,300));
    /*
     *
     */
    this.pack();

这会将您的画布置于panelCanvas 边框内,在浅灰色背景上显示一条黑色垂直线。

【讨论】:

非常感谢您的快速回答,非常感谢。只是为了让我正确理解:每个画布元素都需要有一个首选大小才能添加到面板中? 见Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?(是的。)布局可能是这里最好的方法。

以上是关于将画布添加到面板不显示画布?的主要内容,如果未能解决你的问题,请参考以下文章

将 PNG 绘制到画布元素 - 不显示透明度

java将图像添加到画布

java将图像添加到画布

Java 画布不可见

单击按钮时如何保存画布绘图并显示它

UserControl 模板不显示画布的子项