向面板添加 canvas 不会显示 canvas?
Adding a canvas to a panel doesn't show the canvas?
首先:抱歉,如果之前有人问过这个问题,但我似乎无法在任何地方找到答案,所以我们开始吧:
我正在尝试让 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-element 吗?提前感谢您的帮助:)
确实可以将 Canvas
对象添加到 JPanel
。
您的问题在于您的 Canvas
没有定义大小。
你需要的是下面两行
canvas.setPreferredSize(new Dimension(1300,300));
/*
*
*/
this.pack();
这会将您的 canvas 置于 panelCanvas
边框内,在浅灰色背景上显示一条黑色垂直线。
如果您希望 canvas 拉伸到面板的大小,请更改:
JPanel panelCanvas = new JPanel();
收件人:
JPanel panelCanvas = new JPanel(new GridLayout());
另见 this answer:
首先:抱歉,如果之前有人问过这个问题,但我似乎无法在任何地方找到答案,所以我们开始吧:
我正在尝试让 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-element 吗?提前感谢您的帮助:)
确实可以将 Canvas
对象添加到 JPanel
。
您的问题在于您的 Canvas
没有定义大小。
你需要的是下面两行
canvas.setPreferredSize(new Dimension(1300,300));
/*
*
*/
this.pack();
这会将您的 canvas 置于 panelCanvas
边框内,在浅灰色背景上显示一条黑色垂直线。
如果您希望 canvas 拉伸到面板的大小,请更改:
JPanel panelCanvas = new JPanel();
收件人:
JPanel panelCanvas = new JPanel(new GridLayout());
另见 this answer: