Java “如何使JButton出现”;如“翻滚”;
JButton在翻转时具有不同的外观。该外观与“选定”外观不同 我想显示我的按钮“好像”它被翻转了,这样用户就知道,如果他点击返回键,那个按钮就会被触发 问题与设置默认按钮不同,因为我真的想让用户明白,尽管他不希望这样,但如果他点击enter,该按钮将被激活。下面为那些想要的人提供更多详细信息。将button设置为默认会使button成为默认按钮,但不会向用户发出明显的信号 在我的例子中,足够强的信号是按钮翻转时的外观 怎么做 有关情况的更多详细信息,适用于想要了解情况的人:Java “如何使JButton出现”;如“翻滚”;,java,swing,jbutton,Java,Swing,Jbutton,JButton在翻转时具有不同的外观。该外观与“选定”外观不同 我想显示我的按钮“好像”它被翻转了,这样用户就知道,如果他点击返回键,那个按钮就会被触发 问题与设置默认按钮不同,因为我真的想让用户明白,尽管他不希望这样,但如果他点击enter,该按钮将被激活。下面为那些想要的人提供更多详细信息。将button设置为默认会使button成为默认按钮,但不会向用户发出明显的信号 在我的例子中,足够强的信号是按钮翻转时的外观 怎么做 有关情况的更多详细信息,适用于想要了解情况的人: 我有一个代表选项
- 我有一个代表选项的按钮列表,顶部有一个文本框,它充当按钮的过滤器
- 当过滤器只剩下一个选项时,点击return直接点击该选项的按钮
- 实际上,用户必须选择带有tab或箭头的按钮,然后按enter键李>
- 由于那个快捷方式不明显,我想用信号通知用户
JRootPane#setDefaultButton
,它将以特定于操作系统的方式突出显示该按钮,如果用户按下默认的“action”键(大多数情况下输入),将调用它的ActionListener
例如
“正常”按钮只是一个普通的老式JButton
,Hacked
将rollOver
设置为enabled,并且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)
并不是在所有平台上都能工作,在那些平台上也能工作,我想用户只需移动鼠标即可恢复正常请解释你的答案是如何解决OP的问题的。滚动与按下按钮不同,如果return导致的动作与按按钮相同,那么用户就不会期望看到这一点。更好的解决方案是将按钮设置为JRootPane的默认按钮,这样按return键会导致按钮被实际按下。您将滚动与“默认”混淆,任何用户在使用操作系统时都会期望存在差异。也有可能用户将鼠标移入或移出屏幕时会消除这种效果control@madprogrammer,我对问题进行了编辑,以消除误解。我不是在这里寻找默认值。如果还不清楚,请告诉我。@wasiahmad,我真诚地努力想弄明白这个答案是如何解决不了问题的,但没有成功。你能解释一下吗?我对问题进行了编辑,以提供更清晰的信息。希望这有帮助。可能是@catalinaisland的副本,我编辑了这个问题以消除误解。这些都是独立的问题,设置默认值并不能解决我的问题。你建议修复程序在MacOS上什么都不做。。。我碰巧在MacOS上开发,这解决了我的问题。这就是我把它贴在这里的原因。@Vicsedoubleyew很抱歉,根据我的示例代码,它没有work@VicSeedoubleyew你能给我一个可以运行的例子吗?因为我不能让它工作,我不是说一行代码,而是说一些我可以运行并看到工作的东西,因为我的示例代码没有,它包含您的一行代码
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);
}
}
}
}