我有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)。 该怎么做??
答案 0 :(得分:1)
您真正想要做的是将mydialog
传递给一个方法,该方法将找到其中包含的所有JButton。这是一种方法,如果您传入Container
(JDialog
是Container
)和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....
}
}