2011-03-31 4 views
3

제목 표시 줄에 네 개의 버튼이있는 JFrame을 만듭니다.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); 

이제 제목 표시 줄에 4 개의 버튼이있는 JFrame이 있습니다.

하지만이 사용자 정의 JFrame에 드래그 기능을 부여하는 방법은 무엇입니까?

+0

어떻게 당신이 JFrame의이 이동하고 싶어를? 명성에있는 것을 클릭 한 다음 마우스를 드래그하는 것과 같은 것이 있습니까? – user489041

+0

아니요 끌기 목적의 상단 button_panel 만 –

답변

4

유일한 해결책은 무엇입니까?

글쎄, 내가 아는 유일한 해결책은 MouseListeners를 사용하는 것입니다.

좀 더 일반적인 해결책을 찾으려면 Moving Windows을 확인하면 스윙 구성 요소를 드래그 할 수 있습니다.

1

MouseListener를 적절하게 설정하여 JFrame의 내용을 드래그 할 수 있습니다. This post 예가 있습니다.

+0

ok ...하지만 유일한 해결책입니다.? –

+0

이 유일한 해결책입니까? –

+0

@Lokesh 이것은 내가 생각할 수있는 가장 쉬운 방법이다. 시도하고 싶었던 다른 접근 방법을 사용 했습니까? –

2

Mac OS X을 사용하고 있습니까? 맥 - 특정 솔루션이 있습니다 :

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); 
}`