자바 이벤트 핸들링 구현 질문드립니다.

tlqkdto89의 이미지

 
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개의 그리드 레이아웃 버튼 중에 하나를 선택하면

오른쪽에 과일 그림을 선택할 수 있게 만듭니다. 과일 그림을 선택하면 원래 빈 그림이었던

그리드 레이아웃이 그 과일 그림으로 바뀌어야 합니다. 그런데 이렇게 하고 실행하면

첫번째 빈 그림은 과일 그림으로 바뀌는데 두번째 빈 그림 선택시부터는 오른쪽에 과일을

선택할 수 있는 창이 뜨질 않습니다.. 어떤식으로 구현해야 되는지 궁금합니다. 이틀을 고민했는데 ... ㅠ

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.