我在对话框中有一个JPanel。 MouseListener监听鼠标移动,当鼠标位于特定位置时,我在面板上调用setCursor()来更改光标。swing:在JDialog上设置光标
这一切运作良好,直到我打开此对话框中的另一个对话框,并再次关闭它。 (例如:一个警告消息(JOptionPane)或一个新的自定义JDialog,在这个动作之后,光标不会再次改变,尽管我仍然调用'setCursor'
任何想法会发生什么?是什么?
我在对话框中有一个JPanel。 MouseListener监听鼠标移动,当鼠标位于特定位置时,我在面板上调用setCursor()来更改光标。swing:在JDialog上设置光标
这一切运作良好,直到我打开此对话框中的另一个对话框,并再次关闭它。 (例如:一个警告消息(JOptionPane)或一个新的自定义JDialog,在这个动作之后,光标不会再次改变,尽管我仍然调用'setCursor'
任何想法会发生什么?是什么?
我发现解决方案:问题是我有1帧和1对话框。框架是主框架,之后创建对话框。在对话框中,我打电话new JDialog(null, "title");
而不是使用null,我应该添加调用对话框,因为关闭对话框后,焦点转到了主框架上,尽管在我的mac上它看起来像焦点在对话框中。 。
我尝试了以下它工作得很好,显示另一JDialog
(在Windows上,JDK 1.6.0_12)之后也。
,鼠标光标变为在水平方向上的每50个像素,点击JPanel
打开一个模态JDialog
。再次关闭并且鼠标光标仍然变化。
public class DialogCursorTest extends JDialog{
public DialogCursorTest() {
final JPanel panel = new JPanel();
panel.addMouseMotionListener(new MouseMotionAdapter() {
Cursor handCursor = new Cursor(Cursor.HAND_CURSOR);
@Override
public void mouseMoved(MouseEvent e) {
if(e.getX() % 100 > 50) {
if(panel.getCursor() != handCursor) {
panel.setCursor(handCursor);
}
}
else {
if(panel.getCursor() == handCursor) {
panel.setCursor(Cursor.getDefaultCursor());
}
}
}
});
panel.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
new JDialog(DialogCursorTest.this, "Test", true).setVisible(true);
}
});
getContentPane().add(panel);
}
public static void main(String[] args) {
DialogCursorTest test = new DialogCursorTest();
test.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
test.setSize(400, 300);
test.setVisible(true);
}
}
对我也适用,我今天晚上会在我的Mac上测试它。并试图找出有什么区别:( – Fortega 2010-02-22 10:21:47
总之:关闭一个对话框将使焦点返回到它的父项,如果没有定义父项,它将返回到主框架,很高兴知道。意味着输入焦点,而不是鼠标焦点。 – FaithReaper 2017-02-24 12:33:09