Когда я создаю модальный JComponent, мышь (правильно) меняется на курсор по умолчанию.Однако, когда я закрываю компонент, у меня возникает странная проблема.
- Если я закрою компонент, когда мой курсор содержится в границах компонента, курсор будет правильно возвращен.
- Если я закрою компонент, когда мой курсор находится за пределами (например, с помощью esc), курсор не вернется, даже при вызовах setCursor ().
Как я могу правильномой курсор вернется в обоих случаях не хакерским способом?
Пример кода:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
class ModalTest {
public static void main (String[] args) {
// Create a frame.
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setPreferredSize(new Dimension(800, 600));
frame.pack();
frame.setLocationRelativeTo(null);
// Add a button.
JButton button = new JButton();
frame.add(button);
frame.revalidate();
frame.setVisible(true);
frame.setCursor(Cursor.HAND_CURSOR);
// While the mouse is inside the JFrame, the cursor should be Cursor.HAND_CURSOR.
// And when the modal JOptionPane is visible, the cursor should be Cursor.DEFAULT_CURSOR.
// However, when that modal JComponent is closed while the cursor is outside it, it does
// not revert to Cursor.HAND_CURSOR.
button.setAction(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
JOptionPane.showConfirmDialog (
frame,
"Move the cursor inside, then outside of this component and press Esc. The cursor will stay default.",
"Cursor Test",
JOptionPane.YES_NO_OPTION
);
// Even if you change the cursor after, it stays default.
frame.setCursor(Cursor.CROSSHAIR_CURSOR);
}
});
}
}