java - 在 Paintcomponent 中调整大小

标签 java swing user-interface graphics

所以我有一个程序,我在一组 JButton 和一个 JTextArea 旁边使用 paintComponent(准确地说是弧形和椭圆形)显示图像,我希望弧形/椭圆形在/如果用户更改时改变大小框架的大小。我已经实现了 getWidth、getHeight 的东西,但我似乎无法让它工作。

这是我的代码。如果我不设置PreferredSize,那么它不起作用;弧形/椭圆形在框架边缘和按钮之间被压扁。如果我尝试使用 getWidth() 和 getHeight() 而不是 200 作为大小,它也不起作用;弧形/椭圆形根本不显示。不知道该怎么做。

此外,如果有任何让我的代码不那么复杂的提示(例如,如果只需要一个类),我们将不胜感激。

public class GUIDesign
{
public static void main(String[] args)
{
    GUIFrame frame = new GUIFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}
}
class GUIFrame extends JFrame
{
PaintPanel2 canvas = new PaintPanel2();
public GUIFrame()
{
    ...

    add(mainHolder, BorderLayout.CENTER);   //has the JButtons, JTextArea.
    add(canvas, BorderLayout.WEST);
    this.setTitle("this");
    this.pack();
    this.setLocationRelativeTo(null);
}
}
class PaintPanel2 extends JPanel
{
private static int SIZE = 200;

public PaintPanel2()
{
    setPreferredSize(new Dimension(SIZE, SIZE));
}
protected void paintComponent(Graphics g)
{
    super.paintComponent(g);

    int xCenter = getWidth()/2;
    int yCenter = getHeight()/2;

    int startOvalX = (int) (xCenter/5);
    int startOvalY = (int) (yCenter/5);
    int endOvalX = (int) (xCenter * 1.5);
    int endOvalY = (int) (yCenter * 1.5);
    g.setColor(Color.green);
    g.fillArc(startOvalX, startOvalY, endOvalX, endOvalY, 0, 180);
    g.setColor(Color.black);
    g.drawArc(startOvalX, startOvalY, endOvalX, endOvalY, 0, 180);
    g.setColor(Color.black);
    g.fillOval((int)(startOvalX/1.5) - 1, (int) (startOvalY * 2.5),(int) (endOvalX * 1.1) + 2,(int)(endOvalY/1.5));
    g.setColor(Color.green);
    g.fillOval((int)(startOvalX/1.5), (int) (startOvalY * 2.5) -1,(int) (endOvalX * 1.1),(int)(endOvalY/1.5));
}
}

最佳答案

当您使用 BorderLayout 作为布局管理器时,添加到 CENTER 中的组件将是在主容器调整大小时调整大小的组件。因此,如果您更改代码使 Canvas 居中,您将获得预期的结果:

add(mainHolder, BorderLayout.WEST);   //has the JButtons, JTextArea.
add(canvas, BorderLayout.CENTER);

关于java - 在 Paintcomponent 中调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12803774/

相关文章:

Java ThreadPoolExecutor 在一段时间后停止工作

java - 对话框在没有应用程序的情况下可见。在替代选项卡上

java - 在 JPanel 上绘制线条而不重新绘制

java - 如何使用Java反射从源代码中找出UML关联

java - 为什么我在变量值上得到不同的结果?

java - 如何将内容为XML格式的String转成JDom文档

java - 如何从 JTextArea 获取文本?

iphone - 如何让iPhone中的两个导航栏重叠?

javascript - 使用 JQuery UI 选项卡添加新选项卡

线程执行时 Python GUI 没有响应