如何在此程序中添加图片 [英] How Can I add a picture to this program
问题描述
大家好我想问一下,我有这个程序,它有6个按钮,每个都会显示不同的东西,但我想知道我怎么能让它显示一个图片,当我点击图片1也应该在哪里这些图片被定位所以程序知道在哪里找到它们?
谢谢希望你能提供帮助:
p.s.我使用netbeans
Hello everyone i wanted to ask, i have this program and it has 6buttons each going to show something different, but i wanted to know how can i make it show a picture when i click "Picture 1" also where should those pictures be located so the program knows where to find them? Thanks hope you can help: p.s. i use netbeans
import java.awt.Toolkit;
import java.awt.Dimension;
import java.awt.Container;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Gui {
static JFrame aWindow = new JFrame("This Is Me:");
public static void main(String[] args) {
int windowWidth = 600;
int windowHeight = 500;
aWindow.setBounds(500,500, windowWidth, windowHeight);
aWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
FlowLayout flow = new FlowLayout();
Container content = aWindow.getContentPane();
content.setLayout(flow);
for(int i = 1; i <= 5; i++) {
content.add(new JButton("Picture " + i));}
String path = "__2 copy.jpg";
aWindow.setVisible(true);
}
}
推荐答案
当我点击图片1时如何让它显示图片?
how can i make it show a picture when i click "Picture 1"?
你需要先附上按钮的 ActionListener
。在 actionPerformed
方法中,您需要加载图像。
You need to first attach a ActionListener
to the button. Within the actionPerformed
method you then need to load the image.
加载图像的最佳方法是使用 ImageIO
API。如何实现这一点取决于图像的存储方式。
The best way to load images is using the ImageIO
API. How this is achieved depends on how the images are stored.
如果图像存储在应用程序Jar(捆绑资源,见下文)中,您可以使用类似的东西。 ..
If the images are stored within the application Jar (bundled resources, see below), you would use something like...
ImageIO.read(getClass().getResource("/path/to/image.jpg");
如果他们存储在外部......
If they stored externally...
ImageIO.read(new File("relative/path/to/image.jpg");
加载图像后,您可以使用 ImageIcon
来包装由 ImageIO
并将其应用于 JLabel
。
Once the image is loaded, you can use an ImageIcon
to wrap the image loaded by ImageIO
and apply it to a JLabel
.
请参阅...
- How to write an Action Listener
- Reading/Loading an Image
- How to use Labels
有关详细信息。
当然,您可以创建自己的图像组件来显示图像,但这是一个相当先进的主题,我不确定这是什么你想要的。
You could, of course, create your own image component that displayed the image, but that's a reasonably advance topic and I'm not sure if that's what you want.
这些图片应该放在哪里以便程序知道
在哪里找到它们?
where should those pictures be located so the program knows where to find them?
这取决于。您是希望图像始终可用于程序还是要更改它们?
This depends. Do you want the images to ALWAYS be available to the program or do you want to change them?
如果图像不太可能经常更改,则可以嵌入它们作为Jar文件的内部资源。如何完成这取决于您构建应用程序的方式,但一般而言,您在项目源中创建一个目录并将图像放在那里。然后,您可以通过类加载器引用图像。
If the images aren't likely to change very often, you can embed them as internal resources to the Jar file. How this is done depends on how you are building the application, but in general terms, you create a directory within your projects source and place the images there. You can then reference the images via the Classloader.
如果您希望能够快速更改图像(而无需重新构建应用程序),那么我会将它们存储在与应用程序Jar相同的目录中。这将允许您从相对位置引用它们作为文件
s(即新文件(Image.jpg);
)
If you want the ability to change the images quickly (and without needing to re-build the application), then I would store them in the same directory as the application Jar. This would allow you to reference them as File
s from a relative location (ie new File("Image.jpg");
)
更新为示例
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class TestImages {
public static void main(String[] args) {
new TestImages();
}
public TestImages() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
private JLabel lblPic;
public TestPane() {
setLayout(new BorderLayout());
JPanel buttons = new JPanel(new FlowLayout(FlowLayout.CENTER));
JButton btnFile = new JButton("Load from file");
JButton btnResource = new JButton("Load from resource");
buttons.add(btnFile);
buttons.add(btnResource);
btnFile.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
BufferedImage image = ImageIO.read(new File("Pony01.png"));
lblPic.setIcon(new ImageIcon(image));
} catch (Exception exp) {
JOptionPane.showMessageDialog(TestPane.this, "Failed to load image", "Fail", JOptionPane.ERROR_MESSAGE);
exp.printStackTrace();
}
}
});
btnResource.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
BufferedImage image = ImageIO.read(getClass().getResource("/Pony02.png"));
lblPic.setIcon(new ImageIcon(image));
} catch (Exception exp) {
JOptionPane.showMessageDialog(TestPane.this, "Failed to load image", "Fail", JOptionPane.ERROR_MESSAGE);
exp.printStackTrace();
}
}
});
lblPic = new JLabel();
lblPic.setVerticalAlignment(JLabel.CENTER);
lblPic.setHorizontalAlignment(JLabel.CENTER);
add(lblPic);
add(buttons, BorderLayout.NORTH);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(300, 300);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
g2d.dispose();
}
}
}
显然,你会需要提供自己的图像。嵌入式资源应该存在于源代码的顶级文件夹中(通常称为默认
包)
You'll, obviously, need to supply your own images. The embedded resource should life in the top level folder of your source (commonly known as the default
package)
这篇关于如何在此程序中添加图片的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!