2010-05-25 7 views
0

JFrame 창에 여러 개의 패널이 있습니다. 매번 패널을 다르게 채울 예정입니다. 예 : GUI를 시작합니다 (이미지 센터 패널, 오른쪽 패널, 아래 패널). 중앙 패널 (20 개)은 버튼의 GUI (동일한 GUI) 3.자바 감지 버튼 클릭

초 개시 10 개 버튼 오른쪽 패널 및 바닥 패널을 채워. 센터 패널은 바닥

3. 그래서 매번 모든 고유 한 이름을 할 불가능 버튼의 임의의 숫자,있다가, 오른쪽 패널은 12 버튼이 있습니다, 50 버튼이 있습니다. 각 버튼 (목록 만)에 고유 한 이름이 없다는 사실을 감안할 때 어떤 버튼이 속한 패널에 따라 클릭되었는지 알고 싶습니다. 그게 가능하니?

+0

왜 그렇게 많은 버튼? 이 나쁜 UI의 냄새가 나에게. 어쩌면 당신이 성취하려고하는 것에 관해서 더 많은 단서를 우리에게 주셨으면합니다. 버튼이 화면에 표시 될 정도로 중요하면 변수 이름을 사용해야합니다. – I82Much

답변

3

여하튼 버튼이 생성되고; 나중에 검색 할 수있는 방식으로 번호가 매겨 졌다고 가정 해 봅시다.

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import java.util.List; 
import java.util.ArrayList; 
import javax.swing.JButton; 


public class ButtonTest extends JFrame implements ActionListener { 

    public ButtonTest() { 
     super(); 
     initGUI(); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setVisible(true); 
    } 

    private final List<JButton> buttons = new ArrayList<JButton>(); 
    private static final int NUM_BUTTONS = 20; 

    public void initGUI() { 
     JPanel panel = new JPanel(); 
     for (int i = 0; i < NUM_BUTTONS; i++) { 
      String label = "Button " + i; 
      JButton button = new JButton(label); 
      button.setActionCommand(label); 
      button.addActionListener(this); 
      buttons.add(button); 
      panel.add(button); 
     } 
     getContentPane().add(panel); 
    } 

    public static void main(String[] args) { 
     new ButtonTest(); 
    } 

    public void actionPerformed(ActionEvent e) { 
     String actionCommand = ((JButton) e.getSource()).getActionCommand(); 
     System.out.println("Action command for pressed button: " + actionCommand); 
     // Use the action command to determine which button was pressed 
    } 


} 
1

ActionEvent를 클릭 된 버튼에 대한 참조가 될 것이다 getSource와() 메소드를 갖는다. 그런 다음 필요할 경우 버튼의 동작 명령을 확인할 수 있습니다.

1

버튼을 포함하는 패널 알고 싶은 경우, JButton의 자체 getParent()를 호출하려고합니다. camickr에서 제안하는 것처럼 어떤 버튼이 클릭되었는지 확인하려면 ActionEvent에 getSource()을 사용하십시오.