有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在JLabel中向JPanel添加图像

我是Java新手,我正在尝试制作一个JFrame,里面有一个JPanel,在一个JLabel中有一个图像。那么,通过将JLabel添加到JPanel,它必须正常工作吗?然而,这是在文档上执行的方式。神谕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);

    }
}

共 (1) 个答案

  1. # 1 楼答案

    你的应用程序找不到“”图像/cirkel。你几乎没有其他选择:

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

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


    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);
        }
    }