使图像图标通过鼠标单击从一个标签跳转到另一个标签

时间:2017-09-09 10:08:01

标签: java actionlistener jlabel

我在这里对java很新,现在我正在开发一个涉及以下操作的程序。可以说我有一个3×3网格的JLabel。如何加载ImageIcon然后将其从标签移动到另一个。例如,假设每个标签都被命名为label_1到label_9,而imageicon则在label_2上。当我点击label_3时,它应该转到label_3

1 个答案:

答案 0 :(得分:0)

非常快速的例子,您可以根据自己的需要进行调整。

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class Test extends JFrame {

    public Test() {
        JPanel container = new JPanel(new GridLayout(3, 3));
        for (int i = 0; i < 9; i++) {
            JLabel label = new JLabel("Label" + i);
            label.setPreferredSize(new Dimension(100, 100));
            label.setBorder(BorderFactory.createLineBorder(Color.black));
            label.addMouseListener(new MouseListener() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    Icon icon = UIManager.getIcon("OptionPane.informationIcon");

                    JLabel clickedLabel = (JLabel) e.getSource();
                    Container parent = clickedLabel.getParent();
                    clearIcons(parent);
                    clickedLabel.setIcon(icon);
                }

                private void clearIcons(Container parent) {
                    Component[] components = parent.getComponents();
                    for (Component component : components) {
                        ((JLabel) component).setIcon(null);
                    }
                }

                @Override
                public void mousePressed(MouseEvent e) {
                }

                @Override
                public void mouseReleased(MouseEvent e) {
                }

                @Override
                public void mouseEntered(MouseEvent e) {
                }

                @Override
                public void mouseExited(MouseEvent e) {
                }
            });
            container.add(label);
        }
        add(container);
    }

    public static void main(String[] args) {
        Test frame = new Test();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.pack();
    }
}

结果应如下:

enter image description here