2 回答

TA貢獻(xiàn)1824條經(jīng)驗 獲得超6個贊
UIManager.put("OptionPane.okButtonText",?"Text?I?want");
上面的代碼將更改您創(chuàng)建的所有 JOptionPanes 上所有“確定”按鈕的文本。
如果您想要更改特定 JOptionPane 上單個按鈕上的文本。
有沒有辦法訪問 JOptionPane 上的 Button 并向其添加鼠標(biāo)偵聽器?
當(dāng)您使用靜態(tài)showXXX(...)
方法時,會創(chuàng)建模態(tài) JDialog,因此您無法訪問該對話框或其組件,直到對話框關(guān)閉為止,但為時已晚。
因此,您需要手動創(chuàng)建JOptionPane
并將其添加到JDialog
.?通過閱讀JOptionPane API
和查看標(biāo)題為 的部分可以找到執(zhí)行此操作的基礎(chǔ)知識"Direct Use"
。
創(chuàng)建后JOptionPane
(在使對話框可見之前),您可以在選項窗格中搜索按鈕并向MouseListener
每個按鈕添加 。為了幫助您完成此操作,您可以使用Swing Utils類。它將對選項窗格進(jìn)行遞歸搜索,并將按鈕以List
.?然后您可以迭代List
并添加MouseListener
.
使用此幫助程序類的基本代碼是:
JOptionPane optionPane = new JOptionPane(
? ? "Are you sure you want to exit the application",
? ? JOptionPane.QUESTION_MESSAGE,
? ? JOptionPane.YES_NO_CANCEL_OPTION);
List<JButton> buttons = SwingUtils.getDescendantsOfType(JButton.class, optionPane, true);
for (JButton button: buttons)
{
? ? System.out.println( button.getText() );
}

TA貢獻(xiàn)1856條經(jīng)驗 獲得超11個贊
如果你想在所有OptionPanel中看到相同的效果,我認(rèn)為覆蓋BasicOptionPaneUI是一個很好的解決方案
這是一個最小的例子
public class MyOptionPaneUI extends BasicOptionPaneUI {
@SuppressWarnings({"MethodOverridesStaticMethodOfSuperclass", "UnusedDeclaration"})
public static ComponentUI createUI(JComponent c) {
return new MyOptionPaneUI();
}
private static final MyMouseListener m = new MyMouseListener();
@Override
public void update(Graphics g, JComponent c) {
super.update(g, c);
}
@Override
protected void installListeners() {
JButton button = (JButton) getButtons()[0];
button.addMouseListener(m);
super.installListeners();
}
@Override
protected void uninstallListeners() {
JButton button = (JButton) getButtons()[0];
button.removeMouseListener(m);
super.uninstallListeners();
}
public static class MyMouseListener extends MouseAdapter{
@Override
public void mouseEntered(MouseEvent e) {
JButton rollOver = (JButton)e.getSource();
if (rollOver.isEnabled()) {
rollOver.setBackground(new Color(163, 184, 204));
rollOver.setForeground(Color.WHITE);
}
};
@Override
public void mouseExited(MouseEvent e) {
JButton rollOver = (JButton)e.getSource();
if (rollOver.isEnabled()) {
rollOver.setBackground(new Color(230, 230, 230));
rollOver.setForeground(Color.BLACK);
}
};
}
}
在你的框架你的主類中,你可以添加此代碼來加載 UIDefoult 中的類
static{
UIManager.put("OptionPaneUI", MyOptionPaneUI.getClass().getCanonicalName());
}
因為getButtons()[0],因為我在里面看到了這段代碼BasicOptionPaneUI
else if (type == JOptionPane.OK_CANCEL_OPTION) {
defaultOptions = new ButtonFactory[2];
defaultOptions[0] = new ButtonFactory(
UIManager.getString("OptionPane.okButtonText",l),
getMnemonic("OptionPane.okButtonMnemonic", l),
(Icon)DefaultLookup.get(optionPane, this,
"OptionPane.okIcon"), minimumWidth);
defaultOptions[1] = new ButtonFactory(
UIManager.getString("OptionPane.cancelButtonText",l),
getMnemonic("OptionPane.cancelButtonMnemonic", l),
(Icon)DefaultLookup.get(optionPane, this,
"OptionPane.cancelIcon"), minimumWidth);
} else {
defaultOptions = new ButtonFactory[1];
defaultOptions[0] = new ButtonFactory(
UIManager.getString("OptionPane.okButtonText",l),
getMnemonic("OptionPane.okButtonMnemonic", l),
(Icon)DefaultLookup.get(optionPane, this,
"OptionPane.okIcon"), minimumWidth);
}
方法內(nèi)部protected Object[] getButtons()
如果您想要效果鼠標(biāo)懸停在按鈕上,我正在研究這個庫并提供了鼠標(biāo)懸停的解決方案。
如果您可以使用此常量對庫內(nèi)的 DefaultButton 進(jìn)行個性化設(shè)置
UIManager.put("Button[Default].background", new Color(163, 184, 204));
UIManager.put("Button[Default].foreground", Color.WHITE);
UIManager.put("Button[Default].mouseHoverColor", new Color(230, 230, 230));
ps:這僅是您需要在項目中添加鼠標(biāo)懸停時的信息
添加回答
舉報