2013-06-16 2 views
0

안녕하세요 모두 나는 "마지막"쉽게 1 개 싱글 버튼의 ​​텍스트를 변경할 수 있지만 비행 예약 시스템을위한 버튼을 많이 만들 필요하고, 버튼을, 최종 나던 작업 ... 더 때최종 변경없이 JButton 텍스트 또는 색상 변경?

JButton btnBookFlight; 

eco = new EconomyClass(); 
eco.setSeats(5); 
for(int i=0;i<20;i++){ 
    btnBookFlight = new JButton("Book" +i); 
    btnBookFlight.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      btnBookFlight.setBackground(Color.RED); 
      btnBookFlight.setOpaque(true); 
      btnBookFlight.setText("Clicked"); 
     } 
    }); 
    btnBookFlight.setBounds(77, 351, 100, 23); 
    contentPane.add(btnBookFlight); 
} 

나에게이 트릭을 넘겨 줄 수있는 트릭을 제안 할 수 있다면 기뻐할 것입니다. 버튼 색상이나 텍스트를 클릭 할 때 변경하거나 다른 멋진 효과를 마우스로 올려 놓고 싶지만 텍스트 나 색상만으로 충분합니다. =). 시간 내 주셔서 감사합니다!

답변

4

사용 ActionListener

btnBookFlight.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent event) { 

     JButton button = (JButton)event.getSource(); 
     button.setBackground(Color.RED); 
     ... 
    } 
}); 

btnBookFlight에서 ActionEvent의 소스를 액세스하는 내부 클래스 (ActionListener) 용 final이어야한다. JLS 8.1.3

모든 지역 변수, 형식 매개 변수, 또는 예외 매개 변수를 사용하지만, 내부 클래스에서 선언되지에서

은 최종 선언해야합니다. 이 허용되지 않으면

다음 JButton 자체 getSource를 사용 ActionEvent의 소스 기기를 사용하여 액세스 될 수있다.

그러나, 말했다, 가장 간단한 해결책은 for 루프의 범위 내에서 JButton 선언을 이동하고 그것을 final을하는 것입니다 :

for (int i = 0; i < 20; i++) { 
    final JButton btnBookFlight = new JButton("Book" + i); 
    btnBookFlight.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      btnBookFlight.setBackground(Color.RED); 
      ... 
     } 
    }); 
} 
+0

+1 동적으로 이벤트의 소스를 찾는 방법을 설명하기위한 :

는 내 말은 사용하는 것입니다. –

+0

고맙습니다.이 좋은 = =) – Anarkie

+0

나는 항상이 방법을 사용 하겠지만 뒤에 논리를 설명해 주시겠습니까? – Anarkie

1

그냥 액션 청취자와 final에 대한 익명 클래스를 사용하지 마십시오 제약 조건이 사라집니다.

class MyActionListener implements ActionListener { 
    public void actionPerformed(ActionEvent e) { 
    JButton src = (JButton)e.getSource(); 
    // do what you want 

    } 
} 
+0

이 경우에는 익명의 클래스를 피하기 위해'instanceof JButton' – nachokk