如何使JButton出现"滚动"

时间:2017-02-09 16:22:27

标签: java swing jbutton

JButton在翻转时具有不同的外观。那个外观不同于"选择"外观

我想显示我的按钮"好像"它被翻过来,以便用户明白如果他按下Return键,那个按钮就会被触发。

问题与设置默认按钮不同,因为我处于这样一种情况,我真的想让用户明白,虽然他不会指望它,如果他点击进入那个按钮将是活性。以下是有关那些想要的人的更多细节。默认设置按钮会使按钮成为默认按钮,但不会向用户发出重要信号。

在我的情况下,足够强的信号是按钮在翻转时的外观。

怎么做?

有关情况的更多细节,对于那些想要一些人:

  • 我有一个代表选项的按钮列表,顶部有一个文本框,用作按钮上的过滤器
  • 当过滤器只剩下一个选项时,点击返回会直接点击该选项的按钮
  • 实际上,用户必须选择带有制表符或箭头的按钮,然后按Enter键。
  • 由于该快捷方式不明显,我想向用户发信号通知

2 个答案:

答案 0 :(得分:0)

根据您的问题,您真正想要的是JRootPane#setDefaultButton,它会以特定于操作系统的方式突出显示按钮,如果用户按下默认的“操作”键(在大多数情况下输入) )将其称为ActionListener

例如......

MacOS Example

“普通”按钮只是普通的JButtonHackedrollOver设置为已启用,Default已设置为{的默认按钮{1}}

正如你所看到的,你建议修复在MacOS上什么也不做,不知道它在其他平台上会做什么

我建议您查看How to Use Root Panes了解更多详情

JRootPane

因此使用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); } } } } 并不适用于所有平台,并且在这些平台上它可以正常工作,我怀疑用户只需要移动鼠标就可以将其恢复正常

答案 1 :(得分:-2)

button.getModel().setRollover(true);