gpt4 book ai didi

java - 使用 fillRect 在 JFrame 内的 JPanel 上绘图 - 矩形大小调整和位置问题?

转载 作者:行者123 更新时间:2023-12-02 03:20:11 25 4
gpt4 key购买 nike

编辑:修正代码:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Dimension;


public class JumpingBall extends JPanel{
@Override
public Dimension getPreferredSize()
{
return new Dimension(300,300);
}


public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D rectangle = (Graphics2D) g;
rectangle.setColor(Color.BLACK);
rectangle.fillRect(0,270,300,30);
}


public static void main(String[] args) {
JFrame frame = new JFrame("Jumping Ball");


frame.getContentPane().add(new JumpingBall());
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
}
}

我给自己设定了编写一些代码的任务,这些代码可以简单地根据用户的命令让球从地板上跳起来。第 1 步是创建一个 window 和一个地板 - 我注意到我添加地板的位置往往在屏幕外,并发现 here frame.setSize(x,y) 包含边框,您应该在框架内嵌入一个 JPanel 并调整其大小。然而,在尝试进行这些更改时,无论变量如何,我的fragment.fillRect(x,y,width,height)似乎都显示为一个小正方形顶部中心。为什么会发生这种情况?

代码:

    import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Dimension;

public class JumpingBall extends JPanel{
public void paint(Graphics g){
Graphics2D rectangle = (Graphics2D) g;
rectangle.setColor(Color.BLACK);
rectangle.fillRect(0,0,300,30);
}

public static void main(String[] args) {
JFrame frame = new JFrame("Jumping Ball");
JPanel panel = new JPanel();

panel.setPreferredSize(new Dimension(300,300));
panel.add(new JumpingBall());

frame.getContentPane().add(panel);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
}
}

Here's a screenshot of my failed floor.

最佳答案

当您进行自定义绘画时:

  1. 您应该重写paintComponent()而不是paint(),并调用super.paintComponent(g)作为第一个语句以确保背景被清除。

  2. 重写类的 getPreferredSize() 方法以返回面板的大小,以便布局管理器可以完成该工作。所以在你的情况下它应该是 (300, 300)。

在您的代码中,您不应设置任何组件的首选大小。布局管理器的工作是确定组件的首选大小。

panel.setPreferredSize(new Dimension(300,300));

您当前设置了容纳跳球的面板的首选尺寸。这没有帮助,因为尚未设置跳球的首选尺寸。您会看到一个 (10, 10) 正方形,因为面板的 FlowLayout 决定了跳球面板的首选大小仅为 (10, 10)。

此外,无需创建单独的面板。您可以直接将 JumpingBall 面板添加到框架中。

关于java - 使用 fillRect 在 JFrame 内的 JPanel 上绘图 - 矩形大小调整和位置问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39725585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com