我在titleBar中创建了一个带有四个按钮的JFrame。
JFrame frame=new JFrame("custom JFrame with 4 buttons in title");
frame.setUndecorated(true);
JPanel button_panel=new JPanel(new FlowLayout(FlowLayout.LEFT));
JButton button_1=new JButton("+");
JButton button_2=new JButton("↑");
JButton button_3=new JButton("-");
JButton button_4=new JButton("system tray");
button_panel.add(button_1);
button_panel.add(button_2);
button_panel.add(button_3);
button_panel.add(button_4);
frame.getContentPane().add(button_panel,BorderLayout.NORTH);
现在,我的标题栏中有一个带有四个按钮的JFrame。
但是,如何为这个自定义JFrame提供拖动功能?
答案 0 :(得分:5)
答案 1 :(得分:2)
您使用的是Mac OS X吗?特定于Mac的解决方案就是:
frame.getRootPane().putClientProperty("apple.awt.draggableWindowBackground", true);
答案 2 :(得分:1)
您可以通过适当地设置MouseListener来拖动JFrame的内容。 This post有一个例子。
答案 3 :(得分:1)
如果您不关心屏幕上鼠标位置和组件位置之间的偏移(组件左上角),这是最简单的解决方案:
private class DragListener extends MouseAdapter {
@Override
public void mouseDragged(MouseEvent e) {
setLocation(MouseInfo.getPointerInfo().getLocation());
}
}
答案 4 :(得分:0)
您可以简单地覆盖mousepressed和mousedragged方法,如下所示:
private int tx,ty;
private void titlebar_mousePressed(MouseEvent m)
{
tx= m.getX();
ty=m.getY();
}
private void titlebar_mouseDragged(MouseEvent m)
{
titlebar.setLocation(m.getXOnScreen()-tx,m.getYOnScreen-ty);
}`