我试图在整数数组中可视化值。它们应该像条形图一样,但只是条形图,没有轴等等我使用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);
}
我很想发布一个输出的图片,但是SO不希望我…
使用BorderLayout
而不是FlowLayout
。不要在同一个BorderLayout
区域中添加两个组件。把MyClass
实例放到BorderLayout.CENTER
中。
也覆盖MyClass
的getPreferredSize
方法到一个合适的值(你的绘图区域的大小),忘记setSize
;使用pack
来包装你的框架,然后使它可见。
最后,当使用swing时,不要覆盖paint
,而是paintComponent
。
mypanel.setSize(new Dimension(256,256));
不要使用setSize()
自定义绘画是通过重写类的paintComponent()
方法来完成的,不要忘记调用super.paintComponent(...)
。您还可以重写getPreferredSize()
方法以返回自定义绘画的尺寸。
现在你的组件将有一个首选的大小和布局管理器可以做它的工作。
阅读Swing教程中关于自定义绘画的部分,了解更多信息和工作示例。
mypanel.add(new MyClass(),BorderLayout.SOUTH);
JPanel默认使用FlowLayout。指定一个BorderLayout约束没有任何作用。你甚至不需要这个面板,所以去掉它,只添加矩形面板到框架。