0

我添加了一个我想用作背景图像的图像,并且我想将 jLabels 放在它上面。所以我使用图像图标功能并显示图像,但是当我尝试在其上放置 jLabel 时,它被移到一边。我已经尝试了几个教程,它似乎可以在 youtube 上运行,但是当我尝试自己做同样的事情时,它们会被移出位置。

field.setIcon(new javax.swing.ImageIcon(getClass().getResource("/wiffleball/resources/field2.png"))); // NOI18N
4

2 回答 2

1

默认情况下JLabel没有布局管理器。标签也有默认文本定位,通常是左对齐,你需要更改所有这些默认值...

在此处输入图像描述

您可能想使用其他的布局管理器BorderLayout,但这只是一个示例......

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class SimpleLabel {

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

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

                JLabel label = new JLabel(new ImageIcon("C:\\hold\\thumbnails\\_cg_836___Tilting_Windmills___by_Serena_Clearwater.png"));
                label.setHorizontalAlignment(JLabel.CENTER);
                label.setVerticalAlignment(JLabel.CENTER);

                label.setLayout(new BorderLayout());

                JLabel child = new JLabel("Can you see me?");
                child.setForeground(Color.WHITE);
                child.setFont(label.getFont().deriveFont(Font.BOLD, 24f));
                child.setHorizontalAlignment(JLabel.CENTER);
                child.setVerticalAlignment(JLabel.CENTER);
                child.setHorizontalTextPosition(JLabel.CENTER);
                child.setVerticalTextPosition(JLabel.CENTER);
                label.add(child);

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(label);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }
}
于 2013-06-05T00:42:52.913 回答
0

我把所有东西都放在了 jPanel 上,这似乎可以做到。它只是需要一些修补。谢谢!

于 2013-06-05T00:42:28.913 回答