编辑:修正了代码:
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();
}
}
我已经设定了自己编写一些代码的任务,这些代码简单地使用户命令从地板上跳起球。第一步是创建一个窗口和一个楼层 - 我注意到我添加我的楼层的位置往往偏离屏幕并发现here 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();
}
}
答案 0 :(得分:2)
进行自定义绘画时:
您应该覆盖paintComponent()
而不是paint()并调用super.paintComponent(g)作为确保背景被清除的第一个语句。
重写类的getPreferredSize()
方法以返回面板的大小,以便布局管理器可以完成这项工作。所以在你的情况下它应该是(300,300)。
在您的代码中,您不应该设置任何组件的首选大小。布局管理器的工作是确定组件的首选大小。
panel.setPreferredSize(new Dimension(300,300));
您当前设置了持有跳球的面板的首选大小。这没有帮助,因为尚未设置跳球的首选尺寸。您会看到(10,10)方格,因为面板的FlowLayout确定跳球面板的首选大小仅为(10,10)。
此外,无需创建单独的面板。您可以直接将JumpingBall面板添加到框架中。