Java 画图和 JButton

Java Paint and JButton

我正在尝试创建一个带有按钮的 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();
            }
        });

    }
}

谢谢

在创建 Prac 对象后添加此行。

Prac game = new Prac();
game.setSize(500, 500);

结果:

您应该覆盖 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 组件在大部分框架上展开。