【问题标题】:Java Swing Drawing RectanglesJava Swing 绘制矩形
【发布时间】:2015-06-09 18:55:30
【问题描述】:

我正在尝试可视化整数数组中的值。 它们应该像条形图,但只是条形图没有轴等 我在 GUI 上使用 Java Swing。 现在应该只绘制一个矩形,但是无论我在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);
}

我很想发布输出的图片,但我不想...

【问题讨论】:

  • I would love to post a picture of the output but SO doesn't want me to... - 每次您提出一个说明问题的问题时,都发布一个正确的SSCCE。然后我们可以根据需要复制/编译/执行代码以查看问题。

标签: java swing user-interface jframe jpanel


【解决方案1】:

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

同样覆盖MyClassgetPreferredSize方法为合适的值(你的绘图区域的大小),忘记setSize;使用pack 打包您的框架,然后使其可见。

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

【讨论】:

  • 非常感谢,如果我想把矩形放在左下角,BorderLayout.South 不会做任何事情。有没有办法将 0,0 点设置在其他地方而不是左上角?
  • 没关系,我通过使用 x 坐标和高度找到了一种方法。谢谢!
  • 是的,您可以通过将适当的AffineTransform 设置为Graphics2D 来修改坐标系。
【解决方案2】:
mypanel.setSize(new Dimension(256,256));

不要使用 setSize()。

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

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

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

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

JPanel 默认使用 FlowLayout。指定 BorderLayout 约束什么都不做。你甚至不需要这个面板,所以去掉它,只需将矩形面板添加到框架中。

【讨论】:

    猜你喜欢
    • 2021-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多