使用instanceof更改JLabels的颜色

时间:2017-04-03 14:30:59

标签: java swing user-interface

我正在寻找带有函数的所有JLabel s的文本颜色,因此我不必为每一个setForegroundColor使用JLabel

我目前在一个名为Main的面板中有一堆instanceof个。我做了一些研究并遇到了getComponentsmain = new JPanel(); main.setBackground(Color.red); tf_search = createTF(); l_name1 = new JLabel("Name: "+ DB.findUser(1001).returnName()); l_nick = new JLabel("Nick: " + DB.findUser(1001).returnNick()); l_style = new JLabel("Style: "); l_styleshow = new JLabel(DB.findUser(1001).returnStyle()); l_music = new JLabel("Favourite songs: "); l_musicshow1 = new JLabel(DB.findUser(1001).returnMusic1()); l_musicshow2 = new JLabel(DB.findUser(1001).returnMusic2()); l_musicshow3 = new JLabel(DB.findUser(1001).returnMusic3()); l_blank = new JLabel(""); l_blank2 = new JLabel(""); l_inst = new JLabel("Instrument: "); l_instshow = new JLabel(DB.findUser(1001).returnInst()); l_band = new JLabel("Band: "); l_bandshow = new JLabel(DB.findUser(1001).returnBand()); b_search = new JButton("Sök"); b_musicchn = new JButton("Edit Profile"); b_return = new JButton("Return to profile"); main.setLayout(new GridLayout(9,2)); main.add(l_name1); main.add(l_nick); main.add(l_style); main.add(l_styleshow); main.add(l_music); main.add(l_musicshow1); main.add(l_blank); main.add(l_musicshow2); main.add(l_blank2); main.add(l_musicshow3); main.add(l_band); main.add(l_bandshow); main.add(l_inst); main.add(l_instshow); main.add(b_search); b_search.addActionListener(new searchHandler()); main.add(b_musicchn); b_musicchn.addActionListener(new editHandler()); main.add(tf_search); main.add(b_return); b_return.addActionListener(new returnHandler()); 方法。所以我走得这么远:

JLabels

所有的小组和内容都被宣布,或者称之为什么。前“私人JLabel l_nick等”

所以我认为这可能会选择所有object MyElasticClientFactory { def fromClient(client: Client): ElasticClient = new ElasticClient { def close(): Unit = client.close() def java: Client = client override def execute[T, R, Q](request: T)(implicit executable: Executable[T, R, Q]): Future[Q] = { // TODO your logging here super.execute(request) } } 并将文本转为白色,但我的代码不起作用。这是一种合法的做事方式,你可以纠正它,还是有人知道另一种方式。提前谢谢!

注意:我是学生,这是我第一个编程年度的最终项目,所以我只想要代码种类。如果无法使用大量高级代码,请不要打字输入,即使您的帮助得到了赞赏!

3 个答案:

答案 0 :(得分:2)

不要这样做:

main.getComponents(l_label instanceof JLabel).setForegroundColor(Color.White);

改为定义List<JLabel> mylabels = ... 填充列表:

myLabels.add(l_label);
myLabels.add(l_label2);
myLabels.add(l_label3);

并为增强

做一个
for(JLabel x:myLabels){

    x.setForegroundColor(Color.White);

}

答案 1 :(得分:1)

您可以检索所有子组件,检查它们是否为JLabel,并相应地设置颜色。

    for (Component component : panel.getComponents()) {

        if (component instanceof JLabel) {

            component.setForeground(Color.WHITE);
        }

    }

答案 2 :(得分:-1)

我不知道采用过滤器参数的方法getComponents。但是你可以使用流来过滤。像这样:

Stream.of(main.getComponents()).filter(component -> component instanceOf JLabel).forEach(label -> ((JLabel)label).setForegroundColor(Color.White));