2015-06-07 4 views
0

Я пытаюсь иметь JFrame с кнопкой на нем, и когда я нажимаю на него, в верхнем левом углу появляется шар. Затем, если я снова нажму на него, позиция x, y изменится и движется. Проблема в том, что я не могу заставить мяч появиться на JFrame после того, как я нажму кнопку. Появилась только кнопка.Java Paint и JButton

Мой исходный код:

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

Добавьте эту строку после создания Prac объекта.

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

Результат:

Result

+0

Спасибо, Госу. ^.^ – Denominator

+0

@Denominator Нет проблем :) – Gosu

0

Вы должны переопределить компонент краски, а не краска().

Кроме того, вы должны добавить компонент в панель содержимого 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 компонент расширить на большую часть кадра.