Java 在Hashmap中迭代JPanel组件
我有一个JPanel组件的Hashmap,我正在尝试迭代和样式化,我以前在JPanel上用JButtons做过,但是我在获取特定于JLabel的属性时遇到了问题。我得到的代码是:Java 在Hashmap中迭代JPanel组件,java,swing,jpanel,Java,Swing,Jpanel,我有一个JPanel组件的Hashmap,我正在尝试迭代和样式化,我以前在JPanel上用JButtons做过,但是我在获取特定于JLabel的属性时遇到了问题。我得到的代码是: for (Component item : imageAreas.values()) { // Style components item.setBorder(BorderFactory...); } 问题是组件没有setBorder()属性,有没有办法将组件项强制转换为for循环中的JPa
for (Component item : imageAreas.values()) {
// Style components item.setBorder(BorderFactory...);
}
问题是组件没有setBorder()属性,有没有办法将组件项强制转换为for循环中的JPanel我尝试在所有内容前面添加(JLabel)
,但它不喜欢这样。imageAreas是hashmap
有没有办法将组件项强制转换为JPanel
以上假设Hashmap中确实有jpanel
问题是,当您可以使用包含JPanel的Hashmap时,为什么要使用包含组件的Hashmap?要创建HashMap,可以执行以下操作:
HashMap<String, JPanel> imageAreas = new HashMap<String, JPanel>();
关于发生此错误的原因,您是正确的(“组件没有setBorder()属性”),关于转换到
JPanel
,您的思路是正确的
我试着在所有东西前面添加(JPanel),但它不喜欢这样
这可能是因为数组中的某些组件不是JPanel
s,因此当您尝试将它们转换为JPanel
时,会抛出ClassCastException
。因此,您需要首先检查:
for (Component item : imageAreas.values()) {
if (item.instanceOf(JPanel.class)) {
JPanel pan = (JPanel)item;
pan.setBorder(...);
}
}
啊哈没有错误,是的,只是JPanels-谢谢!你知道我从没想过。。。为什么我不直接使用JPanels。。好问题:L-你知道我现在遇到的第二个问题吗?我的意思是键入“JLabel”而不是JPanel-typo:P
for (JPanel panel : imageAreas.values()) {
panel.setBorder(BorderFactory...);
}
for (Component item : imageAreas.values()) {
if (item.instanceOf(JPanel.class)) {
JPanel pan = (JPanel)item;
pan.setBorder(...);
}
}