如何在此程序中添加图片 [英] How Can I add a picture to this program

查看:105
本文介绍了如何在此程序中添加图片的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好我想问一下,我有这个程序,它有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 Files 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