グラデーションの背景色にGradientPaintを使用すると、特に特定のサイズでは必ずしも満足できるとは限りません。たとえば、次のコード:
public class TestPanel extends JPanel {
protected void paintComponent( Graphics g ) {
Graphics2D g2d = (Graphics2D) g;
int w = getWidth();
int h = getHeight();
Color color1 = Color.BLACK;
Color color2 = Color.GRAY;
GradientPaint gp = new GradientPaint(0, 0, color1, 0, h, color2);
g2d.setPaint(gp);
g2d.fillRect(0, 0, w, h);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JFrame();
TestPanel panel = new TestPanel();
frame.add(panel);
frame.setSize(200,200);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
以下を生成します。
サイクリックバージョンはそれよりもさらに悪く見えます:
グラデーションをより滑らかに見せるためにどうすればよいですか(どちらの場合も)?
編集:
それは(少なくとも部分的に)モニターの問題のようです。グラデーションの色は、ネットブック(1024 x 600、True Color 32ビット)ではひどく見えますが、デスクトップPC(1280 x 1024、True Color 32ビット)でははるかに見栄えがします。しかし、デスクトップのモニターを使用しても、結果はまだそれほどスムーズではありません。
どちらもJavaバージョン6アップデート33を使用しています。
それは、アプリケーションがより高い解像度で表示される場合にのみグラデーションの背景を使用する必要があることを意味しますか?
編集2:
とにかく、同様の問題に直面している人やこれに興味がある人にとって、グラデーションカラーをより滑らかに見せるための唯一の解決策は、解像度を高くすることだと思います(もちろん、モニターがすでにトゥルーカラーに設定されていると仮定します)-これは実際にはそうではありません解決策。コメントで言ったように、単純な黒から灰色へのグラデーションカラーには1024 x 600の解像度で十分だと思いましたが、私は間違っていたようです。同じコードを、より高い解像度をサポートするモニターを備えたコンピューターで実行すると、デスクトップのモニターである1280 x 1024のように、グラデーションがより良く見えます。残念ながら、より良い解像度のオプションはありませんが、さらにスムーズに見えると思います。また、アップロードした2つの画像(ネットブックから取得)をより良いモニターで表示すると、これらの同じ画像がより滑らかに見えることに気付きました...
解決策がないので、常に滑らかに見える特定のグラデーションステップを使用する唯一の方法(低解像度では見栄えが悪いように見える黒から灰色のように)は、GUIプログラムで解像度をテストすることだと思います起動して適切なグラデーションを表示することを選択しますが、それが価値があるかどうかはわかりません。そして、より少ない勾配ステップを使用することは、妥協点にすぎません。
より多くの/より良い応答がないため、私は答えとして事前にディザリングされた画像の使用を受け入れました。