자바 이벤트 핸들링 구현 질문드립니다.
글쓴이: tlqkdto89 / 작성시간: 목, 2012/12/20 - 6:34오전
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class PanelTest extends JFrame implements ActionListener
{
private JButton btnz[];
private JButton button1;
private JButton button2;
private JButton button3;
private Panel pan1, pan2;
private int num;
public PanelTest()
{
super("패널테스트");
btnz = new JButton[17];
pan1 = new Panel(new GridLayout(4, 4));
pan2 = new Panel(new GridLayout(3, 1));
for(int i = 0; i < 9; i++)
{
btnz[i] = new JButton(String.valueOf(i));
}
for(int i = 1; i < btnz.length; i++)
{
btnz[i] = new JButton("농장 " + i);
btnz[i].setIcon(new ImageIcon("empty.jpg"));
pan1.add(btnz[i]);
}
button1 = new JButton("딸기", new ImageIcon("berry.jpg"));
button2 = new JButton("감자", new ImageIcon("potato.jpg"));
button3 = new JButton("당근", new ImageIcon("carrot.jpg"));
pan2.add(button1);
pan2.add(button2);
pan2.add(button3);
setLayout(new BorderLayout());
add(pan1, BorderLayout.CENTER);
add(pan2, BorderLayout.EAST);
setAction();
}
private void setAction()
{
button1.addActionListener(this);
button2.addActionListener(this);
button3.addActionListener(this);
for(int i = 0; i < btnz.length; i++)
{
btnz[i].addActionListener(this);
}
}
public void actionPerformed(ActionEvent e)
{
for(int i = 0; i < btnz.length; i++)
{
if(e.getSource() == btnz[i])
{
pan2.setVisible(true);
JOptionPane.showMessageDialog(btnz[i], String.format("작물을 심어주세요!!", e.getActionCommand()));
System.out.println(btnz[i].getText());
num = i;
break;
}
else
{
pan2.setVisible(false);
}
}
if(e.getSource() == button1)
{
JOptionPane.showMessageDialog(button1, String.format("%s를 심습니다.", e.getActionCommand()));
btnz[num].setIcon(new ImageIcon("berry.jpg"));
System.out.println("딸기");
}
else if(e.getSource() == button2)
{
JOptionPane.showMessageDialog(button2, String.format("%s를 심습니다.", e.getActionCommand()));
btnz[num].setIcon(new ImageIcon("potato.jpg"));
System.out.println("감자");
}
else if(e.getSource() == button3)
{
JOptionPane.showMessageDialog(button3, String.format("%s을 심습니다.", e.getActionCommand()));
btnz[num].setIcon(new ImageIcon("carrot.jpg"));
System.out.println("당근");
}
}
public static void main(String[] args)
{
PanelTest rm = new PanelTest();
rm.setBounds(500, 500, 500, 500);
rm.setSize(1500, 700);
rm.setVisible(true);
rm.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent w)
{
System.out.println("종료");
System.exit(0);
}
});
}
}
원래 구현하려고 하던 것은 16개의 그리드 레이아웃 버튼 중에 하나를 선택하면
오른쪽에 과일 그림을 선택할 수 있게 만듭니다. 과일 그림을 선택하면 원래 빈 그림이었던
그리드 레이아웃이 그 과일 그림으로 바뀌어야 합니다. 그런데 이렇게 하고 실행하면
첫번째 빈 그림은 과일 그림으로 바뀌는데 두번째 빈 그림 선택시부터는 오른쪽에 과일을
선택할 수 있는 창이 뜨질 않습니다.. 어떤식으로 구현해야 되는지 궁금합니다. 이틀을 고민했는데 ... ㅠ
Forums:


댓글 달기