java - 如何使用 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());
//这里它总是给我列表的最后一个值。} });
解决方案
对于第二部分,您可以为面板设置背景颜色,
并为缩小,为应该解决第二个问题的面板提供最小尺寸、最大尺寸和首选尺寸
你也可以使用我的帮助的盒子布局。
推荐阅读
- python - 无法将行插入 Google Cloud Bigquery 表,引发 AssertionError
- ruby-on-rails - 登录注销后网页一直重定向到上游服务器地址
- c# - 使用 C# 连接到 OpenLDAP 服务器
- ignite - org.apache.ignite.spi.discovery.zk.ZookeeperDiscoverySpi.spiStart(ZookeeperDiscoverySpi.java:446)
- vim - vi 编辑器不加载保存的宏
- javascript - 如何使您的复选框允许用户在 Jquery 的 CSV 文件中下载正确的数据?
- javascript - 如何读取 html 模板中的数据数组
- gstat - 是否可以在 R 中使用 gstat 进行各向异性 IDW 估计(和交叉验证)?
- .net - 通过 Visual Studio 停止程序时运行代码
- java - Log4j2 在尝试启动 Sonar Qube 本地实例时找不到日志记录实现