Java 将JLabel放置在JLabel的顶部,图像位于
我很确定以前有人问过这个问题,但我的情况略有不同,因为我试图将一个JLabel放在一个JLabel上作为背景,我想使用JLabel显示不断变化的数字,数字需要显示在背景上,但是我有点像swing n00b,提前感谢,Jonathan如果您不完全理解您的要求,只需要在背景图像上显示文本,最好将标签放在能够绘制背景的自定义面板上 您可以享受布局管理器带来的好处,而不会造成混乱 我会从一个阅读槽开始 如果这看起来令人望而生畏,Java 将JLabel放置在JLabel的顶部,图像位于,java,swing,jpanel,jlabel,Java,Swing,Jpanel,Jlabel,我很确定以前有人问过这个问题,但我的情况略有不同,因为我试图将一个JLabel放在一个JLabel上作为背景,我想使用JLabel显示不断变化的数字,数字需要显示在背景上,但是我有点像swing n00b,提前感谢,Jonathan如果您不完全理解您的要求,只需要在背景图像上显示文本,最好将标签放在能够绘制背景的自定义面板上 您可以享受布局管理器带来的好处,而不会造成混乱 我会从一个阅读槽开始 如果这看起来令人望而生畏,JLabel实际上是一种容器,这意味着它实际上可以“包含”其他组件 示例 背
JLabel
实际上是一种容器
,这意味着它实际上可以“包含”其他组件
示例
背景窗格
public class PaintPane extends JPanel {
private Image background;
public PaintPane(Image image) {
// This is just an example, I'd prefer to use setters/getters
// and would also need to provide alignment options ;)
background = image;
}
@Override
public Dimension getPreferredSize() {
return background == null ? new Dimension(0, 0) : new Dimension(background.getWidth(this), background.getHeight(this));
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (background != null) {
Insets insets = getInsets();
int width = getWidth() - 1 - (insets.left + insets.right);
int height = getHeight() - 1 - (insets.top + insets.bottom);
int x = (width - background.getWidth(this)) / 2;
int y = (height - background.getHeight(this)) / 2;
g.drawImage(background, x, y, this);
}
}
}
用…建造的
public TestLayoutOverlay() throws IOException { // Extends JFrame...
setTitle("test");
setLayout(new GridBagLayout());
setDefaultCloseOperation(EXIT_ON_CLOSE);
PaintPane pane = new PaintPane(ImageIO.read(new File("fire.jpg")));
pane.setLayout(new BorderLayout());
add(pane);
JLabel label = new JLabel("I'm on fire");
label.setFont(label.getFont().deriveFont(Font.BOLD, 48));
label.setForeground(Color.WHITE);
label.setHorizontalAlignment(JLabel.CENTER);
pane.add(label);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
为了证明我没有偏见;),使用标签的示例
public TestLayoutOverlay() {
setTitle("test");
setLayout(new GridBagLayout());
setDefaultCloseOperation(EXIT_ON_CLOSE);
JLabel background = new JLabel(new ImageIcon("fire.jpg"));
background.setLayout(new BorderLayout());
add(background);
JLabel label = new JLabel("I'm on fire");
label.setFont(label.getFont().deriveFont(Font.BOLD, 48));
label.setForeground(Color.WHITE);
label.setHorizontalAlignment(JLabel.CENTER);
background.add(label);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
运行时:
- 从其父项中删除标签
- 添加支持层的容器
- 添加2x层,但保持Z顺序
享受。(没有提供复制粘贴的完整代码)您可以通过以下方式执行此操作:
JLabel l1=new JLabel();
JLabel l2=new JLabel();
l1.add(l2, JLabel.NORTH);
是的,这是可以做到的,但是你很难帮助你说你想要什么,而不告诉我们你做了什么,或者你到底被困在哪里。请帮助我们改进此问题,包括显示您的代码尝试,最好是。更多关于什么能帮助我们的信息,请看Jon Skeet的博客:你的问题是什么?即使你觉得这很明显,添加一个明确的问题也是值得的。而新的短名单是从Jon Skeet的博客中写出一个好问题的。什么是“将标签移除给它的父母”呢?为什么不在另一个JLabel上添加一个JLabel,因为它是完全可行的?是的,我在最后暗示过,它看起来很混乱,不是说它不能完成,但我不知道问题的背景:PThanks,我认为这将是最好的方法,你能为我提供一个代码示例plz吗?我喜欢程序员的低级笑话:)非常感谢,这是我正在开发的一个测验系统。
JLabel
与JComponent
具有相同的默认null
布局。