2013-01-16 31 views
6

私はグーグルではありますが、正解は見つかりませんでした。私はJPanelを持っており、上から下に向かって勾配を持たせたいと思っています。私はちょうど2つの色を使用するつもりです。どうすればこれを達成できますか?JPanelグラデーションの背景

+0

http://docs.oracle.com/javase/1.4.2/docs/api/java/ awt/GradientPaint.html – MikeTheLiar

+5

私は「スイングjpanelの背景色のグラデーション」のためにgoogledこれは最初のリンクです:http://www.javarichclient.com/how-to-add-a-gradient-background-to-any-jcomponent /情報を持っていると思われる –

答えて

6

あなたが行く:

import java.awt.Color; 
import java.awt.GradientPaint; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.RenderingHints; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 

public class TestPanel extends JPanel { 

    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     Graphics2D g2d = (Graphics2D) g; 
     g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); 
     int w = getWidth(); 
     int h = getHeight(); 
     Color color1 = Color.RED; 
     Color color2 = Color.GREEN; 
     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() { 
      @Override 
      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); 
      } 
     }); 
    } 
} 
+0

idは、 'setSize(..)'を呼び出すのではなく、 'JPanel'の' getPreferredSize() 'をオーバーライドし、' JFrame'で 'pack()'を呼び出すことを提案しています。 –

+0

@DavidKroukamp 'setSize画面上に何かが見えるようになっています。この場合、Panelが後で実際にLayoutManagerを設定してコンポーネントを追加することを理解しているので、 'getPreferredSize()'をオーバーライドする必要はありません。そのため、 'getPreferredSize()'はそのLayoutManagerによって計算される必要があります。任意のサイズではありません。とにかく、これはちょうどニックピッキングです、私は両方のソリューションが同じように受け入れられると信じています。 –

+0

私はLinearGradientPaintを個人的に好むが、それはニーズに依存する;) – MadProgrammer

4

ちょっとBebbieあなたはこれを使用することができます:

JPanel contentPane = new JPanel() { 
     @Override 
     protected void paintComponent(Graphics grphcs) { 
      super.paintComponent(grphcs); 
      Graphics2D g2d = (Graphics2D) grphcs; 
      g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
        RenderingHints.VALUE_ANTIALIAS_ON); 
      GradientPaint gp = new GradientPaint(0, 0, 
        getBackground().brighter().brighter(), 0, getHeight(), 
        getBackground().darker().darker()); 
      g2d.setPaint(gp); 
      g2d.fillRect(0, 0, getWidth(), getHeight()); 

     } 

    }; 

希望助けています。 することもできますバックより多くの助けのために、このarticalへ: ここGradient background to any jcomponent

+0

私はBSにこれを呼び出します。ソースにリンクするには正直で十分です。しかし、ソースは正しいので、間違った方法で変更しました。ヒント: 'JComponent.setOpaque(false);は重要な要素であり、' super.paintComponent(grphcs); 'は最後の呼び出しである必要があります。さもなければ、あなたのコードは全ての 'JComponent'オブジェクトで動作しませんし、将来の変更に関しても堅牢ではありません。しかし、ポインタのおかげで。 –

関連する問題