如何在java中检索面板组件的值

时间:2013-05-31 19:11:13

标签: java swing jbutton jdialog

我有jdialog。我在jdialog的jpanel中添加了50个按钮。 现在我想获取button.setText()设置的按钮值 现在我的代码看起来像这样

Component[] all_comp=mydialog.getComponents();  
for(int i=0;i<=all_comp.length;i++)
        {
Container ct=all_comp[i].getParent();
String panel_name=ct.getName();
        }

我尽力找出所有可能的方法,比如获取组件类的所有其他功能。 但没有结果。 现在我想获得按钮的值。(如button.getText)。 该怎么做??

2 个答案:

答案 0 :(得分:1)

您真正想要做的是将mydialog传递给一个方法,该方法将找到其中包含的所有JButton。这是一种方法,如果您传入ContainerJDialogContainer)和List,它将填满List所有无论您如何添加JButtons

JDialog都会JButtons
private void getJButtons(Container container, List<JButton> buttons) {
  if (container instanceof JButton) {
    buttons.add((JButton) container);
  } else {
    for (Component component: container.getComponents()) {
      if (component instanceof Container) {
        getJButtons((Container) component, buttons);
      }
    }
  }
}

基本上,此方法会查看传入的Container是否为JButton。如果是,则将其添加到List。如果不是,那么它会查看Container的所有子项,并使用Container递归调用getJButtons。这将搜索整个UI组件树,并将List填满所有JButtons

创建一个List并将其传递给getButtons方法有点难看,所以我们将创建一个看起来更好的包装器方法

public List<JButton> getJButtons(Container container) {
  List<JButton> buttons = new ArrayList<JButton>();
  getJButtons(container, buttons);
  return buttons;
}

这种方便的方法只是为您创建List,将其传递给我们的递归方法,然后返回List

现在我们有了递归方法和方便方法,我们可以调用方便方法来获取所有JButton的列表。之后,我们只需遍历列表中的项目,然后拨打getText()或其他您想要对按钮执行的操作:

for (JButton button: getJButtons(mydialog)) {
  String text = button.getText();
  ...
}

答案 1 :(得分:1)

您必须检查当前组件是否为按钮。如果是,请将其转换为按钮并调用其getText()

Component[] all_comp=mydialog.getComponents();  
for(int i=0;i<=all_comp.length;i++) {
    if (all_comp[i] instanceof Button) { 
        String text = ((Button)all_comp[i]).getText();
        // this is the text. Do what you want with it....
    }
}