Java中用于按钮功能的操作命令

Java中用于按钮功能的操作命令,java,swing,Java,Swing,这是我第一次用JavaSwingnCo进行gui编程,所以我需要一些建议。我目前正在通过在按钮上设置操作命令来为按钮添加功能。然后,我在容器上侦听以下操作: colorButton.setText("Select Color"); colorButton.setFocusable(false); colorButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); colorButton

这是我第一次用JavaSwingnCo进行gui编程,所以我需要一些建议。我目前正在通过在按钮上设置操作命令来为按钮添加功能。然后,我在容器上侦听以下操作:

    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);
然后,我使用下面的代码段检查对哪个组件执行了操作:

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;
        }
    }

我只是想知道这是好的还是坏的做法?

我通常会使用匿名类,例如

JButton button = new JButton("BUTTON");  

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

编辑:程序员的评论(以上)很好地总结了你的选择。对于“较长”的方法,这可能不是最好的方法,但对于简单的方法,这是很好且清晰的方法。

我通常会使用匿名类,例如

JButton button = new JButton("BUTTON");  

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

编辑:程序员的评论(以上)很好地总结了你的选择。对于“较长”的方法,这可能不是最好的方法,但对于简单的方法,它很好且清晰。

这与我所做的非常相似,只是我使用了“e.getSource()”并与按钮进行了比较。但是,我的侦听器位于匿名内部类中。我不确定这是否是一种更好/更糟糕的做法。这种方法没有什么特别的错误(它是如何设计工作的),但是,我建议通读一遍,它稍微先进一点,但概念是一样的。正如Bucco所建议的,您可能希望将
ActionListeners
分成多个组(有些组处理单个动作概念)或使用内部类。如果侦听器的主体超过十几行,我不鼓励使用匿名类,因为它们变得很难读取。此外,这与我所做的非常相似,只是我使用了“e.getSource()”并与按钮进行比较。但是,我的侦听器位于匿名内部类中。我不确定这是否是一种更好/更糟糕的做法。这种方法没有什么特别的错误(它是如何设计工作的),但是,我建议通读一遍,它稍微先进一点,但概念是一样的。正如Bucco所建议的,您可能希望将
ActionListeners
分成多个组(有些组处理单个动作概念)或使用内部类。如果侦听器的主体超过十几行,我不鼓励使用匿名类,因为它们变得难以阅读和查看