Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Rinominare JLabel con doppio click

    Come posso ottenere riinominare una label con un doppio click ?

    E' funzionalita' tipica di molti programmi:
    Di solito si clicca sulla label che diventa editabile ed il testo selezionato.
    Si digita il nuovo testo e dopo aver premuto invio la label viene settata col nuovo testo.

    grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157

    Re: Rinominare JLabel con doppio click

    Originariamente inviato da Mr.Bloom
    Come posso ottenere riinominare una label con un doppio click ?

    E' funzionalita' tipica di molti programmi:
    Di solito si clicca sulla label che diventa editabile ed il testo selezionato.
    Si digita il nuovo testo e dopo aver premuto invio la label viene settata col nuovo testo.

    grazie
    soluzione semplice: non usi una JLabel, ma un JTextField che renderizzi come una label (non mi ricordo bene quali istruzioni usare, ma sono dei set sull'istanza).
    soluzione complicata: mettere un mouse listener che in base alla posizione capisca che sei sulla label x e che ci hai cliccato due volte....mi è venuto mal di testa solo a scriverlo, torna alla soluzione 1.
    RTFM Read That F*** Manual!!!

  3. #3
    Si infatti...
    ieri ho provato un po la soluzione due fino al doppio click ed al riconoscimento molto semplice ma il seguito è venuto un tantino complicato...molto meglio la soluzione uno a cui non avevo pensato.
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    ora che ci penso, potresti usare anche l'accoppiata mouselistener + keylistener sulla label, girandoci un po' intorno dovresti farcela....ma snaturi l'essenza di un JLabel : è un'etichetta, cambiala via codice se vuoi. Se vuoi scrivere il componente andato è il JTextField, che ha già implementati i controlli che dovresti fare tu...insomma sarebbe reinventare la ruota

    @schumy
    mi capita spesso che la soluzione più semplice sembra troppo banale per essere usata!!
    RTFM Read That F*** Manual!!!

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Beh... anche così non è male:

    codice:
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    
    public class EditLabel extends JFrame implements ActionListener {
    
       private class DoubleClick extends MouseAdapter {
          @Override
          public void mouseClicked(MouseEvent me) {
             if (me.getClickCount() == 2) {
                switchLabelTextField( true );
             }
          }
       }
    
       private JPanel jpLabel;
       private JLabel lbl;
       private JTextField txt;
    
       public EditLabel() {
          Container c = getContentPane();
          c.setLayout( new BorderLayout() );
    
          jpLabel = new JPanel( new BorderLayout() );
    
          lbl = new JLabel("Fai Doppio Clic:");
          lbl.addMouseListener( new DoubleClick() );
    
          txt = new JTextField();
          txt.addActionListener( this );
    
          jpLabel.add(lbl, BorderLayout.WEST);
    
          c.add(jpLabel, BorderLayout.NORTH);
    
          setTitle("Edit JLabel with Double-Click");
          setSize(800, 600);
          setLocationRelativeTo( null );
          setDefaultCloseOperation( EXIT_ON_CLOSE );
          setVisible( true );
       }
    
       private void switchLabelTextField(boolean lblToTxt) {
          if ( lblToTxt ) {
             txt.setText( lbl.getText() );
             jpLabel.remove( lbl );
             jpLabel.add(txt, BorderLayout.WEST);
             txt.requestFocusInWindow();
          } else {
             jpLabel.remove( txt );
             jpLabel.add(lbl, BorderLayout.WEST);
          }
          jpLabel.doLayout();
          doLayout();
          repaint();
       }
    
       @Override
       public void actionPerformed(ActionEvent ae) {
          lbl.setText( txt.getText() );
          switchLabelTextField( false );
       }
    
       public static void main(String[] args) {
          EditLabel e = new EditLabel();
       }
    }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.