我正在使用Netbeans 8.0,我正在尝试为Java程序创建图形界面。我有一个需要滚动条的大背景图像(例如.png,2000x1500像素),我想在背景图像的顶部放置多个文本标签。
换句话说,我试图做的是将JLabel(文本)放在另一个JLabel(图像)的顶部,并将整个事物包含在JScrollPane中,like this。
我尝试了很多不同的布局(包括空布局和免费设计)但没有成功。 Netbeans只允许我将一个JLabel包含在JScrollPane中,但不能同时包含两者。我使用的是正确的方法吗?
答案 0 :(得分:4)
如果您希望将一个标签粘贴在另一个标签上,则为背景标签指定布局并将叠加JLabel添加到其上。
例如:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.*;
public class OverlayingLabels extends JPanel {
private static final String IMAGE_PATH = "https://duke.kenai.com/italian/BouncingDuke.gif";
public OverlayingLabels() {
setLayout(new BorderLayout());
try {
URL imageUrl = new URL(IMAGE_PATH);
BufferedImage image = ImageIO.read(imageUrl);
ImageIcon icon = new ImageIcon(image);
JLabel bigLabel = new JLabel(icon);
bigLabel.setLayout(new FlowLayout());
JLabel littleLabel = new JLabel("Little Label");
littleLabel.setFont(littleLabel.getFont().deriveFont(Font.BOLD, 36));
littleLabel.setForeground(Color.YELLOW);
// ****** here we add the little label to the big label ******
bigLabel.add(littleLabel);
JScrollPane scrollPane = new JScrollPane(bigLabel);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
int width = bigLabel.getPreferredSize().width;
int height = bigLabel.getPreferredSize().height / 2;
scrollPane.getViewport().setPreferredSize(new Dimension(width, height));
add(scrollPane);
} catch (IOException e) {
e.printStackTrace();
}
}
private static void createAndShowGui() {
OverlayingLabels mainPanel = new OverlayingLabels();
JFrame frame = new JFrame("OverlayingLabels");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}