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

时间:2016-05-13 10:28:29

标签: java swing canvas jframe awt

首先:对不起,如果以前问过这个问题,但我似乎无法在任何地方找到答案,所以我们走了:

我正在尝试将一个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元素吗?感谢您的帮助:)

2 个答案:

答案 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边框内,在浅灰色背景上显示黑色垂直线。