如何使字符串值在java中调用特定的已有JButton变量名?

如何使字符串值在java中调用特定的已有JButton变量名?,java,swing,jbutton,string-conversion,Java,Swing,Jbutton,String Conversion,所以,我知道有这样一个问题: int number = Integer.parseInt("5"); String numtxt = Integer.toString(12); double number = Double.parseDouble("4.5"); String numbertxt = Double.toString(8.2); String letter = Character.toString('B'); char letter = &q

所以,我知道有这样一个问题:

int number = Integer.parseInt("5");
String numtxt = Integer.toString(12);
double number = Double.parseDouble("4.5");
String numbertxt = Double.toString(8.2);
String letter = Character.toString('B');
char letter = "stringText".charAt(0);

so on...
但我不知道如何使字符串值动态调用已有的JButton变量名;有可能吗

比方说,我有4个按钮,叫做btn1、btn2、btn3和btnFillNumber

我创建了一个名为buttonName的字符串

请注意,这些jbutton的值在某些情况下不一定是递增的

输出:

我的真实发展:

另外,我在NetBeans设计中使用JFrame(只需单击并拖动调色板窗口中的对象,如JPanel、JButton等,这样我就不会手动键入代码,只需创建自己的逻辑方法;并且我无法在源代码视图中编辑灰色背景中的代码,该源代码视图是由Design View自动创建的,但在Design View本身中。如果您有提示和指南,我很乐意)。

使用地图:

private Map<String,JButton> buttonMap = new HashMap<String,JButton>();
在您的动作侦听器/循环中:

String buttonName = "btn1"; //should be parameter or whatever
JButton button = buttonMap.get(buttonName);
作为替代方案,您也可以设置一个JButton数组:

JButton[] buttons = new JButton[4];

button[0] = new JButton(); //btn1
button[1] = new JButton(); //btn2
button[2] = new JButton(); //btn3
button[3] = new JButton(); //btn4
并访问它

JButton but = button[Integer.parseInt(buttonString)-1];
或者利用向UI元素添加自定义属性的可能性(您需要一个JComponent)

后来又从何而来

JButton but = (JButton)getContentPane().getClientProperty("btn1");

我同意Kevin的评论。最好的具体
Map
类可能是
Hashtable
。你甚至不需要创建按钮名,只要在它们都编号的情况下将一个整数与之关联(如果
btnFillNumber
可以是
0

Hashtable buttonTable=newhashtable();
//用钮扣填充钮扣
JButton-button=buttonTable.get(num);
如果(按钮!=null){
//用按钮做点什么
}

由于自动装箱,您不需要创建
Integer
对象来查询哈希表,
num
可以是
int
原语。

如果我理解正确,那么一种方法可以是将按钮存储在
Map
中。之后,您只需通过
Map.get(“btn1”)访问它们
。感谢您的快速回复,也许我会看看……仍在学习Java。:dp可能重复@Jan Jeremy我的问题是,如果每个JButton都有一组静态值,或者JButton的值可以在运行时更改,那么这个问题可以解决anverable@mKorbel你是什么意思?你是说btn1-btn3的值?(可以通过setText进行更改)。不,它们不是静态的,可以分配给不同的值。(哈希)Map使用util.List没有更好的内部索引,那么所有附加参数都可以存储(取决于索引)在和/或使用Swing ActionSee(哈希)Map使用util.List没有更好的内部索引,那么所有附加参数都可以存储(取决于索引)在和/或通过使用Swing Actionwith Map,您可以通过名称访问项目-仅通过索引访问列表。问题的措辞很明确,是通过名称访问,因此Map提供了最佳结果。然后,关于get/putClientProperty的reson,是关于在没有过早数组的情况下简化所有可能的事情(只是我的观点,而不是flamewar)您可以在按钮上使用get/putClientProperty。如果它们在映射中,您仍然可以这样做。或者您是否打算使用按钮将添加到的JPanel作为“映射”来存储值?是的,同意,确实可以,但是util.List是更好的数组,您必须在(哈希)中保存索引(可能需要从任何地方)单独映射:-)
String buttonName = "btn1"; //should be parameter or whatever
JButton button = buttonMap.get(buttonName);
JButton[] buttons = new JButton[4];

button[0] = new JButton(); //btn1
button[1] = new JButton(); //btn2
button[2] = new JButton(); //btn3
button[3] = new JButton(); //btn4
JButton but = button[Integer.parseInt(buttonString)-1];
getContentPane().putClientProperty("btn1", btn1);
JButton but = (JButton)getContentPane().getClientProperty("btn1");
Hashtable<Integer,JButton> buttonTable = new Hashtable<>();

// Fill buttonTable with buttons

JButton button = buttonTable.get(num);

if (button != null) {
    // Do something with button
}