2012-11-07 3 views
1

이것은 처음으로 java swing n co를 사용하여 GUI 프로그래밍을하는 것이므로 약간의 조언이 필요합니다. 현재 버튼에 동작 명령을 설정하여 버튼에 기능을 추가하고 있습니다. 그럼 아래와 같은 활동을 위해 컨테이너에서 수신 : 난 그냥이 있는지 알고 싶어Java의 버튼 기능을위한 동작 명령

else if("selectColor".equals(e.getActionCommand())) { 
     Color c = JColorChooser.showDialog(this, "Select Color", Color.GREEN); 
     if (selectedShape != null) { 
      undoStack.add(copyOf(model.getAllShapes())); 
      model.setShapeColor(selectedShape, c); 
     } 
     else{ 
      defaultColor = c; 
     } 
    } 

:

colorButton.setText("Select Color"); 
    colorButton.setFocusable(false); 
    colorButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); 
    colorButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); 
    jToolBar1.add(colorButton); 
    jToolBar1.add(jSeparator1); 
    colorButton.setActionCommand("selectColor"); 
    colorButton.addActionListener(this); 

난 후 어떤 구성 요소에 대한 수행 작업은 아래와 같은 조각을 사용하여 수행되었다 확인 좋은 연습이나 나쁜 연습?

+0

"e.getSource()"를 사용하고 버튼과 비교할 때를 제외하고는 매우 비슷합니다. 그러나 익명의 내부 수업에 청취자가 있습니다. 이것이 더 좋고/더 나쁜 연습인지 잘 모르겠습니다. –

+5

접근 방식에 특히 잘못된 것은 없지만 (작동 방식은 어떻게 설계 되었는가), [How to Use Actions] (http://docs.oracle.com/javase/tutorial/)를 통해 읽는 것이 좋습니다. uiswing/misc/action.html), 조금 더 발전되었지만 개념은 같습니다. Bucco가 말했듯이, 당신은 ActionListeners를 하나의 그룹으로 분리하거나 하나의 행동 개념을 다룰 수 있거나 내부 클래스를 사용할 수 있습니다. 청취자의 몸이 십여 라인을 초과하면 읽지 못하게되어 익명의 클래스를 사용하지 못하게 할 것입니다. – MadProgrammer

+0

또한 [이 질문에] (http://stackoverflow.com/q/12463345/1076463) 참조하십시오. – Robin

답변

1

내가 일반적으로하는 일은 익명의 클래스를 사용하는 것입니다.

JButton button = new JButton("BUTTON"); 

button.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent event) { 
    // do relevant stuff 
    } 
}); 

EDIT : MadProgrammer의 의견 (위)은 귀하의 옵션을 훌륭하게 요약합니다. 이것은 실제로 '더 긴'방법에 대한 최선의 접근법이 아닐 수도 있지만, 단순한 경우에 그것은 훌륭하고 명확합니다.