【发布时间】:2017-02-05 03:21:31
【问题描述】:
编辑:修正代码:
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 步是创建一个窗口和一个地板 - 我注意到我添加地板的位置往往不在屏幕上,并发现 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();
}
}
【问题讨论】:
-
1) 对于任何
JComponent或任何扩展它的东西,public void paint(Graphics g){ Graphics2D rectangle = (Graphics2D) g;应该改为public void paintComponent(Graphics g){ super.paintComponent(g); Graphics2D rectangle = (Graphics2D) g;。 2) 请参阅Detection/fix for the hanging close bracket of a code block 了解我无法再费心修复的问题。 3)JumpingBall也应该@OverridegetPreferredSize()方法返回一个合适的大小作为提示给父容器的布局管理器(panel)。