私はその上に濃い灰色JPanel
を持ってJLabel
います。new Color(0, 0, 0, .5f)
の背景に(透明)を設定JLabel
し、ボタンを使ってテキストを数回変更します。問題は、テキストが変更されるたびに、以前のテキストがまだ新しいテキストの後ろに残っていることです。テキストを「123456789」から「1234567」、「12345」、「123」に変更します。スクリーンショットは次のとおりです。
この「影」を取り除くにはどうすればよいですか?
私はその上に濃い灰色JPanel
を持ってJLabel
います。new Color(0, 0, 0, .5f)
の背景に(透明)を設定JLabel
し、ボタンを使ってテキストを数回変更します。問題は、テキストが変更されるたびに、以前のテキストがまだ新しいテキストの後ろに残っていることです。テキストを「123456789」から「1234567」、「12345」、「123」に変更します。スクリーンショットは次のとおりです。
この「影」を取り除くにはどうすればよいですか?
JLabelが付いたダークグレーのJPanelがあります。新しいColor(0、0、0、.5f)(透明)を設定しました
Swingは透明な背景をサポートしていません。
Swingは、コンポーネントが次のいずれかであることを想定しています。
このsetOpaque(...)
メソッドは、コンポーネントの不透明なプロパティを制御するために使用されます。
いずれの場合も、これにより、ペイントアーティファクトが削除され、カスタムペイントを適切に実行できるようになります。
透明度を使用する場合は、背景がクリアされていることを確認するために、自分でカスタムペイントを行う必要があります。
パネルのカスタムペイントは次のようになります。
JPanel panel = new JPanel()
{
protected void paintComponent(Graphics g)
{
g.setColor( getBackground() );
g.fillRect(0, 0, getWidth(), getHeight());
super.paintComponent(g);
}
};
panel.setOpaque(false); // background of parent will be painted first
透過性を使用するすべてのコンポーネントに同様のコードが必要になります。
または、上記の作業を行う任意のコンポーネントで使用できるカスタムクラスのBackgroundWithTransparencyを確認できます。
この関連する例もJPanel
半透明にします。
これを試してみてください、多分それはあなたの問題を解決するでしょう:actionPeroformedで。
public void actionPerformed(ActionEvent e) {
final JLabel tmpLabel = new JLabel(value[++i]); //change text
label.setFont(new Font("Times New Roman", 1, 36));
label.setForeground(new Color(255, 255, 255));
label.setBackground(new Color(0, 0, 0, .5f));
label.setHorizontalAlignment(SwingConstants.CENTER);
label.setOpaque(true);
label.setBounds(10, 10, 270, 70);
label = tmpLabel; //replace the entire label with a new label
}