Déb*_*ora 4 java swing gradient jpanel paintcomponent
我想知道如何制作另一个JPanel中的背景渐变.在互联网上发现了很多文章,但是所有这些文章都说明了如何覆盖JPanel的paintComponent()而不是如何处理它内部的jPanel.
我使用Netbeans IDE.我创建了一个新的JPanel类,可以覆盖它的paintComponent().我有另一个jpanel(拖放到父JPanel).我想制作它的背景渐变.
这是我为父母试过的方式.有效.如何为儿童jpanel覆盖这个?
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);
}
Run Code Online (Sandbox Code Playgroud)
tra*_*god 10
如果您小心调用super.paintComponent(g),可以直接将渐变添加到面板,如下所示.
对于可用性,我会抵制试图使各个组件透明化的诱惑.另请注意,不透明度由外观和感觉控制.

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();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9972 次 |
| 最近记录: |