Beschriftungen in Buttons und Labels eingeben

Ich hab in NetBeans gesehen, dass man dort Beschriftungen bspw. für Buttons und Labels per Doppelklick erledigen kann.
Im Button oder Label wird dann ein Textfeld sichtbar, in welches man dann den Text eingeben kann. Nach Beenden der Aktion hat dann die Komponente den eingegebenen Text drauf stehen.
Für ein Programm, an welchem ich momentan arbeite, würde mir genau diese Funktionalität gefallen. Weiß jemand wie man sowas programmieren kann?

Einfach ein Textfeld auf die gleiche Stelle packen was dann sichtbar gemacht wird.

Ah ich Blödmann … lesen soll gelernt sein.

Wir können einen undecorated JDialog machen mit der Grösse und Position
vom JButton/JLabel. Das folgende Beispiel reagiert auf Rechtsklick:

    for (int i = 0; i < comps.length; i++) {
        final JComponent comp = comps**;
        comp.addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(final MouseEvent evt) {
                if (SwingUtilities.isRightMouseButton(evt)) {
                    final JDialog d = new JDialog();
                    d.setUndecorated(true);
                    d.setSize(comp.getSize());
                    d.setLocation(comp.getLocationOnScreen());
                    String text = "";
                    if (comp instanceof JButton) {
                        text = ((JButton) comp).getText();
                    } else if (comp instanceof JLabel) {
                        text = ((JLabel) comp).getText();
                    }
                    final JTextField t = new JTextField(text);
                    t.addFocusListener(new FocusListener() {
                        @Override
                        public void focusGained(final FocusEvent e) {
                        }
                        @Override
                        public void focusLost(final FocusEvent e) {
                            d.dispose();
                        }
                    });
                    t.addActionListener(new ActionListener() {
                        @Override
                        public void actionPerformed(final ActionEvent e) {
                            if (comp instanceof JButton) {
                                ((JButton) comp).setText(t.getText());
                            } else if (comp instanceof JLabel) {
                                ((JLabel) comp).setText(t.getText());
                            }
                            d.dispose();
                        }
                    });
                    d.add(t);
                    d.setVisible(true);
                }
            }
        });
    }
}```

Danke erst mal. Interessante Lösung, André. Muss ich mal probieren.
Eagle, das wird aber wohl nicht in einem GridLayout funktionieren? Oder nur mit entfernen und wieder hinzufügen des Buttons. Das ist eigentlich nicht, was ich wollte.
Andere Ideen sind jederzeit willkommen. Danke schonmal.

ne mit Grind gehts nicht da ist die Lösung von Andre besser

Eine andere Möglichkeit habe ich mit CardLayout ausprobiert.
Die Komponenten liegen hier in JPanels, die in einem CardLayout hintereinander liegen.
Beim Doppelklick auf die zu beschriftende Komponente wird das JPanel mit dem JTextfield nach vorne geholt. Nach Texteingabe (z.B. Bestätigen mit Enter) wird das JPanel mit der fertig beschrifteten Komponente nach vorne geholt.