Java 이벤트리스너와 페인트

저번에는 키보드/마우스 이벤트로 상자를 움직였다면 이번에는 버튼 이벤트로 상자를 움직이는 예제입니다.

package tue160524; 
 
import javax.swing.*; 
import java.awt.*; 
import java.awt.Graphics; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
 
import static java.awt.Color.red; 
import static java.awt.Color.yellow; 
 
/** 
 * Created on 2016-05-24. 
 * 상자 출력 
 */ 
public class movingbox extends JPanel implements ActionListener { 
    private JPanel panel1 = new JPanel(); 
    private JButton leftButton = new JButton("왼쪽으로 이동"); 
    private JButton rightButton = new JButton("오른쪽으로 이동"); 
 
    private int squareX = 50; 
    private int squareY = 50; 
    private int squareW = 20; 
    private int squareH = 100; 
 
    movingbox() { 
        this.setLayout(new BorderLayout()); //JPanel을 상속받았으므로 그 자체가 Panel임. 
        //해당 패널(자기 자신, movingbox)의 레이아웃을 BorderLayout으로 설정. 
 
        panel1.add(leftButton); 
        panel1.add(rightButton); 
 
        this.add(panel1, BorderLayout.SOUTH); //패널을 BorderLayout을 사용해 밑으로 내려버림 
 
        leftButton.addActionListener(this); 
        rightButton.addActionListener(this); 
    } 
 
    public void paintComponent(Graphics g) { 
        super.paintComponent(g); 
        g.setColor(yellow); //배경색 YELLOW 
        g.fillRect(0,0,400,300); 
        g.setColor(red); //도형색 RED 
        g.fillRect(squareX,squareY,squareW,squareH); //도형 그리기!! 
 
    } 
 
    public void actionPerformed(ActionEvent e) { 
        if(e.getSource() == leftButton) { 
            //레프트버튼을 누르면 X값 - 10 
            squareX -= 10; 
            repaint(); 
            //다시 그림! 
        } 
        else if (e.getSource() == rightButton) { 
            //라이트버튼을 누르면 X값 + 10 
            squareX += 10; 
            repaint(); 
        } 
    } 
} 
 
class frame extends JFrame { 
    frame() { 
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        this.setSize(400,300); 
        this.add(new movingbox()); 
        this.setVisible(true); 
    } 
 
    public static void main(String[] args) { 
        new frame(); 
    } 
}