Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 考虑到Jbuttons的名称,如何将其放入arraylist?_Java_Swing_Reflection_Jbutton - Fatal编程技术网

Java 考虑到Jbuttons的名称,如何将其放入arraylist?

Java 考虑到Jbuttons的名称,如何将其放入arraylist?,java,swing,reflection,jbutton,Java,Swing,Reflection,Jbutton,我有这个代码,我想把我的页面中的所有按钮放在arraylist中,并考虑它们的名称,如果它的名称是例如btn_2,它应该是列表的第二个元素。 它给出了一个错误,并表示无法将字段强制转换为Jbutton,因为我的列表类型是Jbutton not field。这不是我的全部代码,只是其中的一部分,但所有代码都由加载面板组成,然后向面板添加一个按钮和一些标签 getContentPane().setForeground(Color.DARK_GRAY); getContentPane().setLoc

我有这个代码,我想把我的页面中的所有按钮放在arraylist中,并考虑它们的名称,如果它的名称是例如btn_2,它应该是列表的第二个元素。 它给出了一个错误,并表示无法将字段强制转换为Jbutton,因为我的列表类型是Jbutton not field。这不是我的全部代码,只是其中的一部分,但所有代码都由加载面板组成,然后向面板添加一个按钮和一些标签

getContentPane().setForeground(Color.DARK_GRAY);
getContentPane().setLocation(-405, -87);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setLayout(null);

panelPOD1 = new JPanel();
panelPOD1.setBounds(65, 13, 353, 313);
panelPOD1.setBorder(new BevelBorder(BevelBorder.RAISED, Color.DARK_GRAY, null, null, null));
getContentPane().add(panelPOD1);
panelPOD1.setLayout(null);

JPanel panel = new JPanel();
panel.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, Color.DARK_GRAY, null, null, null));
panel.setBounds(10, 11, 59, 59);
panelPOD1.add(panel);
panel.setLayout(null);

btn_1 = new JButton();
btn_1.setText("");
btn_1.setEnabled(false);
btn_1.setBorder(new RoundedBorder());
btn_1.setBounds(17, 15, 26, 24);
panel.add(btn_1);

btn_3 = new JButton("");
btn_3.setEnabled(false);
btn_3.setForeground(SystemColor.textInactiveText);
btn_3.setBackground(SystemColor.activeCaption);
btn_3.setBounds(10, 15, 26, 24);
btn_3.setBorder(new RoundedBorder());
panel1.add(btn_3);
panel.setLayout(null);

btn_5 = new JButton("");
btn_5.setEnabled(false);
btn_5.setBounds(11, 15, 26, 24);
btn_5.setBorder(new RoundedBorder());
panel_1.add(btn_5);

btn_2 = new JButton("");
btn_2.setEnabled(false);
btn_2.setBounds(12, 15, 26, 24);
btn_2.setBorder(new RoundedBorder());
panel_2.add(btn_2);

btn_4 = new JButton("");
btn_4.setEnabled(false);
btn_4.setBounds(11, 15, 26, 24);
btn_4.setBorder(new RoundedBorder());
panel_3.add(btn_4);


JPanel panel_4 = new JPanel();
panel_4.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
panel_4.setBounds(10, 81, 59, 59);
panelPOD1.add(panel_4);
panel_4.setLayout(null);

btn_6 = new JButton("");
btn_6.setEnabled(false);
btn_6.setBounds(10, 15, 26, 24);
btn_6.setBorder(new RoundedBorder());
panel_4.add(btn_6);


