Java 如何向JPane添加和删除JLabel?

Java 如何向JPane添加和删除JLabel?,java,swing,user-interface,Java,Swing,User Interface,我想做一个小GUI。它有三个复选框和一个按钮。下面的图片我有一个头部的图像,我想把其他图像放在上面。这样,当我选择它们并按下按钮时,它们会改变。目前在我的处理程序中,我只有一个ImageIcon。 当我按原样运行代码时,coolBrows.png图像不会显示。我在这里看到了一些将JFrame添加到JFrame的示例,他们说我需要添加一个布局才能让它工作。我已经这样做了,但它仍然不会出现。。。感谢您的帮助! 注意:每个图像都有相同的尺寸,但是要叠加的图像有一个透明的背景 对不起,如果我打破了以前从

我想做一个小GUI。它有三个复选框和一个按钮。下面的图片我有一个头部的图像,我想把其他图像放在上面。这样,当我选择它们并按下按钮时,它们会改变。目前在我的处理程序中,我只有一个ImageIcon。 当我按原样运行代码时,coolBrows.png图像不会显示。我在这里看到了一些将JFrame添加到JFrame的示例,他们说我需要添加一个布局才能让它工作。我已经这样做了,但它仍然不会出现。。。感谢您的帮助! 注意:每个图像都有相同的尺寸,但是要叠加的图像有一个透明的背景

对不起,如果我打破了以前从未在这里发布过的惯例

GUI


因此,您似乎需要对图标或jlabel进行分层

因此,您可以使用:

用于将标签分层的JLayeredPane。因此,为每个面部特征创建一个层,并向该层添加标签。然后,您可以根据复选框的值从标签中添加/删除图标。有关更多信息和工作示例,请阅读上Swing教程的部分

使用图层将图标分层。这允许您将图标堆叠在另一个图标之上,然后在单个JLabel上显示生成的图标。因此,每次通过单击复选框生成事件时,您都可以使用选定的功能重建CompoundIcon,并重置JLabel上的图标


好的,那么您显然知道如何将组件添加到容器中,删除它们几乎是相同的过程,但是调用remove。在屏幕上显示的容器上执行此操作时,您需要调用revalidate,并且通常需要在容器上重新绘制以生成布局和绘制过程。在您的情况下,我想知道您是否应该用新图像ie setIconThank更新先前存在的JLabel。我使用了setIcon,效果非常好。谢谢您的反馈。我查看了一下JLayeredPane,它似乎是为实现我所尝试的功能而构建的。我将重写这篇文章,使用图层进行练习。
package AssignmentFace;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;


public class AssignmentFace extends JFrame {

    private JPanel contentPane;
    private ImageIcon head;
    private JCheckBox checkBoxBrows;
    private static ImageIcon brows; 

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    AssignmentFace frame = new AssignmentFace();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
    /**
     * Create the frame.
     */
    public AssignmentFace() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(1,2));
        setContentPane(contentPane);

        JPanel selectionPanel = new JPanel();
        selectionPanel.setLayout(new GridLayout(7,1));
        contentPane.add(selectionPanel, BorderLayout.WEST);

        // Contains the checkboxes
        checkBoxBrows= new JCheckBox("brows");
        selectionPanel.add(checkBoxBrows);

        JCheckBox checkBoxNose = new JCheckBox("Nose");
        selectionPanel.add(checkBoxNose);

        JCheckBox checkBoxMouth = new JCheckBox("Mouth");
        selectionPanel.add(checkBoxMouth);

        Handler handler = new Handler();

        JButton btnCycle = new JButton("Cycle ...");
        btnCycle.addActionListener(handler);
        selectionPanel.add(btnCycle);

        JPanel facePanel = new JPanel();
        facePanel.setOpaque(true);
        contentPane.add(facePanel, BorderLayout.CENTER);

        //  Head
        head = new ImageIcon(getClass().getResource("/images/head.png"));
        JLabel headLabel = new JLabel(head, JLabel.CENTER);
        headLabel.setLayout(new BorderLayout());
        facePanel.add( headLabel, BorderLayout.CENTER );

        //  Brows
        brows = new ImageIcon();
        JLabel browsLabel = new JLabel(brows, JLabel.CENTER);
        headLabel.add(browsLabel, BorderLayout.CENTER); 

        //  Nose
        //ImageIcon nose = new ImageIcon();
        //JLabel noseLabel = new JLabel(nose, JLabel.CENTER);
        //facePanel.add(noseLabel, BorderLayout.CENTER);

        // Mouth
        //ImageIcon mouth = new ImageIcon();
        //JLabel mouthLabel = new JLabel(nose, JLabel.CENTER);
        //facePanel.add(mouthLabel, BorderLayout.CENTER);
    }

    public class Handler implements ActionListener
    {

        @Override
        public void actionPerformed(ActionEvent e) 
        {
            if(checkBoxBrows.isSelected())
            {
                brows = new ImageIcon(getClass().getResource("/images/coolBrows.png"));
                System.out.println("here"); //For testing purposes. This does come through in the console
            }
        }
    }
}