Как получить значение JLabel внутри цикла с помощью mouseClicked?

Я модифицировал свою простую программу, вместо использования таблицы я создал свой собственный код для отображения моего списка с помощью 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());

//Здесь он всегда дает мне последнее значение моего списка. } });

Как получить значение JLabel внутри цикла с помощью mouseClicked?

Создайте пользовательский компонент, который можно использовать для поддержки инкапсулированной ссылки на все компоненты, которыми вы управляете, для одной строки. Используйте кнопки вместо меток и прослушивателей мыши

MadProgrammer 28.03.2019 09:57

Я уже решил свою первую проблему. Теперь только Layout, при попытке изменить panelStudentHolder.add(panelStudent); на panelStudentHolder.setLayout(new BoxLayout(panelStudent, BoxLayout.PAGE_AXIS)); пишет, что BoxLayout не может быть передан

Anirudh Lou 28.03.2019 10:08
"Еще кое-что,.." Вы можете задавать столько вопросов, сколько хотите, но помещайте каждый в отдельную ветку вопросов и ответов, чтобы они были полезны последующим посетителям. Чтобы сделать каждый вопрос более полезным, включите минимальный воспроизводимый пример, специфичный для этой проблемы. Также: Пожалуйста, используйте форматирование кода для кода и фрагментов кода, структурированных документов, таких как HTML/XML или ввода/вывода. Для этого выделите текст и нажмите кнопку {} в верхней части формы публикации/редактирования сообщения.
Andrew Thompson 28.03.2019 11:51
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
119
1

Ответы 1

для второй части, вы можете установить цвет фона панели,

и для уменьшения, укажите минимальный размер, максимальный размер и предпочтительный размер панели, которая должна решить 2-ю проблему

вы также можете использовать макет коробки, что моя помощь.

Другие вопросы по теме