【问题标题】:passing button name as a string将按钮名称作为字符串传递
【发布时间】:2014-07-13 08:25:39
【问题描述】:

从java中的字符串值创建对现有对象的引用

在我的项目中,有很多按钮(目前大约 70 个);每个按钮都会在数据库中的 jlabel 中提出一个问题。 现在将根据用户选择是否要查看问题,或者是否标记了问题的答案,为每个按钮分配了颜色(精确的 jButton 来自 swings)。

一种方法是为每个 jbutton 的 actionperformed 编写代码,并在每个 jbutton 中使用 if-else 以获取确切的颜色,然后使用 setBackground 属性将其更改为特定颜色。 但是,如果必须稍微更改代码,这会导致很大的问题。然后我必须复制这 70 个按钮中的每一个的更改,将来可能会增加。

我在想的是一种创建函数并传递包含按钮名称的字符串参数的方法。 所以它将是: void selectfromdatabase(字符串按钮名称) { //(.).setBackground(Color.yellow);

我参考了一些 SO 论坛,发现了一个叫做 Reflection 的东西。但据我所知,它只适用于方法而不是对象。还是我错过了什么???

【问题讨论】:

  • 你可以试试地图Map<String, JButton>。这可以包含所有按钮,它们将通过它们的名称来识别。如果您写map.get(name),您将收到具有该名称的按钮对象,如果此名称未知,则为 null。
  • 您可以创建一个有2个参数的方法,并将第一个作为按钮名称传递给changeColor('btnName',Color.Yellow),可以通过反射轻松解决

标签: java jbutton


【解决方案1】:

对于 ActionEvent tpye 对象,有一个叫做 actionCommand 的东西。当您将每个按钮绑定到 ActionListener 时,您会为每个按钮设置一个字符串参数(actionCommand)。然后你可以在 onActionPerformed 中访问那个参数并区分事件的来源。

public static void main(String args[]){
    JButton btn1 = new JButton("btn1");
    btn1.setActionCommand("btn1");

    JButton btn2 = new JButton("btn2");
    btn2.setActionCommand("btn2");

    btn1.addActionListener(this);
    btn2.addActionListener(this);
}

@Override
public void actionPerformed(ActionEvent ae) {
    String sourceBtn = ae.getActionCommand();
    System.out.println(sourceBtn + "Button pressed!");
}

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多