Java 如何在单击netbeans时设置多个jlabel的颜色?

Java 如何在单击netbeans时设置多个jlabel的颜色?,java,swing,netbeans,jlabel,Java,Swing,Netbeans,Jlabel,我在一个JPanel上有多个JLabel。当我单击JLabel时,背景变为绿色 我想一次只做一个绿色标签。例如,如果单击JLabel1,它必须变为绿色。如果单击另一个JLabel2,JLabel1必须变为红色,JLabel2必须变为绿色 我有很多JLabel,为每个人举办活动是没有效率的。我找了很多,但什么也没找到。我正在使用Netbeans 8.1 jlabel被声明和初始化。这表示酒店的房间地图 JLabels声明: JLabel p401,p402,p403,phol,a301,a302

我在一个JPanel上有多个JLabel。当我单击JLabel时,背景变为绿色

我想一次只做一个绿色标签。例如,如果单击JLabel1,它必须变为绿色。如果单击另一个JLabel2,JLabel1必须变为红色,JLabel2必须变为绿色

我有很多JLabel,为每个人举办活动是没有效率的。我找了很多,但什么也没找到。我正在使用Netbeans 8.1

jlabel被声明和初始化。这表示酒店的房间地图

JLabels声明:

 JLabel p401,p402,p403,phol,a301,a302,a303,a304,a305,a306,ahol;
 JLabel d201,d202,d203,d204,d205,d206,d207,d208,d209,d210,dhol;
 JLabel r10,r11,r12,r13,r14,r15,r16,r17,r18,r19;
 JLabel r20,r21,r22,r23,r24,r25,r26,r27,r28,r29;
 JLabel r30,r31,r32,r33,r34,r35,r36,r37,r38,r39;
 JLabel r40,r41,r42,r43,r44,r45,r46,r47,r48,r49;
 JLabel r50,r51,r52,r53,r54,r55,r56,r57,r58,r59;
转绿功能:

