gpt4 book ai didi

java - 使用 JLabel 绘制 JPanel 渐变背景时出现问题

转载 作者:行者123 更新时间:2023-11-30 09:55:09 24 4
gpt4 key购买 nike

我有以下代码来绘制 JPanel 的背景:

@Override
public void paintComponent(Graphics g) {
UIDefaults uid = UIManager.getDefaults();
Graphics2D g2d = (Graphics2D)g;
Dimension d = this.getSize();

g2d.setPaint(new GradientPaint(0, 0, uid.getColor("ToolBar.light"), 0, d.height, uid.getColor("ToolBar.shadow"), true));
g2d.fillRect(0, 0, d.width , d.height);

g2d.setColor(uid.getColor("ToolBar.light"));
g2d.drawLine(0, d.height-2, d.width, d.height-2);

g2d.setColor(uid.getColor("ToolBar.highlight"));
g2d.drawLine(0, d.height-1, d.width, d.height-1);
}

我在这个 JPanel 中有一个 JLabel(opaque = false),但 JLabel 的背景仍然是某种灰色。如何在此 JPanel 背景上为 JLabel 绘制一个透明背景的渐变?

下面是完整的工作示例:

DemoFrame.java:

import javax.swing.UIManager;

public class DemoFrame extends javax.swing.JFrame {

public DemoFrame() {
initComponents();
}

@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

panelHeader = new Extras.JPanelHeader();
labelTitle = new javax.swing.JLabel();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

panelHeader.setOpaque(false);
panelHeader.setPreferredSize(new java.awt.Dimension(172, 29));
panelHeader.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));

labelTitle.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
labelTitle.setText("Criar Novo Utilizador");
labelTitle.setOpaque(true);
panelHeader.add(labelTitle);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(panelHeader, javax.swing.GroupLayout.DEFAULT_SIZE, 200, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(panelHeader, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(83, Short.MAX_VALUE))
);

pack();
}// </editor-fold>

public static void main(String args[]) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception ex) {
ex.printStackTrace();
}

java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new DemoFrame().setVisible(true);
}
});
}

// Variables declaration - do not modify
private javax.swing.JLabel labelTitle;
private Extras.JPanelHeader panelHeader;
// End of variables declaration

}

JPanelHeader.java:

import java.awt.Dimension;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JPanel;
import javax.swing.UIDefaults;
import javax.swing.UIManager;

public class JPanelHeader extends JPanel {

@Override
public void paintComponent(Graphics g) {
UIDefaults uid = UIManager.getDefaults();
Graphics2D g2d = (Graphics2D)g;
Dimension d = this.getSize();

g2d.setPaint(new GradientPaint(0, 0, uid.getColor("ToolBar.shadow"), 0, d.height, uid.getColor("ToolBar.background"), false));
g2d.fillRect(0, 0, d.width , d.height);

g2d.setColor(uid.getColor("ToolBar.light"));
g2d.drawLine(0, d.height-2, d.width, d.height-2);

g2d.setColor(uid.getColor("ToolBar.highlight"));
g2d.drawLine(0, d.height-1, d.width, d.height-1);
}

}

最佳答案

您一定在使用一些奇怪的 LAF。如果是这种情况,那么应该将其张贴在您的问题中。事实上一个SSCCE应该与每个问题一起发布,以便我们可以准确地看到您在做什么。

为背景使用 alpha 值会导致问题,如 Backgrounds With Transparency 所示。 .

这是一个简单的 SSCCE,表明您无需执行任何特殊操作即可正确绘制标签:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class FaceComponent2 extends JPanel
{
protected void paintComponent(Graphics g)
{
UIDefaults uid = UIManager.getDefaults();
Graphics2D g2d = (Graphics2D)g;
Dimension d = this.getSize();

g2d.setPaint(new GradientPaint(0, 0, uid.getColor("ToolBar.light"),
0, d.height, uid.getColor("ToolBar.shadow"), true));
g2d.fillRect(0, 0, d.width , d.height);

g2d.setColor(uid.getColor("ToolBar.light"));
g2d.drawLine(0, d.height-2, d.width, d.height-2);

g2d.setColor(uid.getColor("ToolBar.highlight"));
g2d.drawLine(0, d.height-1, d.width, d.height-1);
}


public static void main(String args[])
throws Exception
{
JComponent face = new FaceComponent2();
face.setLayout( new GridLayout(0, 1) );
face.setPreferredSize( new Dimension(250, 250) );
face.add( new JLabel("Line1") );
face.add( new JLabel("Line2") );
face.add( new JLabel("Line3") );

JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add( face );
frame.pack();
frame.setLocationRelativeTo( null );
frame.setVisible( true );

}
}

关于java - 使用 JLabel 绘制 JPanel 渐变背景时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2961405/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com