Integer search_index=0;
java.lang.reflect.Field[] fields;
Integer arrayIndex=0;
ArrayList<JButton> rockets;
boolean allFound=false;
while (!allFound)
{

  for (int i =0;i<fields.length;i++) 
  {
      if(fields[i].getName().equals("btn"+arrayIndex.toString()))   
      {

          rockets.add(arrayIndex,fields[i]);
      }

      if (arrayIndex==50)
      {
          allFound = true;
      }
  }
}
getContentPane().setForeground(颜色:深灰色);
getContentPane().setLocation(-405,-87);
可设置大小(假);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setLayout(null);
panelPOD1=新的JPanel();
1.立根(65,13,353,313);
panelPOD1.setBorder(新的BevelBorder(BevelBorder.凸起,颜色.深灰色,空,空,空));
getContentPane().add(panelPOD1);
panelPOD1.setLayout(空);
JPanel面板=新的JPanel();
panel.setBorder(新的SoftBevelOrder(BevelOrder.LOWERED,Color.DARK_GRAY,null,null));
小组.挫折(10、11、59、59);
panelPOD1.添加(面板);
panel.setLayout(空);
btn_1=新的JButton();
btn_1.setText(“”);
btn_1.设置启用(错误);
btn_1.新订单(新圆角边框());
btn_1.立根(17,15,26,24);
面板。添加(btn_1);
btn_3=新的JButton(“”);
btn_3.设置启用(错误);
btn_3.设置前景(SystemColor.TextInactivateText);
btn_3.挫折背景(SystemColor.activeCaption);
btn_3.立根(10,15,26,24);
btn_3.新订单(新的圆形边框());
小组1.添加(btn_3);
panel.setLayout(空);
btn_5=新的JButton(“”);
btn_5.设置启用(错误);
btn_5.立根(11,15,26,24);
btn_5.新订单(新圆边());
面板1.添加(btn_5);
btn_2=新的JButton(“”);
btn_2.设置启用(错误);
btn_2.立根(12,15,26,24);
btn_2.新订单(新圆角边框());
面板2.添加(btn_2);
btn_4=新的JButton(“”);
btn_4.设置启用(错误);
btn_4.立根(11,15,26,24);
btn_4.新订单(新圆角边框());
面板3.添加(btn_4);
JPanel panel_4=新的JPanel();
面板4.SetBeOrder(新BevelOrder(BevelOrder.LOWERED,null,null,null,null));
小组4.挫折(10,81,59,59);
panelPOD1.添加(panel_4);
面板4.设置布局(空);
btn_6=新的JButton(“”);
btn_6.设置启用(错误);
btn_6.立根(10,15,26,24);
btn_6.新订单(新的圆形边框());
面板4.添加(btn_6);
整数搜索_索引=0;
java.lang.reflect.Field[]字段;
整数arrayIndex=0;
ArrayList火箭;
布尔allFound=false;
而(!allFound)
{
对于(inti=0;i
ArrayList=newarraylist();
btn_1=新的JButton();
btn_1.setText(“”);
btn_1.设置启用(错误);
btn_1.新订单(新圆角边框());
btn_1.立根(17,15,26,24);
添加(btn_1);
面板。添加(btn_1);
btn_2=新的JButton(“”);
btn_2.设置启用(错误);
btn_2.立根(12,15,26,24);
btn_2.新订单(新圆角边框());
添加(btn_2);
面板2.添加(btn_2);
如果在布局中重新排列(=交换?)按钮,只需交换
rocket


通过这种方式,如果更改代码以在over上重用单个变量,则不需要创建单独的JButton实例。如果需要标识实例,则应该将JButton子类化并添加标识符,而不是依赖于ArryList中不可见的变量名。

与这里的其他所有人一样,我高度怀疑您应该这样处理问题,但如果您坚持,这是可行的:

final int NUMBER_OF_BUTTONS = 50;
final String PREFIX = "btn_";
Field[] fields = getClass().getDeclaredFields();
JButton[] rockets = new JButton[NUMBER_OF_BUTTONS];

for (Field field : fields) {                        
    if(field.getName().startsWith(PREFIX)) {
        int index = Integer.parseInt(field.getName().substring(PREFIX.length())) - 1;
        rockets[index] = (JButton) field.get(this);
    }           
}

我假设您的第一个按钮名为
btn_1
,因此索引为
-1

请说明为什么使用
java.lang.reflect.Field[/fields
在添加到列表时尝试键入强制转换。改用映射?您可以直接设置字段的名称(使用setName)默认情况下,您不需要将任何JComponents放入数组,也不需要从反射中放入,此代码看起来像“恐怖大厅”(抱歉):1)您使用
null
layout(始终使用LayoutManager)2)你不需要使用反射并把你的按钮存储在一个数组3中)你的循环在末端永远不会结束因为<代码> ARAYEXECUT/<代码>总是0。考虑告诉我们你想要达到什么,因为我敢肯定这可以做得更容易。
final int NUMBER_OF_BUTTONS = 50;
final String PREFIX = "btn_";
Field[] fields = getClass().getDeclaredFields();
JButton[] rockets = new JButton[NUMBER_OF_BUTTONS];

for (Field field : fields) {                        
    if(field.getName().startsWith(PREFIX)) {
        int index = Integer.parseInt(field.getName().substring(PREFIX.length())) - 1;
        rockets[index] = (JButton) field.get(this);
    }           
}