2017-02-19 2 views
0

textArea.setBackground(Color.RED); あなたがそれに特定の色を追加することができますが、私はそれにJTextAreaにグラデーションの背景を追加するには?

グラデーション色を追加したい場合は

public class IncomingTextArea extends JTextArea { 

IncomingTextArea(int width,int height){ 
    super(width,height); 
} 
@Override 
public void paintComponent(Graphics g) { 

    Graphics2D g2D = (Graphics2D) g; 

    int red = (int) Math.random() * 255; 
    int green = (int) Math.random() * 255; 
    int blue = (int) Math.random() * 255; 
    Color startColor = new Color(red, green, blue); 

    red = (int) Math.random() * 255; 
    green = (int) Math.random() * 255; 
    blue = (int) Math.random() * 255; 
    Color endColor = new Color(red, green, blue); 

    GradientPaint gradientPaint = new GradientPaint(70, 70, startColor, 150, 150, endColor); 
    g2D.**??** 
    super.paintComponent(g2D); 

} 

}

を次のようにもコードがあります私はちょうどの方法の勾配値を割り当てることができません。 井戸.paint(gradientPaint)は形や材料には効果がありますが、全体はどうですか?textArea

答えて

2

私は間違っていました.JTextAreaを拡張せず、JTextAreaを保持するJScrollPaneのJViewportを拡張し、paintComponentメソッド内に描画し、JTextAreaが非不透明であることを確認してください。

だから私はそうのようなビューポートを拡張したい:

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

import javax.swing.JViewport; 

public @SuppressWarnings("serial") class GradientViewport extends JViewport { 
    private Color c1; 
    private Color c2; 

    public GradientViewport(Color c1, Color c2) { 
     this.c1 = c1; 
     this.c2 = c2; 
    } 

    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     GradientPaint gPaint = new GradientPaint(0, 0, c1, getWidth(), getHeight(), c2, false); 
     Graphics2D g2 = (Graphics2D) g; 
     g2.setPaint(gPaint); 
     g2.fillRect(0, 0, getWidth(), getHeight()); 
    } 

} 

をもう一度、ビューポートのpaintComponentメソッド内のグラデーションを描画します。

私はそのようにようにそれを使用したい:

import java.awt.Color; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 
import javax.swing.SwingUtilities; 

@SuppressWarnings("serial") 
public class GradientTextAreaTest extends JPanel { 
    public static final Color C1 = new Color(255, 200, 200); 
    public static final Color C2 = new Color(200, 200, 255); 
    private JTextArea textArea = new JTextArea(30, 40); 

    // create the view port with colors passed into it 
    private GradientViewport viewport = new GradientViewport(C1, C2); 
    private JScrollPane scrollPane = new JScrollPane(); 

    public GradientTextAreaTest() { 
     textArea.setLineWrap(true); 
     textArea.setWrapStyleWord(true); 

     // make the JTextArea transparent 
     textArea.setOpaque(false); 

     // set the viewport's view with your JTextArea 
     viewport.setView(textArea); 

     // set the JScrollPane's viewport with our viewport object 
     scrollPane.setViewport(viewport); 

     // add the JScrollPane to our GUI 
     add(scrollPane); 
    } 

    private static void createAndShowGui() { 
     GradientTextAreaTest mainPanel = new GradientTextAreaTest(); 

     JFrame frame = new JFrame("GradientTextAreaTest"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(() -> createAndShowGui()); 
    } 

} 

またはこの表示する:

enter image description here

そうのような上記のクラスを使用します。

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Font; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 
import javax.swing.SwingUtilities; 

@SuppressWarnings("serial") 
public class GradientTextAreaTest extends JPanel { 
    public static final String TEXT = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt " 
      + "ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut " 
      + "aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu " 
      + "fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit " 
      + "anim id est laborum."; 
    public static final int FILLER = 130; 
    public static final Color C1 = new Color(255, FILLER, FILLER); 
    public static final Color C2 = new Color(FILLER, FILLER, 255); 
    private JTextArea textArea = new JTextArea(14, 30); 

    // create the view port with colors passed into it 
    private GradientViewport viewport = new GradientViewport(C1, C2); 
    private JScrollPane scrollPane = new JScrollPane(); 

    public GradientTextAreaTest() { 
     setLayout(new BorderLayout()); 
     textArea.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 32)); 
     textArea.setLineWrap(true); 
     textArea.setWrapStyleWord(true); 
     for (int i = 0; i < 10; i++) { 
      textArea.append(TEXT + "\n"); 
     } 

     // make the JTextArea transparent 
     textArea.setOpaque(false); 

     // set the viewport's view with your JTextArea 
     viewport.setView(textArea); 

     // set the JScrollPane's viewport with our viewport object 
     scrollPane.setViewport(viewport); 

     // add the JScrollPane to our GUI 
     add(scrollPane); 
    } 

    private static void createAndShowGui() { 
     GradientTextAreaTest mainPanel = new GradientTextAreaTest(); 

     JFrame frame = new JFrame("GradientTextAreaTest"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(() -> createAndShowGui()); 
    } 

} 
+0

投稿を編集しただけですが、あなたは 'QuestionMark'を記入できますか? –

+0

@ D4G4:何ですか?私は上記の答えを掲載しました。 **あなたの問題を解決する疑問符で何もできません**もう一度解決策はJTextAreaではなくJScrollPaneのビューポートをオーバーライドすることです。 –

+1

@HovercraftFullOfEelsあなたは、あなたが達成したいものに応じて、どちらかを行うことができます[例](http://stackoverflow.com/questions/13677850/add-background-image-in-jtable/13678077#13678077) 'JTable';) – MadProgrammer

0

方法を@Hovercraftでいっぱい、うなぎはかなり良いです

まあ、私は別の修正を見つけました。私が知っているヒットと裁判の

すなわち g2D.setPaint(gradientPaint); g2D.fillRect(0, 0, getWidth(), getHeight());

をいつものように長方形またはあなたの勾配を持つ他のオブジェクトをペイントして、 textArea.setOpaque(false);

種類:P

しかし、ウナギ

のおかげ@Hovercraft全
+1

' super.paintComponent'を呼び出す前か後になるのですか?テキスト領域のテキストは 'paintComponent'によってペイントされるので、注意しないとテキストを拭き取ることができます。 - [demonstrated](http://stackoverflow.com/questions/26386422/how-to-set-background画像にRGB値が150より大きい値に設定されます。これは単なるクライアントサーバーのテキストチャットアプリケーションでした。私自身のものを追加していただけです...#26391459#26391459) – MadProgrammer

+0

RGB値を150より大きく設定します。私はちょうど中間です.. So :) –

関連する問題