gpt4 book ai didi

java - 如何应用 JFrame 的背景渐变

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

我想在 JFrame 中应用渐变。我尽力而为,但遇到了一些问题。请帮助我。

在下面的代码中。我想将 pnlMain 设置为 BorderLayout,但我使用了渐变绘画,因此 BorderLayout 设置不正确。而且 graphics2d.fillRect(0, 0, width, height) 没有填充整个 pnlMain JPanel。所以请给它一些建议。

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Point;
import javax.swing.Box;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;

public class Frame extends javax.swing.JFrame {

// Getter & Setter
public Frame() {
setExtendedState(Frame.MAXIMIZED_BOTH);
setTitle("Gradient");
initComponents();
}
private void initComponents() {

menu_bar = new javax.swing.JMenuBar();
jMenu1 = new javax.swing.JMenu();
pnlMain = new JPanel();

pnlSuper = new JPanel(new BorderLayout(15,15))
{

public void paintComponent(Graphics g)
{
super.paintComponent(g);

Point point1 = new Point(10, 10);
Point point2 = new Point(
getWidth() - 10,
getHeight() - 10);
final GradientPaint gp = new GradientPaint(
point1, Color.YELLOW,
point2, new Color(255, 225, 100),
true);
final Graphics2D g2 = (Graphics2D) g;
g2.setPaint(gp);
g.fillRect(0, 0, getWidth(), getHeight());
}
};
pnlSuper.setBorder(new EmptyBorder(30,30,30,30));
pnlMain.setLayout(new BorderLayout());
pnlMain.setOpaque(false);
pnlImage = new JPanel(new BorderLayout());
pnlFooter = new JPanel(new GridLayout(1,2));

footerBox = Box.createVerticalBox();
lblBackground = new JLabel("Image");
lblBackground.setFont(new java.awt.Font("URW Bookman L", 0, 20));
lblAddress = new JLabel();
lblContactNumber = new JLabel();

lblBackground.setHorizontalAlignment(SwingConstants.CENTER);
lblAddress.setText("Address");
lblAddress.setAlignmentX(JLabel.CENTER_ALIGNMENT);
lblAddress.setFont(new java.awt.Font("URW Bookman L", 0, 20)); // NOI18N
footerBox.add(lblAddress);

lblContactNumber.setText("Contact Number ");
lblContactNumber.setFont(new java.awt.Font("URW Bookman L", 0, 20)); // NOI18N
lblContactNumber.setAlignmentX(JLabel.CENTER_ALIGNMENT);
footerBox.add(lblContactNumber);

pnlFooter.add(footerBox);
pnlImage.add(lblBackground);

pnlMain.add(pnlImage, BorderLayout.CENTER);
pnlMain.add(pnlFooter, BorderLayout.SOUTH);
pnlSuper.add(pnlMain);

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

jMenu1.setText("File");
jMenu1.setFont(new java.awt.Font("URW Bookman L", 0, 18));
jMenu1.setPreferredSize(new java.awt.Dimension(45, 25));
menu_bar.add(jMenu1);

setJMenuBar(menu_bar);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(
getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(layout
.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
.addGap(0, 1352, Short.MAX_VALUE).addComponent(pnlSuper));
layout.setVerticalGroup(layout
.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGap(0, 757, Short.MAX_VALUE).addComponent(pnlSuper));
pack();
}

public static void main(String args[]) {
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager
.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(Index.class.getName()).log(
java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(Index.class.getName()).log(
java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(Index.class.getName()).log(
java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(Index.class.getName()).log(
java.util.logging.Level.SEVERE, null, ex);
}
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Frame().setVisible(true);
}
});
}
private javax.swing.JMenu jMenu1;
private javax.swing.JToggleButton jToggleButton1;
private javax.swing.JMenuBar menu_bar;
private JLabel lblBackground;
private JPanel pnlMain;
private JPanel pnlFooter;
private JPanel pnlImage;
private JLabel lblAddress;
private JLabel lblContactNumber;
private Box footerBox;
private JPanel pnlSuper;
}

感谢阅读

最佳答案

为了看到 BG,它上面的所有组件必须是透明的。所以这个:

pnlImage = new JPanel(new BorderLayout());
pnlFooter = new JPanel(new GridLayout(1,2));

应该是:

pnlImage = new JPanel(new BorderLayout());
pnlImage.setOpaque(false);
pnlFooter = new JPanel(new GridLayout(1,2));
pnlFooter.setOpaque(false);

关于java - 如何应用 JFrame 的背景渐变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25885959/

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