[英]How to make a JButton appear "as rolled over"
JButton 在翻转时具有不同的外观。 该外观与“选定”外观不同。
我想显示我的按钮“好像”它被翻转了,这样用户就会明白,如果他按下 Return 键,该按钮将被触发。
问题与设置默认按钮不同,因为我处于这样一种情况,我真的想让用户明白,尽管他不期望它,但如果他按下回车键,该按钮将被激活。 下面为那些想要一些的人提供更多详细信息。 将按钮设置为默认值将使按钮成为默认按钮,但不会向用户发出明显的信号。
在我的情况下,足够强的信号是按钮滚动时的外观。
怎么做 ?
有关情况的更多详细信息,对于那些想要一些的人:
根据您的问题,您“真正”想要的是JRootPane#setDefaultButton
,它将以操作系统特定的方式突出显示按钮,并且如果用户按下默认的“操作”键(在大多数情况下为 Enter)将调用它的ActionListener
例如...
“普通”按钮只是一个普通的旧JButton
, Hacked
将rollOver
设置为启用,并且Default
已设置为JRootPane
的默认按钮
正如你所看到的,你建议 fix 在 MacOS 上什么都不做,不知道它在其他平台上会做什么
我建议您查看如何使用根窗格以获取更多详细信息
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRootPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
private JButton asDefault = new JButton("Default");
public TestPane() {
JButton hack = new JButton("Hacked");
hack.getModel().setRollover(true);
hack.setRolloverEnabled(true);
asDefault.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Defaulted");
}
});
add(new JButton("Normal"));
add(hack);
add(asDefault);
}
@Override
public void addNotify() {
super.addNotify();
JRootPane rootPane = SwingUtilities.getRootPane(this);
if (rootPane != null) {
rootPane.setDefaultButton(asDefault);
}
}
}
}
所以使用button.getModel().setRollover(true);
不适用于所有平台,并且在它确实适用的那些平台上,我怀疑用户只需要通过它移动鼠标即可将其恢复正常
button.getModel().setRollover(true);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.