2
你好我正在嘗試創建一個Java遊戲,並且需要爲我的標籤添加一些效果。我有以下問題如何將淡入/淡出效果添加到JLabel
- 如何將淡入/淡出效果添加到我的標籤。
- 我有一個JLabel,但我需要一個形狀,可能是矩形或雲形狀。我怎樣才能做到這一點?
你好我正在嘗試創建一個Java遊戲,並且需要爲我的標籤添加一些效果。我有以下問題如何將淡入/淡出效果添加到JLabel
您可以使用AlphaComposite
更改組件的opactiy水平...
現在,有小聰明使用定時器,可以讓標籤淡入和淡出或者乾脆控制不透明度,請你......
public class TestFadeLabel {
public static void main(String[] args) {
new TestFadeLabel();
}
public TestFadeLabel() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException ex) {
} catch (InstantiationException ex) {
} catch (IllegalAccessException ex) {
} catch (UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new MainPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class MainPane extends JPanel {
private float direction = -0.05f;
private FadeLabel label = new FadeLabel();
public MainPane() {
setLayout(new BorderLayout());
JLabel background = new JLabel();
background.setLayout(new GridBagLayout());
try {
background.setIcon(new ImageIcon(ImageIO.read(getClass().getResource("/Storm.jpg"))));
} catch (Exception e) {
e.printStackTrace();
}
add(background);
label = new FadeLabel();
background.add(label);
Timer timer = new Timer(100, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
float alpha = label.getAlpha();
alpha += direction;
if (alpha < 0) {
alpha = 0;
direction = 0.05f;
} else if (alpha > 1) {
alpha = 1;
direction = -0.05f;
}
label.setAlpha(alpha);
}
});
timer.setRepeats(true);
timer.setCoalesce(true);
timer.start();
}
}
public class FadeLabel extends JLabel {
private float alpha;
private BufferedImage background;
public FadeLabel() {
try {
background = ImageIO.read(getClass().getResource("/Cloud.png"));
} catch (Exception e) {
}
setText("Hide and go seek");
setHorizontalAlignment(CENTER);
setVerticalAlignment(CENTER);
setAlpha(1f);
}
public void setAlpha(float value) {
if (alpha != value) {
float old = alpha;
alpha = value;
firePropertyChange("alpha", old, alpha);
repaint();
}
}
public float getAlpha() {
return alpha;
}
@Override
public Dimension getPreferredSize() {
return background == null ? super.getPreferredSize() : new Dimension(background.getWidth(), background.getHeight());
}
@Override
public void paint(Graphics g) {
// This is one of the few times I would directly override paint
// This makes sure that the entire paint chain is now using
// the alpha composite, including borders and child components
Graphics2D g2d = (Graphics2D) g.create();
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, getAlpha()));
super.paint(g2d);
g2d.dispose();
}
@Override
protected void paintComponent(Graphics g) {
// This is one of the few times that doing this before the super call
// will work...
if (background != null) {
int x = (getWidth() - background.getWidth())/2;
int y = (getHeight() - background.getHeight())/2;
g.drawImage(background, x, y, this);
}
super.paintComponent(g);
}
}
}
+1個不錯的例子:-) – kleopatra
JLabel的是透明的 – mKorbel
我看不到邊框它。也許背景顏色是相同的。我將檢查 –
試試['AlphaTest'](http://stackoverflow.com/a/2234020/230513)或['FlashTest'](http://stackoverflow.com/a/2124507/230513)。 – trashgod