3

私は Swing JButton を持っており、プロジェクトに次のコードも使用しています。

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

1 つのボタンの背景を変更しようとすると、btnNewButton.setBackground(Color.RED);赤にならず、境界線だけが赤くなるようになりました。

UIManager.getSystemLookAndFeelClassName()残りのコンポーネント/プロジェクトを引き続き使用しながら、この背景を赤にするにはどうすればよいですか?

4

3 に答える 3

5

バグ4880747 を見てください: XP L&F: REGRESSION: setBackground on JButton sets border color in Windows XP . 評価セクションの状態:

ボタンの外観を変更すると、常に現在の L&F 実装との競合が発生する可能性があります。Windows L&F for Swing は、できるだけネイティブ ディスプレイに近づけようとします。XP では、ボタンに組み込みのビットマップ リソースを使用します。これらは、ネイティブ API と同様に色付けできません。

ボタンで setContentAreaFilled(false) を呼び出して、L&F がその装飾を描画しないようにする必要があります。これには、ボタンの opaque プロパティが false に設定されるという副作用があるため、その呼び出しに続いて setOpaque(true) を呼び出す必要があります。

これはバグではなく、クローズされます。

述べたように、setContentAreaFilled(false)そしてsetOpaque(true)トリックを行いますが、ボタンは異なって見えます.

手間をかける価値がある場合は、独自の を作成できますButtonUI。@mKorbel による便利な例を次に示します。

于 2013-04-10T20:50:33.260 に答える
1

これは、何を達成したいかによって異なります。

false を渡すこともできますがJButton#setContentAreaFilled、おそらく false を渡すことも必要です。JButton#setBorderPainted

UIManagerボタンの背景のデフォルト値を変更することもできます

于 2013-04-10T20:52:25.980 に答える
0

JButton不透明にする必要があります。

btnNewButton.setOpaque(true);

JComponent#setBackgroundOracleドキュメントのメソッドに指定されているとおり:

このコンポーネントの背景色を設定します。背景色は、コンポーネントが不透明な場合にのみ使用され、JComponent または ComponentUI 実装のサブクラスによってのみ使用されます。JComponent の直接のサブクラスは、このプロパティを尊重するために paintComponent をオーバーライドする必要があります。

このプロパティを尊重するかどうかはルック アンド フィール次第であり、無視することを選択する人もいます。

現在のルック アンド フィールはこのプロパティをサポートしていないと思います。そのため、この場合は背景色が無視されます。

于 2013-04-10T20:39:11.657 に答える