PDA

View Full Version : [JAVA] JTextField non editabile ma selezionabile


GMSkull
04-11-2009, 15:07
Ciao a tutti, sto costruendo per allenamento un keygen in java. Ho una JTextField che mi restituisce il seriale in base all'ID inserito. Il problema è questo: devo rendere la text field non editabile. So già che posso usare il metodo setEditable oppure setEnabled, ma così facendo poi non posso selezionare la stringa e copiarla, per poi incollarla nel programma. Esiste qualche metodo che permetta questo? Oppure devo crearmelo io? Datemi qualche dritta perfavore.

yorkeiser
04-11-2009, 15:50
Se lo setti editable = false ed enabled = true puoi fare il copia/incolla del contenuto, ma non editarlo; non ho capito se è questo che ti serve

GMSkull
04-11-2009, 16:35
Se lo setti editable = false ed enabled = true puoi fare il copia/incolla del contenuto, ma non editarlo; non ho capito se è questo che ti serve

Scusa forse mi sono spiegato male. Avevo già fatto questo in modo tale che la textfield non sia modificabile ma selezionabile. Il problema però è che quando premo tasto destro sulla stringa selezionata non mi esce copia(tipo in windows). Volevo quindi sapere un metodo che mi permetta di fare la copia di questa stringa tramite il tasto destro del mouse seguito dal click con il sinistro sulla dicitura copia. Esattamente come in windows, la copia delle stringa poi la andrò a incollare nel programma. come posso fare?

banryu79
04-11-2009, 17:04
Puoi sempre selezionare il testo con il mouse e copiarlo con CTRL + C.
Se non ti piace puoi sempre creare un JButton, ad esempio, che come action esegue la copia del testo selezionato nel JTextField:

// action del JButton
// field è il JTextField in questione
public void actionPerformed(ActionEvent e) {
field.copy();
}

sonenos
31-01-2010, 17:36
La actionPerformed è proprio quella detta da banryu79: yourField.copy() così come i metodi .cut() o paste() se ne hai bisogno. Se ti riferivi al menu a tendina che esce cliccando col tasto destro allora devi utilizzare "PopupListener" di "MouseListener". La tendina che sarà un oggetto "JPopupMenu" viene gestita come se fosse un menu, alla quale aggiungi i JMenuItem, ovvero il taglia-copia-incolla. Ti metto un esempio di codice:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class JPopupMenuEsempio extends JFrame {
private JPopupMenu popupMenu; //La tendina!

public JPopupMenuEsempio() {

super("JPopupMenuExample");
setBounds(20, 30, 200, 250);

JTextField textField = new JTextField("JPopMenu esempio!");
textField.setEditable(false);

getContentPane().setLayout(new FlowLayout());
getContentPane().add(textField);
/******/
//inizi a creare gli item del menu a tendina
JMenuItem item1 = new JMenuItem("Taglia");
JMenuItem item2 = new JMenuItem("Copia");
JMenuItem item3 = new JMenuItem("Incolla");

//crei l'oggetto JPopupMenu - la tendina.
popupMenu = new JPopupMenu();
popupMenu.add(item1);
popupMenu.add(item2);
popupMenu.add(item3);

//dopo aver aggiunto i menuItem associamo l'evento PopupListener
//perchè appaia la tendina.
MouseListener popupListener = new PopupListener();
//associ l'ascolto del mouse al tuo textField
textField.addMouseListener(popupListener);
/******/
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);

}//end constructor

class PopupListener extends MouseAdapter {
//Devi implementare entrambi gli eventi perchè i sistemi mostrano la
//tendina o premendo o rilasciando il mouse.
public void mousePressed(MouseEvent e) {
if (e.isPopupTrigger()) {
//show() mostrarà la tendina dove le coordinate del mouse
popupMenu.show(e.getComponent(), e.getX(), e.getY());
}
}
public void mouseReleased(MouseEvent e) {
if (e.isPopupTrigger()) {
popupMenu.show(e.getComponent(), e.getX(), e.getY());
}
}
}

public static void main(String[] args) {
JPopupMenuExample popupMenuExample = new JPopupMenuExample();
}
}

Chiaramente devi associare ad i menuItem le actionPerformed cut() copy() e paste(). Potresti anche invece di un semplice menuItem inserire nella tendina degli oggetti Action che chiami ed etichetti cut copy e paste. A cui puoi associare anche un'icona ;)
Spero di non averti confuso :stordita:
Ah sono nuovo del forum, volevo solo essere d'aiuto, magari nel frattempo avevi già risolto questo problema! :D
Ciaooo