Pertanyaan Cara membuat gradien latar belakang JPanel


Saya ingin tahu bagaimana membuat gradien latar belakang yang ada di JPanel lain. Banyak artikel yang ditemukan di internet, tetapi semuanya telah mendemostrasi bagaimana cara overover paintComponent () dari JPanel tidak bagaimana melakukannya untuk jPanel yang ada di dalamnya.
Saya menggunakan Netbeans IDE. Saya membuat kelas JPanel baru dan bisa overover paintComponent (). Saya memiliki jpanel lain di atasnya (diseret & dibuang ke induk JPanel). Saya ingin membuat gradien latar belakangnya.

Di sini adalah bagaimana saya mencoba untuk orang tua. Itu berhasil. Bagaimana saya bisa mengatasi ini untuk jpanel anak?

public void paintComponent(Graphics g) {
        Graphics2D g2d = (Graphics2D) g;
        Color color1 = getBackground();
        Color color2 = color1.darker();
        int w = getWidth();
        int h = getHeight(); 
        GradientPaint gp = new GradientPaint(
                0, 0, color1,
                0, h, color2);

        g2d.setPaint(gp);
        g2d.fillRect(0, 0, w, h);
        }

4
2017-08-31 18:35


asal


Jawaban:


Jika Anda berhati-hati untuk memohon super.paintComponent(g), Anda dapat menambahkan gradien langsung ke panel seperti yang ditunjukkan di bawah ini.

Untuk kegunaan, saya akan menahan godaan untuk mencoba membuat komponen individual transparan. Perhatikan juga itu kegelapan dikendalikan oleh Look & Feel.

GradientPanel

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

/**
* @see http://stackoverflow.com/q/12220853/230513
*/
public class GradientPanel extends JPanel {

    private static final int N = 32;

    public GradientPanel() {
        this.setBorder(BorderFactory.createEmptyBorder(N, N, N, N));
        this.add(new JLabel("Test:", JLabel.CENTER));
        this.add(new JTextField("This is a test."));
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;
        Color color1 = getBackground();
        Color color2 = color1.darker();
        int w = getWidth();
        int h = getHeight();
        GradientPaint gp = new GradientPaint(
            0, 0, color1, 0, h, color2);
        g2d.setPaint(gp);
        g2d.fillRect(0, 0, w, h);
    }

    private void display() {
        JFrame f = new JFrame("GradientPanel");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(this);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new GradientPanel().display();
            }
        });
    }
}

10
2017-08-31 20:26