Java Paint和JButton

时间:2015-06-07 06:14:41

标签: java jbutton paint

我正在尝试使用带有按钮的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();
            }
        });

    }
}

由于

2 个答案:

答案 0 :(得分:0)

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

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

<强>结果:

Result

答案 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组件在大部分框架上展开。