gpt4 book ai didi

java - 如何在 JPanel.getComponents() 内循环时获取 JButton 属性

转载 作者:行者123 更新时间:2023-12-02 04:44:29 25 4
gpt4 key购买 nike

我有一个 JPanel,其中填充了 JButton。

void addMealsMenuBarTitles() {

JToggleButton test;
int i=0;

for (Categoria c: categories.categorias) {
test = new JToggleButton(c.categoria);
test.setForeground(Color.white);
test.setBackground(new Color(52, 152, 219));
test.setSize(new Dimension(menuMealsBar.getWidth()/categories.categorias.size(), menuMealsBar.getHeight()));
test.setLocation(i++*(test.getWidth()), 0);
menuMealsBar.add(test);
}

}

我想要做的是在循环访问 JPanel 的组件时访问 JButton 的属性(边框)

void addClickEventCategories() {
for (Component jtb: menuMealsBar.getComponents())

jtb.addMouseListener(new MouseListener() {

@Override
public void mouseClicked(MouseEvent e) {
//jtb.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.white));
}

@Override public void mousePressed(MouseEvent e) {}

@Override public void mouseReleased(MouseEvent e) {}

@Override public void mouseEntered(MouseEvent e) {}

@Override public void mouseExited(MouseEvent e) {}
});
}

我收到的错误是组件没有 BorderProperty(显然)...我怎样才能解决这个问题?

最佳答案

你可能应该使用更像......的东西

for (Component comp: menuMealsBar.getComponents()) {
if (comp instanceof JToggleButton) {
JToggleButton jtb = (JToggleButton)comp;

因为您不应该对容器实际包含的内容做出假设(很多时候您会感到惊讶;))

另一种解决方案可能是在 mouseClicked 方法中执行类似的操作

@Override
public void mouseClicked(MouseEvent e) {
Component comp = e.getComponent();
if (comp instanceof JToggleButton) {
JToggleButton jtb = (JToggleButton)comp;
jtb.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.white));
}
}

关于java - 如何在 JPanel.getComponents() 内循环时获取 JButton 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29786549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com