图像作为 JScrollPane 中的背景
Image as a background in JScrollPane
如何在JScrollPane中添加图片作为背景?
我试过了,但图像不显示:
BufferedImage img = null;
try {
img = ImageIO.read(new File("C:\Users\Suraj\Documents\NetBeansProjects\JavaApplication2\src\javaapplication2\images\2.jpg"));
}
catch (IOException e) {
e.printStackTrace();
}
Image imag = img.getScaledInstance(d.width, d.height, Image.SCALE_SMOOTH);
ImageIcon imageBack = new ImageIcon(imag);
FlowLayout fl = new FlowLayout();
frame.getContentPane().setLayout(fl);
fl.addLayoutComponent(null, new JLabel(imageBack));
编辑:我想在带有背景的 JScrollPane 上添加 jlabels 和 jbuttons
如果您的目标只是在 JScrollPane 中显示图像而不在 JScrollPane 中显示其他组件(例如 JTable),那么您应该:
- 通过
new ImageIcon(myImage)
用你的图像制作一个 ImageIcon
- 将该图标添加到 JLabel
- 将 JLabel 放入 JScrollPane 的视口中,这可以通过将 JLabel 传递到 JScrollPane 的构造函数中来完成。
大功告成。
如果您需要做其他事情,请更详细地描述您的问题。
例如,
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.*;
@SuppressWarnings("serial")
public class ImageInScrollPane extends JPanel {
public static final String IMAGE_PATH = "http://image.desk7.net/"
+ "Space%20Wallpapers/1422_1280x800.jpg";
private static final int PREF_W = 500;
private static final int PREF_H = 400;
public ImageInScrollPane() throws IOException {
URL imageUrl = new URL(IMAGE_PATH);
BufferedImage img = ImageIO.read(imageUrl);
Icon icon = new ImageIcon(img);
JLabel label = new JLabel(icon);
JScrollPane scrollPane = new JScrollPane(label);
setLayout(new BorderLayout());
add(scrollPane);
}
@Override
public Dimension getPreferredSize() {
if (isPreferredSizeSet()) {
return super.getPreferredSize();
}
return new Dimension(PREF_W, PREF_H);
}
private static void createAndShowGui() {
ImageInScrollPane mainPanel = null;
try {
mainPanel = new ImageInScrollPane();
} catch (IOException e) {
e.printStackTrace();
System.exit(-1);
}
JFrame frame = new JFrame("ImageInScrollPane");
frame.setDefaultCloseOperation(JFrame.DISPOSE_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();
}
});
}
}
您在评论中提问:
what if I have to add other objects like buttons?....How do I do it?
在这种情况下,我会创建一个 class 来扩展 JPanel 并通过在 paintComponent 方法覆盖中绘制它来在这个 JPanel 中显示图像(如果你搜索这个,你会发现 很多个例子,一些是我做的),然后将buttons/components添加到这个图像绘制JPanel中,然后像我对上面的JLabel所做的那样将这个JPanel添加到JScrollPane的视口中。
如何在JScrollPane中添加图片作为背景? 我试过了,但图像不显示:
BufferedImage img = null;
try {
img = ImageIO.read(new File("C:\Users\Suraj\Documents\NetBeansProjects\JavaApplication2\src\javaapplication2\images\2.jpg"));
}
catch (IOException e) {
e.printStackTrace();
}
Image imag = img.getScaledInstance(d.width, d.height, Image.SCALE_SMOOTH);
ImageIcon imageBack = new ImageIcon(imag);
FlowLayout fl = new FlowLayout();
frame.getContentPane().setLayout(fl);
fl.addLayoutComponent(null, new JLabel(imageBack));
编辑:我想在带有背景的 JScrollPane 上添加 jlabels 和 jbuttons
如果您的目标只是在 JScrollPane 中显示图像而不在 JScrollPane 中显示其他组件(例如 JTable),那么您应该:
- 通过
new ImageIcon(myImage)
用你的图像制作一个 ImageIcon
- 将该图标添加到 JLabel
- 将 JLabel 放入 JScrollPane 的视口中,这可以通过将 JLabel 传递到 JScrollPane 的构造函数中来完成。
大功告成。
如果您需要做其他事情,请更详细地描述您的问题。
例如,
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.*;
@SuppressWarnings("serial")
public class ImageInScrollPane extends JPanel {
public static final String IMAGE_PATH = "http://image.desk7.net/"
+ "Space%20Wallpapers/1422_1280x800.jpg";
private static final int PREF_W = 500;
private static final int PREF_H = 400;
public ImageInScrollPane() throws IOException {
URL imageUrl = new URL(IMAGE_PATH);
BufferedImage img = ImageIO.read(imageUrl);
Icon icon = new ImageIcon(img);
JLabel label = new JLabel(icon);
JScrollPane scrollPane = new JScrollPane(label);
setLayout(new BorderLayout());
add(scrollPane);
}
@Override
public Dimension getPreferredSize() {
if (isPreferredSizeSet()) {
return super.getPreferredSize();
}
return new Dimension(PREF_W, PREF_H);
}
private static void createAndShowGui() {
ImageInScrollPane mainPanel = null;
try {
mainPanel = new ImageInScrollPane();
} catch (IOException e) {
e.printStackTrace();
System.exit(-1);
}
JFrame frame = new JFrame("ImageInScrollPane");
frame.setDefaultCloseOperation(JFrame.DISPOSE_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();
}
});
}
}
您在评论中提问:
what if I have to add other objects like buttons?....How do I do it?
在这种情况下,我会创建一个 class 来扩展 JPanel 并通过在 paintComponent 方法覆盖中绘制它来在这个 JPanel 中显示图像(如果你搜索这个,你会发现 很多个例子,一些是我做的),然后将buttons/components添加到这个图像绘制JPanel中,然后像我对上面的JLabel所做的那样将这个JPanel添加到JScrollPane的视口中。