考虑到Jbuttons的名称,我如何将其放入数组列表中?



我有这个代码,我想把所有的按钮在我的页面在数组列表中考虑他们的名字,如果它的名字是例如btn_2,它应该是列表的第二个元素。它给出了一个错误,说不能将字段转换为Jbutton,因为我的列表类型是Jbutton不是字段。这不是我所有的代码,只是其中的一些,但所有的代码包括添加面板,然后添加一个按钮面板和一些标签。

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

和这里的其他人一样,我非常怀疑你是否应该这样处理问题,但如果你坚持,这是可行的:

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

ArrayList<JButton> rockets = new ArrayList<JButton>();
btn_1 = new JButton();
btn_1.setText("");
btn_1.setEnabled(false);
btn_1.setBorder(new RoundedBorder());
btn_1.setBounds(17, 15, 26, 24);
rockets.add(btn_1);
panel.add(btn_1);
btn_2 = new JButton("");
btn_2.setEnabled(false);
btn_2.setBounds(12, 15, 26, 24);
btn_2.setBorder(new RoundedBorder());
rockets.add(btn_2);
panel_2.add(btn_2);

如果你重新安排(=swap?)按钮在你的布局,你只需交换项目在rocket

这样,如果您更改代码以重复使用单个变量,则不需要创建JButton的单独实例。如果您需要标识一个实例,您应该继承JButton并添加一个标识符,而不是依赖于在ArryList中不可见的变量名。

相关内容

  • 没有找到相关文章