자바 이벤트 핸들링 구현 질문드립니다.
글쓴이: 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:
댓글 달기