由于可以通過 Enter 鍵預選一個按鈕,有沒有辦法將滑鼠放在 Joption 窗格 Button 的選定按鈕上?
提前致謝
uj5u.com熱心網友回復:
這是我如何做到的。
首先,創建一個
我做了一些實驗,發現該JOptionPane實體包含兩個子組件。
Component[] cmpts = oPane.getComponents();
for (Component cmpt : cmpts) {
System.out.println(cmpt.getClass());
}
每個孩子都是一個JPanel。其中之一包含OK JButton。
然后我添加了一個WindowListener到JDialog. 當JDialog第一次顯示時,我使用機器人將滑鼠指標移動到確定按鈕。
javax.swing.JOptionPane oPane = new javax.swing.JOptionPane();
javax.swing.JDialog dlg = oPane.createDialog("Dialog Title");
dlg.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowOpened(java.awt.event.WindowEvent wndEvt) {
javax.swing.JComponent jCmpt = (javax.swing.JComponent) oPane.getComponent(1);
javax.swing.JButton button = (javax.swing.JButton) jCmpt.getComponent(0);
java.awt.Point pt = button.getLocationOnScreen();
try {
java.awt.Robot robbie = new java.awt.Robot();
robbie.mouseMove(pt.x, pt.y);
}
catch (java.awt.AWTException xAwt) {
xAwt.printStackTrace();
}
}
});
dlg.setVisible(true);
請注意,以上只是一個概念證明(POC)。我建議您調查上述代碼中出現的類的 API,以使其適合您的要求。
uj5u.com熱心網友回復:
以下是演示將滑鼠懸停在JOptionPane按鈕上的示例:
import java.awt.*;
import javax.swing.*;
public class MouseOverJOptionPaneButton {
public static void main(String[] args) {
JOptionPane optionPane = new JOptionPane();
optionPane.setMessage("Mouse positioned over the button");
optionPane.setMessageType(JOptionPane.INFORMATION_MESSAGE);
JButton jButton = new JButton("OK");
jButton.addActionListener(actionEvent -> {
System.out.println(jButton.getText() " pressed");
});
optionPane.setOptions(new Object[] { jButton });
JDialog dialog = optionPane.createDialog("");
//if modal, placeMouseOver is invoked after dialog closes
//alternatively use WindowListener as in Arba's answer
dialog.setModal(false);
dialog.setVisible(true);
placeMouseOver(jButton);
//todo, optionally: dialog.setModal(true);
}
private static void placeMouseOver(JComponent comp) {
try {
//calculate center of component AFTER it is showing
int xCoord = comp.getLocationOnScreen().x comp.getWidth()/2;
int yCoord = comp.getLocationOnScreen().y comp.getHeight()/2;
// Move the cursor
new Robot().mouseMove(xCoord, yCoord);
} catch (AWTException e) {
e.printStackTrace();
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/330430.html
下一篇:重復的PyQT參考
