2017-05-16 10 views
0

を、それをシフト私はdialog.setLocationRelativeTo(button)を使用して行うことができます内部JPanel-でのJButtonに使って、JDialogを位置決めしようとしていますが、ダイアログは、ボタンをカバーしています。私は非常にうまくいっていなかったので、ダイアログを少し外に出そうとしています。setLocationRelativeTo()、コンポーネント、およびわずか

私は有望と思われるいくつかの異なるアプローチを見つけました。相対位置(お互いをオーバーライドするように見える)を設定した後、ちょうどsetLocation(x、y)画面からのボタンの位置

私はこの種のものをスプーンしていて、ここ数日間にいくつかの質問をしましたが、APIをどこで調べるべきかのようなヒントはありますか?コンポーネントに関連する座標をスクリーン座標に変換することを検討する必要がありますか?それは私の次善の推測です...しかし、私はうそをつくことはありません、それは間違いなく私を混乱させます。あなたは、自分自身を変換するComponent.getLocationOnScreen()に感謝する必要はありません

+1

'Point p = c.getLocation();でいくつかの成功を収めました。 SwingUtilities.convertPointToScreen(p、c); dialogPopup.setLocation(p); ' ここで、cはボタンです。これはこれを行う良い方法でしょうか? – NickW

答えて

2

public static void main(String[] args) { 
    SwingUtilities.invokeLater(() -> { 
     final JFrame f = new JFrame("test"); 
     final JButton b = new JButton("Hello"); 
     f.getContentPane().setLayout(new BorderLayout()); 
     f.getContentPane().add(b, BorderLayout.NORTH); 
     f.setSize(300, 200); 
     f.setVisible(true); 
     b.addActionListener((e) -> { 
      JDialog dialog = new JDialog(f); 
      dialog.getContentPane().add(new JLabel(new Date().toString())); 
      dialog.pack(); 
      Point point = b.getLocationOnScreen(); 
      //dialog.setLocationRelativeTo(b); // Shows over button, as doc says 
      dialog.setLocation(new Point(point.x, point.y + b.getHeight())); 
      dialog.setVisible(true); 
     }); 
    }); 
} 

私の作品... Window.setLocationRelativeTo(...)ため

ドク氏は述べています:

コンポーネントがない場合にはヌルであり、画面上に表示されている場合、 ウィンドウは、ウィンドウの中心が がセンターの中心と一致するように配置されますmponent。

あなたの動作は正常です。

+0

ええ、おかげ - b.getLocationOnScreenは()の前に私のために動作しなかった理由を私は知りません!私は今これをやっている: '点P = c.getLocationOnScreen(); dialogPopup.setLocation((INT)p.getX()+ 100、(INT)p.getY()+ 100); 'iは、ボタンの高さと幅のために '100' を交換します。ありがとう! – NickW

関連する問題