首先:对不起,如果以前问过这个问题,但我似乎无法在任何地方找到答案,所以我们走了:
我正在尝试将一个canvas元素添加到面板周围带有标题边框的面板中。这是我的代码。
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中绘制的已定义线条。我在这里错过了什么吗?甚至可以在面板中添加canvas元素吗?感谢您的帮助:)
答案 0 :(得分:2)
如果您希望画布拉伸到面板的大小,请更改:
JPanel panelCanvas = new JPanel();
要:
JPanel panelCanvas = new JPanel(new GridLayout());
另见this answer:
答案 1 :(得分:-1)
确实可以将Canvas
对象添加到JPanel
。
您的问题在于Canvas
没有明确的大小。
您需要的是以下两行
canvas.setPreferredSize(new Dimension(1300,300));
/*
*
*/
this.pack();
这会将画布放在panelCanvas
边框内,在浅灰色背景上显示黑色垂直线。