Java 为附近的每个标签调用鼠标插入事件
我在尝试创建一个高亮显示的“标签”以更改其图标时遇到问题,好的,因此当为一个jLabel调用MouseEntered事件时,也会调用附近每个标签的事件,并且更改其图标。我尝试通过使用variable拒绝更改其他jLabel图标来禁用该功能,但它保持不变,就像在同一时刻调用它一样,而不允许程序将值存储在variable中并执行if检查,代码如下:Java 为附近的每个标签调用鼠标插入事件,java,swing,icons,Java,Swing,Icons,我在尝试创建一个高亮显示的“标签”以更改其图标时遇到问题,好的,因此当为一个jLabel调用MouseEntered事件时,也会调用附近每个标签的事件,并且更改其图标。我尝试通过使用variable拒绝更改其他jLabel图标来禁用该功能,但它保持不变,就像在同一时刻调用它一样,而不允许程序将值存储在variable中并执行if检查,代码如下: private int OverlayButton = -1; private void jLabel1MouseEntered(java.awt.e
private int OverlayButton = -1;
private void jLabel1MouseEntered(java.awt.event.MouseEvent evt) {
SetButton( 1 );
}
private void jLabel1MouseExited(java.awt.event.MouseEvent evt) {
ResetButton( 1 );
}
private void jLabel2MouseEntered(java.awt.event.MouseEvent evt) {
SetButton( 2 );
}
private void jLabel2MouseExited(java.awt.event.MouseEvent evt) {
ResetButton( 2 );
}
private void jLabel3MouseEntered(java.awt.event.MouseEvent evt) {
SetButton( 3 );
}
private void jLabel3MouseExited(java.awt.event.MouseEvent evt) {
ResetButton( 3 );
}
public void SetButton( int button ) {
if( OverlayButton == -1 ) {
OverlayButton = button;
System.out.println( "SetButton method | (BUTTON-ID:"+ button+ ") ." );
switch( button ) {
case 1: {
jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Agendicus/SecondaryCalendar.png")));
}
case 2: {
jLabel2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Agendicus/SecondaryNotification.png")));
}
case 3: {
jLabel3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Agendicus/medal (1).png")));
}
case 4: {
}
}
}
else {}
}
public void ResetButton( int button ) {
if( OverlayButton != -1 ) {
switch( button ) {
case 1: {
jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Agendicus/calendar-with-a-clock-time-tools.png")));
}
case 2: {
jLabel2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Agendicus/notifications-button.png")));
}
case 3: {
jLabel3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Agendicus/medal (2).png")));
}
}
System.out.println( "ResetButton method | (BUTTON-ID:"+ button+ ") | Setting OverlayButton to -1." );
OverlayButton = -1;
}
}
我还尝试在每个事件下为不同的JLabel使用重置图标,但没有成功 我的朋友,在你的案子里加上破绽。。添加中断
case 1: {
jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Agendicus/SecondaryCalendar.png")));
break;
}
case 2: {
jLabel2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Agendicus/SecondaryNotification.png")));
break;
}
case 3: {
jLabel3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Agendicus/medal (1).png")));
break;
}
省略break语句会导致执行每个后续案例
对于后代,我想指出switch语句是不必要的,因此您遇到的错误是完全可以避免的。例如,如果您使用了一个自定义类,该类实现MouseListener并将希望在参数之间转换的图标路径作为参数,那么当您遇到问题和需要帮助时,您的代码将更容易让其他人遵循。下面是一个消除问题根源的示例
public static class LabelListener implements MouseListener {
private ImageIcon newIcon;
private ImageIcon defaultIcon;
private JLabel label;
public LabelListener(JLabel label, String newIconPath, String defaultIconPath) throws IOException{
this.label = label;
this.label.setSize(100, 100);
this.newIcon = new ImageIcon(newIconPath);
this.defaultIcon = new ImageIcon(defaultIconPath);
this.label.setIcon(this.defaultIcon);
}
@Override
public void mouseEntered(MouseEvent evt){
this.label.setIcon(this.newIcon);
}
@Override
public void mouseExited(MouseEvent evt){
this.label.setIcon(this.defaultIcon);
}
@Override
public void mousePressed(MouseEvent evt){
}
@Override
public void mouseClicked(MouseEvent evt){
}
@Override
public void mouseReleased(MouseEvent evt){
}
}
很好,您已经编写了实现侦听器的正确方法。然而,他在代码中遇到的问题是没有使用break。如果您使用的是开关箱,则需要使用break。我想这只是一次失误 我的朋友,在你的案子里加上破绽。。添加中断
case 1: {
jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Agendicus/SecondaryCalendar.png")));
break;
}
case 2: {
jLabel2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Agendicus/SecondaryNotification.png")));
break;
}
case 3: {
jLabel3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Agendicus/medal (1).png")));
break;
}
省略break语句会导致执行每个后续案例
对于后代,我想指出switch语句是不必要的,因此您遇到的错误是完全可以避免的。例如,如果您使用了一个自定义类,该类实现MouseListener并将希望在参数之间转换的图标路径作为参数,那么当您遇到问题和需要帮助时,您的代码将更容易让其他人遵循。下面是一个消除问题根源的示例
public static class LabelListener implements MouseListener {
private ImageIcon newIcon;
private ImageIcon defaultIcon;
private JLabel label;
public LabelListener(JLabel label, String newIconPath, String defaultIconPath) throws IOException{
this.label = label;
this.label.setSize(100, 100);
this.newIcon = new ImageIcon(newIconPath);
this.defaultIcon = new ImageIcon(defaultIconPath);
this.label.setIcon(this.defaultIcon);
}
@Override
public void mouseEntered(MouseEvent evt){
this.label.setIcon(this.newIcon);
}
@Override
public void mouseExited(MouseEvent evt){
this.label.setIcon(this.defaultIcon);
}
@Override
public void mousePressed(MouseEvent evt){
}
@Override
public void mouseClicked(MouseEvent evt){
}
@Override
public void mouseReleased(MouseEvent evt){
}
}
很好,您已经编写了实现侦听器的正确方法。然而,他在代码中遇到的问题是没有使用break。如果您使用的是开关箱,则需要使用break。我想这只是一次失误 您发布的代码没有提示我们代码中的错误。请提供一个提示,以便我们能够更好地理解您的意思,并对其进行调试以发现您的错误。@SergiyMedvynskyy建议的制作MCVE的提示。。例如,获取图像的一种方法是热链接到中看到的图像。例如,嵌入到代码中的图像的热链接。您发布的代码没有提示我们代码中的错误。请提供一个提示,以便我们能够更好地理解您的意思,并对其进行调试以发现您的错误。@SergiyMedvynskyy建议的制作MCVE的提示。。例如,获取图像的一种方法是热链接到中看到的图像。例如,嵌入图像的热链接。非常感谢!我从来没有真正看到休息的正确用法;在switch语句中,感谢您指出这一点。添加断点;每个案例都解决了问题。非常感谢!我从来没有真正看到休息的正确用法;在switch语句中,感谢您指出这一点。添加断点;每一个案例都解决了这个问题。