gpt4 book ai didi

java - 使用 JLabel 修复 JScrollPane

转载 作者:行者123 更新时间:2023-12-01 21:19:03 25 4
gpt4 key购买 nike

为了添加背景图像,我使用 JLabels 而不是 JPanel 。

    JFrame frame=new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel label=new JLabel(new ImageIcon("bg.png"));
label.setLayout(new BoxLayout(label, BoxLayout.Y_AXIS));
for(int i=0;i<20;i++)
label.add(new JLabel(i.toString()));
frame.add(label);

这里的问题是,只会显示适合背景图像的组件(在我的示例中,仅显示前 10 个 JLabels)

我尝试使用 JScrollPane

    JScrollPane scroll=new JScrollPane(l);
for(int i=0;i<20;i++)
label.add(new JLabel(i.toString()));
frame.add(scroll);

但变化不大,所以我尝试使用 JPanel

    JPanel panel=new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
JScrollPane scroll=new JScrollPane(panel);
for(int i=0;i<20;i++)
panel.add(new JLabel(i.toString()));
label.add(scroll);
frame.add(label);

所以我让 JScrollPane 正常工作,但 JPanel 覆盖了背景图像

我该怎么办?

以下是将 JLabels 添加到标签的结果:

enter image description here

将它们添加到滚动后的结果:

enter image description here

setOpaque(false) 添加到 JPanel 后:

enter image description here

最佳答案

您可以将图像添加为 JPanelpaintComponent() 方法的一部分,然后在其上方添加标签,然后将该 Pane 放入 JScrollPane 最后将其添加到JFrame中,例如:

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;

public class PanelWithBackgroundImage {

private JFrame frame;
private JPanel pane;
private Image img;
private JScrollPane scroll;

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
new PanelWithBackgroundImage().createAndShowGui();
}
});
}

public void createAndShowGui() {
frame = new JFrame("JFrame with bg example");
try {
img = ImageIO.read(new FileInputStream("/home/jesus/Pictures/tokyo.jpg"));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
pane = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(img, 0, 0, getWidth(), getHeight(), this);
}
};

pane.setLayout(new BoxLayout(pane, BoxLayout.PAGE_AXIS));

for (int i = 0; i < 20; i++) {
pane.add(new JLabel("label " + i));
}

scroll = new JScrollPane(pane);

frame.add(scroll);
frame.setSize(frame.getPreferredSize());
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

输出如下:

enter image description here enter image description here

如果您希望 JLabels 居中,您可以更改 for 循环:

for (int i = 0; i < 20; i++) {
JLabel label = new JLabel("label " + i);
label.setAlignmentX(Component.CENTER_ALIGNMENT);
pane.add(label);
}

看起来应该类似于:

enter image description here

<小时/>

注意:

您可以复制粘贴上面的代码,它应该可以工作,只需更改图像路径,该代码称为 Minimal, Complete and Verifiable Example (MCVE) ,下次,请发布一个演示您所尝试过的内容,而不仅仅是其中的一部分,这样您将获得更多、更好、更快的答案。帮助我们帮助您! :)

关于java - 使用 JLabel 修复 JScrollPane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39476005/

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