我怎样才能改变Java中的标签颜色?

我已经设置在链表标签所说的“L”和我需要改变这些标签的背景颜色。 我需要把每种颜色变化之间2 secconds差距,所以我试图用repaint方法如下,但它并没有给我所需的结果。 请能有人给我一个解决这个问题?

public static void changeColor(LinkedList l,JFrame f){ for (int i = 0; i < l.size(); i++) { try { final JLabel xx = (JLabel) l.get(i); xx.setBackground(Color.red); f.repaint(); xx.setText("B"); System.out.println(i); new thread().run(); xx.setBackground(Color.GRAY); xx.setText("A"); f.repaint(); } catch (Exception ex) { Logger.getLogger(TestView.class.getName()).log(Level.SEVERE, null, ex); } } }

--------------解决方案-------------

JLabel的是defalut non-Opaque ,甚至是你的setBackground(其他),然后在不进行定义myLabel.setOpaque(true);JLabel'area彩色的,另一种方法是使用CustomPaint的与超越控制paintComponetn()例如

我怎样才能改变Java中的标签颜色?

import java.awt.*;
import javax.swing.*;

public class LabelBackGround {

private JFrame frame;

public LabelBackGround() {
JLabel lblWest = new JLabel();
lblWest.setPreferredSize(new Dimension(50, 150));
lblWest.setOpaque(true);
lblWest.setBackground(Color.red);
JLabel lblEast = new JLabel();
lblEast.setPreferredSize(new Dimension(50, 150));
lblEast.setOpaque(true);
lblEast.setBackground(Color.red);
frame = new JFrame();
frame.add(new CustomColoredComponents(), BorderLayout.NORTH);
frame.add(new CustomColoredComponents(), BorderLayout.SOUTH);
frame.add(lblWest, BorderLayout.WEST);
frame.add(lblEast, BorderLayout.EAST);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocation(100, 100);
frame.pack();
frame.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
LabelBackGround gridBadFrame = new LabelBackGround();
}
});
}
}

class CustomColoredComponents extends JLabel {

private static final long serialVersionUID = 1L;

@Override
public Dimension getMinimumSize() {
return new Dimension(200, 20);
}

@Override
public Dimension getPreferredSize() {
return new Dimension(200, 30);
}

@Override
public void paintComponent(Graphics g) {
int margin = 10;
Dimension dim = getSize();
super.paintComponent(g);
g.setColor(Color.blue);
g.fillRect(margin, margin, dim.width - margin * 2, dim.height - margin * 2);
}
}

编辑:

并且,您张贴无效与并发性过多的问题,在摇摆,然后从所有输出BackGroung Tasks的GUI必须包装成invokeLater()在你的代码块和最后一个行代码将被revalidate ()repaint()用于填补JComponents可见Container中

三件事情:1)使用的setBackground应该导致它与新的颜色重画本身,而不调用重绘设置背景色(假设它是不透明的)。 2)我会建议使用javax.swing.Timer类此。 确保你知道这个和的区别java.util.Timer类。 3)呼叫的setBackground(空)应该恢复“默认颜色”。

分类:java的 时间:2015-03-14 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.521 (s). 10 q(s)