- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 View 对象,它是一个 jPanel,并包含其他 jPanel,而其他 jPanel 又包含 jLabels。我想在对象上绘制渐变叠加层,使其具有漂亮的时尚外观,而不是无聊的朴素外观。
到目前为止我的尝试是:
public class InfoDisplay extends javax.swing.JPanel {
@Override
public void paintComponent(Graphics g) {
UIDefaults uid = UIManager.getDefaults();
Graphics2D g2d = (Graphics2D)g;
int w = getWidth();
int h = getHeight();
Color lightBlue = new Color(41, 117, 200);
Color darkBlue = new Color(2, 47, 106);
if (!isOpaque()) {
super.paintComponent( g );
return;
}
GradientPaint gp = new GradientPaint(0, 0, lightBlue, 0, h, darkBlue );
g2d.setPaint(gp);
g2d.fillRect( 0, 0, w, h );
setOpaque( false );
super.paintComponent( g );
setOpaque( true );
}
}
这似乎根本没有改变对象的背景。我对处理与 Gui 默认值无关的事情还很陌生。
我使用 Netbeans 中的 Gui 构建器来创建对象,因此 initComponents() 也在类中,但我只发布了与问题相关的源代码。
也许有人可以指出我正确的方向?
最佳答案
如果您希望背景 JPanel 使用渐变绘画,那么只需使用它即可。不要在代码中使用 setOpaque 和 super.paintComponent 做那些有趣的事情。例如,
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.*;
@SuppressWarnings("serial")
public class GradientPaintPanel extends JPanel {
private static final Color LIGHT_BLUE = new Color(41, 117, 200);
private static final Color DARK_BLUE = new Color(2, 47, 106);
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
GradientPaint gradPaint = new GradientPaint(0, 0, LIGHT_BLUE, 0, getHeight(), DARK_BLUE);
g2.setPaint(gradPaint);
g2.fillRect(0, 0, getWidth(), getHeight());
}
public GradientPaintPanel() {
}
private static void createAndShowUI() {
GradientPaintPanel gradPaintPanel = new GradientPaintPanel();
gradPaintPanel.setPreferredSize(new Dimension(400, 300));
JFrame frame = new JFrame("GradientPaintEg");
frame.getContentPane().add(gradPaintPanel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
createAndShowUI();
}
});
}
}
关于java - 如何在多个 jPanel 上进行 GradientPaint?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5905595/
在 Java 中是否有使用 GradientPaint 的替代方法? 基本上,当我用纯色填充应用程序中的所有矩形时,此时我的代码速度是可以接受的。 但是,一旦我开始使用 GradientPaint,某
在使用 Java 的绘画工具时,我遇到了 java.awt.GradientPaint 类,它允许在绘制形状时进行渐变着色。我决定尝试一下,在 JPanel 上绘制带有红绿渐变的填充矩形,并立即注意到
我正在尝试绘制一个从红色到蓝色的渐变矩形。我有以下代码: g2d.setPaint(new GradientPaint(0, 0, Color.RED, 1000, 1000, Color.BLUE)
我有一个 View 对象,它是一个 jPanel,并包含其他 jPanel,而其他 jPanel 又包含 jLabels。我想在对象上绘制渐变叠加层,使其具有漂亮的时尚外观,而不是无聊的朴素外观。 到
我尝试对堆叠条形图使用 GradientPaint 来突出显示所选系列,但只有 GradientPaint 的第一个 Color 是显示。 GroupedStackedBarRenderer barR
我使用 GradientPaint 类在未修饰的 Jframe 上绘制阴影在 Windows 操作系统上一切正常。但是在 Mac OS 上,当我选择 java 7/8 时,阴影比 java 6 中的阴
我是一名优秀的程序员,十分优秀!