在 JLabel 中向 JPanel 添加图像

Adding an image to JPanel within JLabel

我是 Java 的新手,我正在尝试制作一个 JFrame,其中有一个 JPanel,一个图像在 JLabel 中。然后通过将 JLabel 添加到 JPanel 它一定可以正常工作吗?但是,这是在 docs.oracle.com...

上完成的方式

这是代码:

import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.*;

    public class Interface {

        private JPanel panel;
        private JPanel buttonPane;
        private JLabel label;
        private JLabel label2;
        private JTextField textfield;
        private JTextField textfield2;
        private JTextField textfield3;
        private JTextField textfield4;
        private JTextField textfield5;
        private JButton button;
        private JButton button2;
        private JButton button3;
        private JButton button4;
        private JButton button5;
        private JButton button6;

        public static void main(String[] args) {
            new Interface();
        }

        public Interface() {
            JFrame frame = new JFrame("Vormen");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(600, 300);
            frame.setLocationRelativeTo(null);

            panel = new JPanel();
            buttonPane = new JPanel();
            button = new JButton("cirkel");
            button.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {     
    JLabel label3 = new JLabel(new ImageIcon("images/cirkel.png"));
            panel.add(label3);
            panel.revalidate();
            panel.repaint();
        buttonPane.add(button);
        buttonPane.add(button2);
        buttonPane.add(button3);


        frame.add(buttonPane, BorderLayout.NORTH);
        frame.add(panel);
        frame.setVisible(true);

    }
}

您的应用程序找不到“"images/cirkel.png"。您别无选择:

  • 使用绝对路径(就像我在下面修改后的代码中所做的那样)。
  • 使用资源(有数百个很好的教程如何做到这一点)。

我使用绝对路径进行快速破解。对于任何严肃的事情,我会选择资源,因为它们与您的应用程序捆绑在一起。


import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class Interface {
    private JPanel panel;
    private JPanel buttonPane;
    private JLabel label;
    private JLabel label2;
    private JTextField textfield;
    private JTextField textfield2;
    private JTextField textfield3;
    private JTextField textfield4;
    private JTextField textfield5;
    private JButton button;
    private JButton button2;
    private JButton button3;
    private JButton button4;
    private JButton button5;
    private JButton button6;

    public static void main(String[] args) {
        new Interface();
    }

    public Interface() {
        JFrame frame = new JFrame("Vormen");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600, 300);
        frame.setLocationRelativeTo(null);

        panel = new JPanel(new FlowLayout());
        buttonPane = new JPanel();
        button = new JButton("cirkel");
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // Use absolute path here:
                JLabel label = new JLabel(new ImageIcon("/home/tyrion/circle.png"));
                panel.add(label);
                panel.revalidate();
                panel.repaint();

            }
        });

        buttonPane.add(button);
        // buttonPane.add(button2);
        // buttonPane.add(button3);

        frame.add(buttonPane, BorderLayout.NORTH);
        frame.add(panel, BorderLayout.CENTER);
        frame.setVisible(true);
    }
}