我有一个名为JPanel且具有100个panelCreatePuzzleJButton
我用了

Component[] cells = panelCreatePuzzle.getComponents();


获取所有按钮的数组。现在,我要打印每个按钮的文本。我不知道该怎么做。我尝试了以下方法:

for (Component cell:cells){
    System.out.println(cell.toString());
}


哪个会打印包含文本的内容:
javax.swing.JButton[,321,321,30x30(...),text=here is the text,defaultCapable=true]
我当然可以从此字符串中提取它,但是有没有更直接的方法让我得到文本而没有其他内容呢?

最佳答案

有更好的方法来实现您的目标,但是...

for (Component cell:cells){
    if (cell instanceof JButton) {
        JButton btn = (JButton)cell;
        String text = btn.getText();
    }
}


基本上,您需要确定该组件是否实际上是JButton,如果是,则可以安全地对其进行强制转换并使用它。

这是有限的,有点蛮力。更好的方法可能是提供一个getter,该getter返回代表单元格的按钮数组(而不是查看所有按钮,其中可能包含您不想要的东西)。

不过,也许最好的解决方案是使用某种表示当前状态的模型,然后将其用于通过UI进行显示并以您想要的任何形式以分离的方式进行操作。

这涉及很多概念,包括“模型-视图-控制器”和“观察者模式”,您应该花一些时间来研究和学习这些概念。

09-30 17:51
查看更多