Java Swing绘图矩形

时间:2015-06-09 18:55:30

标签: java swing user-interface jframe jpanel

我正在尝试可视化整数数组中的值。 它们应该像条形图,但只是条形图没有轴等 我使用Java Swing作为GUI。 这应该暂时只绘制一个矩形,但无论我在g.fillRect(0,0,width,height)中增加多高,它都会被绘制为正方形。

这是我的代码:

public class MyClass extends JPanel
{
...

public void paint(Graphics g)
{
    g.fillRect(0,0,10,100);
}

public void draw()
{
    JFrame myframe = new JFrame("FrameTest");
    myframe.setSize(new Dimension (groesse,groesse));
    myframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


    JPanel mypanel = new JPanel();
    mypanel.setLayout(new FlowLayout(FlowLayout.LEFT));
    mypanel.setSize(new Dimension(256,256));

    mypanel.add(new MyClass(),BorderLayout.SOUTH);

    myframe.add(mypanel,BorderLayout.SOUTH);

    myframe.setVisible(true);
}

我很想发布一张输出图片,但是我不希望我......

2 个答案:

答案 0 :(得分:3)

使用BorderLayout而不是FlowLayout。不要在同一BorderLayout区域中添加两个组件。将您的MyClass个实例放入BorderLayout.CENTER

同时将getPreferredSize MyClass方法覆盖为适当的值(绘图区域的大小),并忘记setSize;使用pack打包您的框架,然后再将其显示出来。

最后,在使用swing paint时不要覆盖paintComponent

答案 1 :(得分:2)

mypanel.setSize(new Dimension(256,256));

不要使用setSize()。

自定义绘画是通过覆盖班级的paintComponent()方法完成的,不要忘记调用super.paintComponent(...)。您还可以覆盖getPreferredSize()方法以返回自定义绘画的尺寸。

现在,您的组件将具有首选大小,布局管理器可以完成其工作。

阅读Custom Painting上Swing教程中的部分,了解更多信息和工作示例。

mypanel.add(new MyClass(),BorderLayout.SOUTH);

默认情况下,JPanel使用FlowLayout。指定BorderLayout约束不执行任何操作。你甚至不需要这个面板,所以摆脱它,只需将矩形面板添加到框架中。