Java Swing绘图矩形

Java Swing绘图矩形,java,swing,user-interface,jframe,jpanel,Java,Swing,User Interface,Jframe,Jpanel,我试图在整数数组中可视化值。 它们应该像一个条形图,但只是没有轴的条形图 我正在为GUI使用JavaSwing。 现在应该只画一个矩形,但是无论我在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(

我试图在整数数组中可视化值。 它们应该像一个条形图,但只是没有轴的条形图 我正在为GUI使用JavaSwing。 现在应该只画一个矩形,但是无论我在
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);
}
我很想发布输出的图片,但不想让我

mypanel.setSize(new Dimension(256,256));
不要使用setSize()

自定义绘制是通过重写类的
paintComponent()
方法完成的,不要忘记调用
super.paintComponent(…)
。您还可以重写
getPreferredSize()
方法以返回自定义绘制的维度

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

有关更多信息和工作示例,请阅读上Swing教程的部分

mypanel.add(new MyClass(),BorderLayout.SOUTH);
默认情况下,JPanel使用FlowLayout。指定BorderLayout约束不起任何作用。你甚至不需要这个面板,所以摆脱它,只需将矩形面板添加到框架中即可

不要使用setSize()

自定义绘制是通过重写类的
paintComponent()
方法完成的,不要忘记调用
super.paintComponent(…)
。您还可以重写
getPreferredSize()
方法以返回自定义绘制的维度

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

有关更多信息和工作示例,请阅读上Swing教程的部分

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

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

使用
边框布局
而不是
流程布局
。不要在同一
BorderLayout
区域中添加两个组件。将您的
MyClass
实例放在
BorderLayout.CENTER

还将
MyClass
getPreferredSize
方法重写为适当的值(绘图区域的大小),并忘记
setSize
;使用
pack
在使框架可见之前对其进行打包


最后,使用swing时不要覆盖
绘制
,而是
绘制组件

使用
边框布局
而不是
流程布局
。不要在同一
BorderLayout
区域中添加两个组件。将
MyClass
实例放入
BorderLayout.CENTER

还将
MyClass
getPreferredSize
方法重写为适当的值(绘图区域的大小),并忘记
setSize
;使用
pack
在使框架可见之前对其进行打包


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

我很想发布输出的图片,但不想让我…
-每次您提出问题时都发布一个适当的说明问题。如果我们愿意,我们可以复制/编译/执行代码以查看问题。
我很想发布输出的图片,但不想让我…
-每次您提出问题时,都发布一个适当的说明问题的帖子。如果我们愿意,我们可以复制/编译/执行代码来查看问题。非常感谢,如果我想把矩形放在左下角,BorderLayout。South不会做任何事情。有没有办法在其他地方设置0,0点,而不是左上角?没关系,我找到了一种方法,通过玩x坐标和高度。谢谢是的,您可以通过将适当的
仿射变换设置为
图形2d
来修改坐标系。非常感谢,如果我想将矩形放在左下角,BorderLayout。South不会做任何事情。有没有办法在其他地方设置0,0点,而不是左上角?没关系,我找到了一种方法,通过玩x坐标和高度。谢谢是的,您可以通过将适当的
仿射变换设置为
图形2d
来修改坐标系。