将画布添加到面板不显示画布?
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?(是的。)布局可能是这里最好的方法。以上是关于将画布添加到面板不显示画布?的主要内容,如果未能解决你的问题,请参考以下文章