public void click(JLabel l)
{
    l.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {
            l.setOpaque(true);
            l.setBackground(Color.GREEN);
            System.out.println(l.getText());
            getCamId(l.getText()); 
            cam.setText(String.valueOf(idCam));
        }
    }); 
}
  • 首先,将所有JLabel放入一个数组或
    ArrayList
  • 我更喜欢使用更灵活的ArrayList,通常在循环中创建我的JLabel集合,例如,如果我在循环之前知道要创建多少标签,则创建for循环,如果我不知道,则创建while循环
  • 在这个相同的创建循环中,将创建的JLabel添加到
    ArrayList
    以及包含所有标签的JPanel容器中
  • 这个JPanel容器应该有一个合适的布局,比如GridLayout,这样它就能很好地显示JLabel
  • 必须通过
    myLabel.setOpaque(true)
    将所有JLabel设置为不透明,以便显示其背景色
  • 创建一个所有人都可以共享的MouseListener,并将其添加到ArrayList中的每个标签中
  • 在MouseListener的mousePressed方法中,通过使用for循环迭代ArrayList,在列表中的每个JLabel上调用
    setBackground(Color.red)
    来将所有标签的红色都变成红色
  • 在同一方法内部,通过调用MouseEvent参数上的
    JLabel selectedLabel=(JLabel)e.getSource()
    来获取按下的JLabel
  • 在for循环之后,通过在其上调用
    setBackground(…)
    将所选JLabel的背景色更改为color.GREEN
  • 如果您希望代码有更具体的帮助,那么必须显示相关的代码

    比如说

    import java.awt.Color;
    import java.awt.GridLayout;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.swing.*;
    
    @SuppressWarnings("serial")
    public class LabelGrid extends JPanel {
        // number of columns in the "hallways"
        private static final int COLUMNS = 10;
    
        // colors of the current selection and the previous selection
        public static final Color PREVIOUS_SELECTION_COLOR = Color.RED;
        public static final Color CURRENT_SELECTION_COLOR = Color.GREEN;
    
        // Strings for the rooms.
        private String[] pRooms = { "p401", "p402", "p403", "phol" };
        private String[] aRooms = { "a301", "a302", "a303", "a304", "a305", "a306", "ahol" };
        private String[] dRooms = { "d201", "d202", "d203", "d204", "d205", "d206", "d207", "d208", "d209", "d210", "dhol" };
        private String[] rRooms = { 
                "r10", "r11", "r12", "r13", "r14", "r15", "r16", "r17", "r18", "r19", "r20", "r21",
                "r22", "r23", "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31", "r32", "r33", "r34", "r35", "r36",
                "r37", "r38", "r39", "r40", "r41", "r42", "r43", "r44", "r45", "r46", "r47", "r48", "r49", "r50", "r51",
                "r52", "r53", "r54", "r55", "r56", "r57", "r58", "r59" };
    
        // array of array, just to simplify
        private String[][] allRooms = {
                pRooms, aRooms, dRooms, rRooms
        };
    
        // previously selected JLabel. This will be colored RED
        private JLabel previousSelectedLabel = null;
    
        // ArrayList to hold **all** JLabels
        private List<JLabel> labelList = new ArrayList<>();
    
        public LabelGrid() {
    
            // the MouseListener:
            MyMouse myMouse = new MyMouse();
    
            // layout for the overall GUI
            setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
    
            // go through the array of arrays
            for (String[] strings : allRooms) {
                // create a JPanel to hold each "hallway" of JLabels
                JPanel container = new JPanel(new GridLayout(0, COLUMNS, 5, 5));
                container.setBorder(BorderFactory.createLineBorder(Color.blue));
    
                // iterate through the Strings in the 2nd dimension of our 2D String array
                for (String text : strings) {
                    // create a JLabel with the String
                    JLabel label = new JLabel(text, SwingConstants.CENTER);
                    // make it bigger
                    label.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
                    // make it opaque
                    label.setOpaque(true);
                    // add the mouse listenr
                    label.addMouseListener(myMouse);
                    // add it to the arraylist
                    labelList.add(label);
    
                    // add it to the container JPanel
                    container.add(label);
                }
    
                // add the container JPanel to the GUI
                add(container);
            }
        }
    
        private class MyMouse extends MouseAdapter {
            @Override
            public void mousePressed(MouseEvent e) {
                // go through all the JLabels clearing all colors
                for (JLabel lbl : labelList) {
                    lbl.setBackground(null); // clear labels
                }
    
                // color the previously selected JLabel to RED 
                if (previousSelectedLabel != null) {
                    previousSelectedLabel.setBackground(PREVIOUS_SELECTION_COLOR);
                }
    
                // get currently selected JLabel
                JLabel label = (JLabel) e.getSource();
                // set it to green
                label.setBackground(CURRENT_SELECTION_COLOR);
    
                // make it now the previously selected label.
                previousSelectedLabel = label;
            }
        }
    
        private static void createAndShowGui() {
            JFrame frame = new JFrame("LabelGrid");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.getContentPane().add(new LabelGrid());
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(() -> {
                createAndShowGui();
            });
        }
    }
    
    导入java.awt.Color;
    导入java.awt.GridLayout;
    导入java.awt.event.MouseAdapter;
    导入java.awt.event.MouseEvent;
    导入java.util.ArrayList;
    导入java.util.List;
    导入javax.swing.*;
    @抑制警告(“串行”)
    公共类LabelGrid扩展了JPanel{
    //“走廊”中的柱数
    私有静态final int COLUMNS=10;
    //当前选择和上一选择的颜色
    公共静态最终颜色上一个\u选择\u颜色=Color.RED;
    公共静态最终颜色当前\u选择\u颜色=Color.GREEN;
    //房间的绳子。
    私有字符串[]pRooms={“p401”、“p402”、“p403”、“phol”};
    私有字符串[]aRooms={“a301”、“a302”、“a303”、“a304”、“a305”、“a306”、“ahol”};
    私有字符串[]dRooms={“d201”、“d202”、“d203”、“d204”、“d205”、“d206”、“d207”、“d208”、“d209”、“d210”、“dhol”};
    私有字符串[]rooms={
    “r10”、“r11”、“r12”、“r13”、“r14”、“r15”、“r16”、“r17”、“r18”、“r19”、“r20”、“r21”,
    “r22”,“r23”,“r24”,“r25”,“r26”,“r27”,“r28”,“r29”,“r30”,“r31”,“r32”,“r33”,“r34”,“r35”,“r36”,
    “r37”,“r38”,“r39”,“r40”,“r41”,“r42”,“r43”,“r44”,“r45”,“r46”,“r47”,“r48”,“r49”,“r50”,“r51”,
    “r52”、“r53”、“r54”、“r55”、“r56”、“r57”、“r58”、“r59”};
    //数组的数组,只是为了简化
    专用字符串[][]所有房间={
    pRooms、Aroms、Droom、Rooms
    };
    //以前选择的JLabel。此标签将显示为红色
    private JLabel previousSelectedLabel=null;
    //要保存**所有**jLabel的ArrayList
    私有列表标签列表=新的ArrayList();
    公共LabelGrid(){
    //鼠标听者:
    MyMouse MyMouse=新建MyMouse();
    //整个GUI的布局
    setLayout(新的BoxLayout(这是BoxLayout.PAGE_轴));
    //遍历数组的数组
    for(字符串[]字符串:所有房间){
    //创建一个JPanel来容纳JLabel的每个“走廊”
    JPanel容器=新的JPanel(新的GridLayout(0,列,5,5));
    container.setboorder(BorderFactory.createLineBorder(Color.blue));
    //在2D字符串数组的第二维中迭代字符串
    用于(字符串文本:字符串){
    //使用字符串创建JLabel
    JLabel label=新的JLabel(文本,SwingConstants.CENTER);
    //把它弄大点
    label.setboorder(BorderFactory.createEmptyBorder(5,5,5,5));
    //让它不透明
    label.set不透明(true);
    //添加鼠标列表
    label.addMouseListener(myMouse);
    //将其添加到arraylist
    标签列表。添加(标签);
    //将其添加到容器JPanel中
    容器。添加(标签);
    }
    //将容器JPanel添加到GUI
    添加(容器);
    }
    }
    私有类MyMouse扩展了MouseAdapter{
    @凌驾
    公共无效鼠标按下(MouseEvent e){
    //检查所有标签,清除所有颜色
    用于(JLabel lbl:labelList){
    lbl.setBackground(null);//清除标签
    }
    //将先前选择的JLabel涂成红色
    if(先前选择的标签!=null){
    先前选择的标签。背景(先前选择的颜色);
    }
    //获取当前选定的JLabel
    JLabel=(JLabel)e.getSource();
    //设置为绿色
    标签.背景(当前选择的颜色);
    //现在将其设置为以前选择的标签。
    previousSelectedLabel=标签;
    }
    }
    私有静态void createAndShowGui(){
    JFrame frame=新JFrame(“LabelGrid”);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);