【发布时间】:2021-06-27 20:27:49
【问题描述】:
我将Ikonli Packs 用于我的元素图标并将其添加到JLabel 工作正常。
我想实现悬停功能,但是当我这样做时,什么都没有发生除非我尝试调用我的JLabel 的.setText() 方法。
我认为可能必须要有文本才能检测光标,但 JLabel 最初没有文本,但它仍然可以检测到它,但正如我所提到的,如果我没有 @ 987654329@也一样,图标颜色不会改变。
这里和其他网站上有很多关于如何为标签/按钮/等实现悬停的示例,但它们都具有一种形状或形式的文本。
还有this example 悬停在图像上,但再次更改文本,而不是图像本身。
(MyForm.java 文件中的元素已通过 Swing Palette 添加。)
MyForm.java
package bruh;
import com.formdev.flatlaf.FlatDarkLaf;
import org.kordamp.ikonli.materialdesign2.MaterialDesignA;
import org.kordamp.ikonli.swing.FontIcon;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class MyForm extends JFrame {
private JPanel mainPanel;
private JLabel myLabel;
public MyForm(String title) {
super(title);
this.setContentPane(mainPanel);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.pack();
Color mainColor = Color.RED;
Color hoverColor = Color.WHITE;
FontIcon icon = FontIcon.of(MaterialDesignA.ACCOUNT);
icon.setIconSize(10);
icon.setIconColor(mainColor);
myLabel.setIcon(icon);
myLabel.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
icon.setIconColor(hoverColor);
myLabel.setIcon(icon);
//myLabel.setText("ENTERED");
}
@Override
public void mouseExited(MouseEvent e) {
icon.setIconColor(mainColor);
myLabel.setIcon(icon);
//myLabel.setText("EXITED");
}
});
}
public static void main(String[] args) {
FlatDarkLaf.setup();
JFrame frame = new MyForm("Hello World");
frame.setVisible(true);
}
}
Maven pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>bruh</groupId>
<artifactId>bruh</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.formdev</groupId>
<artifactId>flatlaf</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.kordamp.ikonli</groupId>
<artifactId>ikonli-core</artifactId>
<version>12.2.0</version>
</dependency>
<dependency>
<groupId>org.kordamp.ikonli</groupId>
<artifactId>ikonli-swing</artifactId>
<version>12.2.0</version>
</dependency>
<dependency>
<groupId>org.kordamp.ikonli</groupId>
<artifactId>ikonli-materialdesign2-pack</artifactId>
<version>12.2.0</version>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>16</maven.compiler.source>
<maven.compiler.target>16</maven.compiler.target>
</properties>
</project>
【问题讨论】:
-
我建议改用未装饰的按钮。它可以毫不费力地处理图标更改。如果您想继续使用
org.kordamp.ikonli.swing.FontIcon,您最好与开发人员联系。 -
“我建议使用未装饰的按钮。它可以轻松处理图标更改。” - 谢谢。我改用了一个按钮,效果很好。