我正在尝试使用带有按钮的JFrame,当我点击它时,球会出现在左上角。然后,如果我再次点击它,x,y位置会改变并移动。问题是我点击按钮后似乎无法让球出现在JFrame上。只出现了按钮。
我的源代码:
package prac;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Prac extends JComponent {
private int x = 0;
private int y = 0;
private void moveBall() {
x = x + 1;
y = y + 1;
}
@Override
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.fillOval(x, y, 50, 50);
}
public static void main(String[] args) {
JFrame frame = new JFrame("Sample Frame");
JPanel buttonPanel = new JPanel();
JButton moves = new JButton("Click to move ball");
Prac game = new Prac();
buttonPanel.add(moves);
frame.setSize(500, 500);
frame.add(game);
frame.add(buttonPanel);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
moves.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent action) {
game.moveBall();
game.repaint();
}
});
}
}
由于
答案 0 :(得分:0)
在创建Prac
对象后添加此行。
Prac game = new Prac();
game.setSize(500, 500);
<强>结果:强>
答案 1 :(得分:0)
你应该覆盖paint组件而不是paint()。
此外,您应该将组件添加到Jframe的内容窗格而不是JFRAME本身。
您的组件很可能没有合适的尺寸。我建议:
JFrame frame = new JFrame("Sample Frame");
JPanel buttonPanel = new JPanel();
JButton moves = new JButton("Click to move ball");
Prac game = new Prac();
buttonPanel.add(moves);
frame.setSize(500, 500);
Container c = frame.getContentPane ();
c.setLayout (new BorderLayout ());
c.add(game, BorderLayout.CENTER);
c.add(buttonPanel, BorderLayout.NORTH);
这会导致您的game
组件在大部分框架上展开。