我有一个GUI,用于保存包含与此组件相关的组件和标签的面板。标签是创建的,永远不会改变,所以目前我只需要在JPanel.add()
方法中使用它们的构造函数。
//add label
toServerPanel.add(new JLabel("Your Message"), BorderLayout.NORTH);
//add component
toServerPanel.add(toServer, BorderLayout.SOUTH);
这很好用,它们可以作为匿名对象使用,但我现在想要更改应用程序中部分或全部标签的文本颜色。看到它们是匿名对象,它们的变量名称无法访问,但同时我不想创建无限的JLabel
变量。
在当前情况下,是通过检查JLabel
内的对象来访问JPanel
对象的方法或函数吗?
或者,是否存在某种可能影响GUI上所有JLabel
对象的循环?
谢谢, 标记
答案 0 :(得分:6)
您可以遍历Panel的所有组件:
for (Component jc : toServerPanel.getComponents()) {
if ( jc instanceof JLabel ) {
// do something
}
}
修改强>
这是我创建和测试的最小工作示例。单击按钮时,将随机分配两个JLabel的颜色:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
public class ComponentTest extends JFrame implements ActionListener {
private JPanel mainPanel;
private Random r;
public ComponentTest() {
super("TestFrame");
r = new Random();
mainPanel = new JPanel(new BorderLayout());
mainPanel.add(new JLabel("I'm a Label!"), BorderLayout.NORTH);
mainPanel.add(new JLabel("I'm a label, too!"), BorderLayout.CENTER);
JButton triggerButton = new JButton("Click me!");
triggerButton.addActionListener(this);
mainPanel.add(triggerButton, BorderLayout.SOUTH);
setContentPane(mainPanel);
this.pack();
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
Color c = new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256));
for (Component jc : mainPanel.getComponents()) {
if (jc instanceof JLabel) {
JLabel label = (JLabel) jc;
label.setForeground(c);
}
}
}
public static void main(String[] args) {
new ComponentTest();
}
}
答案 1 :(得分:0)
如果您的JLabel
是面板中唯一的一个组件,您可以执行以下操作:
JLabel lbl = (JLabel)toServerPanel.getComponent(0);
句柄lbl
。