Как дать перетащить функционал в JFame без titleBar? - PullRequest
4 голосов
/ 31 марта 2011

Я создаю 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?

Ответы [ 5 ]

5 голосов
/ 01 апреля 2011

это единственное решение?

Ну, единственное известное мне решение - это использовать MouseListeners.

Для более общего решения вы можете проверить Перемещение Windows , что позволяет сделать любой компонент Swing перетаскиваемым.

2 голосов
/ 01 апреля 2011

Используете ли вы Mac OS X? Специфичное для Mac решение:

frame.getRootPane().putClientProperty("apple.awt.draggableWindowBackground", true);
1 голос
/ 05 августа 2014

Если вас не волнует смещение между положением мыши и расположением компонентов на экране (верхний левый угол компонентов), это самое простое решение:

private class DragListener extends MouseAdapter {

   @Override
    public void mouseDragged(MouseEvent e) {
        setLocation(MouseInfo.getPointerInfo().getLocation());
    }
}
1 голос
/ 01 апреля 2011

Вы можете перетащить JFrame по его содержимому, настроив MouseListener соответствующим образом. Это сообщение имеет пример.

0 голосов
/ 07 января 2017

Вы можете просто переопределить методы мышкой и мышью, как показано:

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