2011-03-31 40 views
3

我创建一个带有四个按钮的JFrame在它的titleBar中。如何将函数拖动到没有titleBar的JFame?

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

你怎么想的JFrame被感动?像点击名片中的任何东西,然后拖动鼠标? – user489041 2011-03-31 20:02:22

+0

没有..只有最上面的button_panel用于拖拽目的 – 2011-03-31 20:05:26

回答

4

它是唯一的解决方案吗?

那么,我所知道的唯一解决方案就是使用MouseListeners。

对于更一般的解决方案,您可以查看Moving Windows,它允许您将任何Swing组件拖放。

1

通过适当地设置MouseListener,您可以通过它的内容拖动JFrame。 This post有一个例子。

+0

好的......但它是唯一的解决方案。 – 2011-03-31 20:13:52

+0

它是唯一的解决方案吗? – 2011-03-31 20:21:42

+0

@Lokesh这是我能想到的最简单的方法。你是否想过尝试一种不同的方法? – 2011-03-31 20:24:28

2

您使用的是Mac OS X吗? MAC-具体的解决方案是这样的:

frame.getRootPane().putClientProperty("apple.awt.draggableWindowBackground", true); 
1

如果你不关心鼠标的位置和部件的位置之间的偏移屏幕(组件左上角),这是最简单的解决方案:

private class DragListener extends MouseAdapter { 

    @Override 
    public void mouseDragged(MouseEvent e) { 
     setLocation(MouseInfo.getPointerInfo().getLocation()); 
    } 
} 
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); 
}` 
相关问题