Swing: redimensionando um JFrame como o Frames no Linux, por exemplo

Eu gostaria de saber se existe a possibilidade de implementar o redimensionamento de um JFrame dessa maneira, que ele foi redimensionado como por exemplo as janelas standart no linux. Para ser mais preciso: Se o usuário começar a arrastar, apenas o tamanho futuro, se a janela for visualizada, enquanto o conteúdo original não for redimensionado. Assim que o usuário solta o mouse, o quadro é redimensionado para esse tamanho. Nas imagens:

(1) estado antes de redimensionar

(2) usuário começa a drage (no círculo vermelho)

(3) usuário libera o mouse, o quadro é redimensionado

É possível perceber isso em Java Swing?

EDITAR:

Como este programa um dia deve rodar também em Java RE menor como o 7, tentei combinar sugestões do mKorbel com a sugestão no comentário com o Quadro translucido. O resultado está próximo do objetivo, exceto que

O conteúdo do contentPane é redimensionado depois que eu paro de mover o mouse, não quando o mouse é liberadoO título do quadro é redimensionado imediatamente, não apenas quando eu paro de arrastar a borda do quadro.Ele só funciona se redimensionado da direita ou da parte inferior, caso contrário, o conteúdo se move com o arrastar.

Eu acho que o primeiro ponto é resolvido por uma combinação do código e um MouseListener, algo como se mouseReleased (), em seguida, redimensionar. Aqui está o código, fique à vontade para experimentá-lo. Para sugestões adicionais, ainda estou feliz com qualquer sugestão.

O código é uma pequena modificação doGradienteTranslucenteWindowDemo.java dos Tutoriais Java. Espero que seja permitido publicá-lo aqui, caso contrário, indique-me qualquer violação contra as causas dos direitos autorais. O JPanel preto é suposto ser o conteúdo do aplicativo, onde o contentPane permanece invisível.

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

questionAnswers(3)

yourAnswerToTheQuestion