Java 如何在JPanel.getComponents()内循环时获取JButton属性
我有一个JPanel,里面装满了JButtonsJava 如何在JPanel.getComponents()内循环时获取JButton属性,java,swing,jpanel,components,jbutton,Java,Swing,Jpanel,Components,Jbutton,我有一个JPanel,里面装满了JButtons void addMealsMenuBarTitles() { JToggleButton test; int i=0; for (Categoria c: categories.categorias) { test = new JToggleButton(c.categoria); test.setForeground(Color.white); test.setBack
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的组件时访问JButtons的属性(边框)
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));
}
}
您可以从MouseeEvent获取组件:
@Override
public void mouseClicked(MouseEvent e) {
JToggleButton button = (JToggleButton)e.getSource();
button.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.white));
}
我尝试过这样做:for(Component jtb:(JToggleButton[])menuMealsBar.getComponents()),但没有成功。它在运行时崩溃1。如果我这样做,jtb将不会更改comp,因为我只是实例化一个新对象。2.我无法在内部实例化变量,如果没有创建新对象,则根据您对对象类型的调查,您只需从
组件
转换为JToggleButton
。…Jezz!!成功了!谢谢(我怎样才能把你标记为答案?我对这个论坛有点陌生)。。。也许你能帮我解开最后一个“谜”。我希望当我点击按钮时,它会将其边框更改为白色,但我希望其他人也禁用其边框。有点像一个收音机按钮,这有点难,因为你需要知道组中的所有按钮。您可以使用按钮组
,监视按钮的选定状态
,并根据选择的按钮进行更改。k!我无法使用抽象按钮,所以。。。我发现这是一种迂回的方法,不是最好的!但它确实有效:我喜欢它@camickr。。。我应该把这个超控装置放在哪里?JPanel?
@Override
public void mouseClicked(MouseEvent e) {
JToggleButton button = (JToggleButton)e.getSource();
button.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.white));
}