[英]Drawing on a JPanel inside a JFrame using fillRect - rectangle sizing and position issues?
编辑:固定代码:
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是创建一个窗口和一个地板-我注意到我添加地板的位置通常不在屏幕上,并在这里发现frame.setSize(x,y)包括边框,您应该在框架内嵌入一个JPanel并大小代替。 但是,在尝试进行这些更改时,无论变量如何,我的rectangle.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();
}
}
当您进行自定义绘画时:
您应该覆盖paintComponent()
而不是paint()并调用super.paintComponent(g)作为第一条语句,以确保清除了背景。
重写该类的getPreferredSize()
方法以返回面板的大小,以便布局管理器可以执行此操作。 因此,您的情况应该是(300,300)。
在您的代码中,您不应设置任何组件的首选大小。 布局管理器的工作是确定组件的首选大小。
panel.setPreferredSize(new Dimension(300,300));
当前,您设置了容纳跳球的面板的首选尺寸。 这没有帮助,因为尚未设置跳跃球的首选大小。 您会看到一个(10,10)正方形,因为该面板的FlowLayout决定了您的跳球面板的首选大小仅为(10,10)。
同样,也无需创建单独的面板。 您可以直接将JumpingBall面板添加到框架中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.