Java - 在JPanel中访问JLabel

时间:2016-03-08 16:05:05

标签: java swing jpanel jlabel

我有一个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对象的循环?

谢谢, 标记

2 个答案:

答案 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