[英]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.