gpt4 book ai didi

java - 如何在java中将标签显示为框架背景?

转载 作者:行者123 更新时间:2023-12-01 11:44:24 26 4
gpt4 key购买 nike

我正在开发一个java应用程序,我需要取消装饰框架并使用图像作为背景。我使用此代码来执行此操作

 com.sun.awt.AWTUtilities.setWindowOpaque(this, false)

但是如果我使用这个字母就无法正确显示。还有其他方法可以做到这一点吗?请帮我解决这个问题,

最佳答案

您的问题比较模糊,但是,除非您使用 Java 6,否则我会避免使用 com.sun.awt.AWTUtilities.setWindowOpaque(this, false)而是使用 Java 7+ 中提供的新透明度支持。请参阅How to Create Translucent and Shaped Windows了解更多详情。

不要使用JLabel作为内容的背景,它不会根据其子组件计算其首选尺寸,而仅根据 icon 来计算。和text特性。这意味着它可以小于正确布局其子组件所需的空间。

相反,请使用自定义的 JPanel并自己绘制图像。

Boo

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Test {

public static void main(String[] args) {
new Test();
}

public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}

JLabel label = new JLabel("Boo!");
label.setForeground(Color.WHITE);
label.setHorizontalAlignment(JLabel.CENTER);
label.setFont(label.getFont().deriveFont(Font.BOLD, 128f));

JFrame frame = new JFrame("Testing");
frame.setUndecorated(true);
frame.setBackground(new Color(0, 0, 0, 0));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(new BackgroundPane());
frame.add(label);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}

public class BackgroundPane extends JPanel {

private BufferedImage background;

public BackgroundPane() {
setLayout(new BorderLayout());
try {
background = ImageIO.read(new File("Some image"));
} catch (IOException ex) {
ex.printStackTrace();
}
}

@Override
public Dimension getPreferredSize() {
Dimension size = super.getPreferredSize();
if (background != null) {
size.width = Math.max(size.width, background.getWidth());
size.height = Math.max(size.height, background.getWidth());
}
return size;
}

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (background != null) {
Graphics2D g2d = (Graphics2D) g.create();
int x = (getWidth() - background.getWidth()) / 2;
int y = (getHeight() - background.getHeight()) / 2;
g2d.drawImage(background, x, y, this);
g2d.dispose();
}
}

}

}

参见Reading/Loading an ImagePerforming Custom Painting了解更多详情

关于java - 如何在java中将标签显示为框架背景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29271596/

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