5

私はその上に濃い灰色JPanelを持ってJLabelいます。new Color(0, 0, 0, .5f)の背景に(透明)を設定JLabelし、ボタンを使ってテキストを数回変更します。問題は、テキストが変更されるたびに、以前のテキストがまだ新しいテキストの後ろに残っていることです。テキストを「123456789」から「1234567」、「12345」、「123」に変更します。スクリーンショットは次のとおりです。

代替テキスト

この「影」を取り除くにはどうすればよいですか?

4

3 に答える 3

6

JLabelが付いたダークグレーのJPanelがあります。新しいColor(0、0、0、.5f)(透明)を設定しました

Swingは透明な背景をサポートしていません。

Swingは、コンポーネントが次のいずれかであることを想定しています。

  1. 不透明-これは、コンポーネントがカスタムペイントを実行する前に、最初に背景全体を不透明な色で再ペイントすることを意味します。
  2. 完全に透明-この場合、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を確認できます。

于 2011-01-04T06:23:50.617 に答える
3

この関連するJPanel半透明にします。

于 2011-01-05T02:26:10.567 に答える
2

これを試してみてください、多分それはあなたの問題を解決するでしょう: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
}
于 2011-01-05T11:12:57.830 に答える