首页 > 解决方案 > 如何使用 mouseClicked 在循环内获取 JLabel 的值?

问题描述

我对我的简单程序进行了修改,而不是使用表格,而是创建了我的自定义代码来使用JPanel. 我现在的问题是当我单击按钮时,它给了我最后一个列表的值。

这是我的方法看起来像:

private void customize(List<Student> students) {
    panelStudentHolder.removeAll();
    panelStudentHolder.revalidate();
    panelStudentHolder.repaint();
    for (Student student : students) {
        panelStudentHolder.setLayout(new java.awt.GridLayout(0, 1, 0, 0));
        panelStudentHolder.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Student List", javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.ABOVE_TOP, new java.awt.Font("Century Gothic", 1, 14))); // NOI18N
        panelStudent = new javax.swing.JPanel();
        lblStudent = new javax.swing.JLabel();

        btnBackUp = new javax.swing.JLabel();
        btnEdit = new javax.swing.JLabel();
        btnBlock = new javax.swing.JLabel();

        lblStudent.setFont(new java.awt.Font("Century Gothic", 0, 14)); // NOI18N
        lblStudent.setText(student.toString()+" >> "+student.getId());

        btnEdit.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/icons8-view-20.png"))); // NOI18N
        btnEdit.setText("Edit");
        btnEdit.addMouseListener(new java.awt.event.MouseAdapter() {
            @Override
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                System.out.println(" "+lblStudent.getText());
            }
        });


        javax.swing.GroupLayout panelStudentLayout = new javax.swing.GroupLayout(panelStudent);
        panelStudent.setLayout(panelStudentLayout);
        panelStudentLayout.setHorizontalGroup(
        panelStudentLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelStudentLayout.createSequentialGroup()
            .addComponent(lblStudent, javax.swing.GroupLayout.DEFAULT_SIZE, 740, Short.MAX_VALUE)
            .addGap(18, 18, 18)
            .addComponent(btnBackUp)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
            .addComponent(btnEdit)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
            .addComponent(btnBlock)
            .addGap(2, 2, 2))
        );
        panelStudentLayout.setVerticalGroup(
            panelStudentLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(lblStudent, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(btnBackUp, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(btnEdit, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(btnBlock, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );


        panelStudentHolder.add(panelStudent);

    }
}

这是我的问题发生的地方:

btnView.addMouseListener(new java.awt.event.MouseAdapter() {
            @Override
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                System.out.println(" "+lblStudent.getText());

//这里它总是给我列表的最后一个值。} });

当我点击按钮时,它总是给我底部的 ID。

标签: javaswingjlabelmouselistener

解决方案


对于第二部分,您可以为面板设置背景颜色,

并为缩小,为应该解决第二个问题的面板提供最小尺寸、最大尺寸和首选尺寸

你也可以使用我的帮助的盒子布局。


推荐阅读