簡體   English   中英

如何使 JButton 顯示為“翻轉”

[英]How to make a JButton appear "as rolled over"

JButton 在翻轉時具有不同的外觀。 該外觀與“選定”外觀不同。

我想顯示我的按鈕“好像”它被翻轉了,這樣用戶就會明白,如果他按下 Return 鍵,該按鈕將被觸發。

問題與設置默認按鈕不同,因為我處於這樣一種情況,我真的想讓用戶明白,盡管他不期望它,但如果他按下回車鍵,該按鈕將被激活。 下面為那些想要一些的人提供更多詳細信息。 將按鈕設置為默認值將使按鈕成為默認按鈕,但不會向用戶發出明顯的信號。

在我的情況下,足夠強的信號是按鈕滾動時的外觀。

怎么做 ?

有關情況的更多詳細信息,對於那些想要一些的人:

  • 我有一個代表選項的按鈕列表,頂部有一個文本框,用作按鈕上的過濾器
  • 當過濾器只剩下一個選項時,直接按回車點擊該選項的按鈕
  • 實際上,用戶必須選擇帶有選項卡或箭頭的按鈕,然后按 Enter。
  • 由於該快捷方式並不明顯,因此我想向用戶發出信號

根據您的問題,您“真正”想要的是JRootPane#setDefaultButton ,它將以操作系統特定的方式突出顯示按鈕,並且如果用戶按下默認的“操作”鍵(在大多數情況下為 Enter)將調用它的ActionListener

例如...

macOS 示例

“普通”按鈕只是一個普通的舊JButtonHackedrollOver設置為啟用,並且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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM