Swing: изменение размера JFrame, как Frames в Linux, например

Я хотел бы знать, есть ли возможность реализовать изменение размера JFrame таким образом, чтобы он был изменен, как, например, стандартные окна в Linux. Чтобы быть более точным: если пользователь начинает делать перетаскивание, будет отображаться только будущий размер окна, если исходный контент не будет изменен. Как только пользователь отпускает мышь, рамка изменяется до этого размера. В изображениях:

(1) состояние до изменения размера

(2) пользователь начинает драже (в красном круге)

(3) пользователь отпускает мышь, рамка изменяется

Возможно ли реализовать это в Java Swing?

РЕДАКТИРОВАТЬ:

Поскольку однажды эта программа должна работать и на более низкой Java RE, как и на 7, я попытался объединить предложения mKorbel и предложение в комментарии с полупрозрачным фреймом. Результат близок к цели, за исключением того, что

Размер содержимого панели содержимого изменяется после того, как я прекращаю движение мыши, а не после отпускания мышиРазмер кадра изменяется сразу, а не только когда я прекращаю перетаскивать границу кадра.Он работает только при изменении размера справа или снизу, в противном случае содержимое перемещается при перетаскивании.

Я думаю, что первая точка разрешима с помощью комбинации кода и MouseListener, что-то вроде if mouseReleased (), затем изменить размер. Вот код, не стесняйтесь попробовать. Для дальнейших предложений я все еще рад любым предложениям.

Код представляет собой небольшую модификациюGradientTranslucentWindowDemo.java из учебников Java. Я надеюсь, что разрешено публиковать это здесь, в противном случае, пожалуйста, укажите мне любое нарушение авторских прав. Предполагается, что черный JPanel является содержимым приложения, в то время как contentPane остается невидимым.

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.beans.PropertyChangeListener;

import javax.swing.*;
import static java.awt.GraphicsDevice.WindowTranslucency.*;

public class GroundFrame extends JFrame {

    Timer timer;
    JPanel panel2;

    public GroundFrame() {
        super("GradientTranslucentWindow");

        setBackground(new Color(0,0,0,0));
        setSize(new Dimension(300,200));
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel() {
        panel.setBackground(new Color(0,0,0,0));
        setContentPane(panel);

        setLayout(null);
        panel2 = new JPanel();
        panel2.setBackground(Color.black);
        panel2.setBounds(0,0,getContentPane().getWidth(), getContentPane().getHeight());
        getContentPane().add(panel2);

        addComponentListener(new ComponentListener() {

            @Override
            public void componentShown(ComponentEvent e) {}

            @Override
            public void componentResized(ComponentEvent e) {
                timer = new Timer(50, new Action() {

                    @Override
                    public void actionPerformed(ActionEvent e) {
                        if(timer.isRunning()){

                        }else{
                            resizePanel(getContentPane().getSize());
                        }
                    }

                    @Override
                    public void setEnabled(boolean b) {}

                    @Override
                    public void removePropertyChangeListener(PropertyChangeListener listener) {}

                    @Override
                    public void putValue(String key, Object value) {}

                    @Override
                    public boolean isEnabled() {return false;}

                    @Override
                    public Object getValue(String key) {return null;}

                    @Override
                    public void addPropertyChangeListener(PropertyChangeListener listener) {}
                });
                timer.setRepeats(false);
                timer.start();

            }

            @Override
            public void componentMoved(ComponentEvent e) {}

            @Override
            public void componentHidden(ComponentEvent e) {}
        });
    }

    public void resizePanel(Dimension dim){
        panel2.setBounds(0,0,dim.width, dim.height);
        repaint();
    }

    public static void main(String[] args) {
        GraphicsEnvironment ge =
            GraphicsEnvironment.getLocalGraphicsEnvironment();
        GraphicsDevice gd = ge.getDefaultScreenDevice();
        boolean isPerPixelTranslucencySupported =
            gd.isWindowTranslucencySupported(PERPIXEL_TRANSLUCENT);

        if (!isPerPixelTranslucencySupported) {
            System.out.println(
                "Per-pixel translucency is not supported");
                System.exit(0);
        }

        JFrame.setDefaultLookAndFeelDecorated(true);

        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                GroundFrame gtw = new GroundFrame();
                gtw.setVisible(true);
            }
        });
    }
}

Ответы на вопрос(3)

Ваш ответ на вопрос