MouseEvents für JTextField ausschalten

Status
Nicht offen für weitere Antworten.

kmt

Mitglied
Hallo,

ich vermute, die lösung ist ganz einfach, aber ich komme nicht darauf.
Ich habe ein JTextfield, welches ich nicht-editierbar setzen möchte. Leider reagiert das Feld dann aber immer noch auf die Mausclicks auf dieses Feld.

dies ist mein Textfield:

Code:
txtfield_name = new JTextField("name");
txtfield_name.addCaretListener(this.controller);
pane.add(txtfield_name);

und dies meine Funktion, die das Feld "an und aus"-schalten soll:
Code:
public void enableNameField(boolean b) {
	this.txtfield_name.setEditable(b);
}
 
Wildcard hat gesagt.:
setEnabled(false)

nein, das geht leider auch nicht. es ist dann immer noch mit der Maus klickbar (erzeugt bei mir unschöne Exceptions, weil das zugehörige model noch nicht existert..).
es sieht auch etwas anderes aus. SetEnable erzeugt einen leichtgrünen Rand und ist sonst weiss, setEditable erzeugt den gleichen Rand, ist aber grau. Aber nicht die Farbe ist mir wichtig, sondern das (nicht-)reagieren auf Mausklicks.

setFocusable habe ich auch schon probiert..

gruß, kmt
 
Verjigorm hat gesagt.:
zeig mal mehr Code, Rätselraten geht nur mit Kristallkugeln
hier ein kurzes Programm. der setEdit Button setzt das Editable, der setEnabled setzt das Enabled des Textfeldes. Klickt man auf das Textfeld, so wird (unabhángig vom Zustand des Textfeldes) die caretUpdate-Funktion aufgerufen.

Code:
package gui;

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import javax.swing.event.*;



public class Cgui extends JFrame 
implements CaretListener, ActionListener{
	
	
	private JPanel mainpane;
	JButton btEdit;
	JButton btEnable;
	JTextField field;
	   
	Cgui(){
		addWindowListener(new WindowAdapter() {
    		public void windowClosing(WindowEvent e) {
    			System.exit(0);
    		}
    	});
	}
	
	
	private void init(){
		this.setContentPane(makeContentPane());
	  	this.setBounds(200,200,400,100);

	  	this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
	  	this.setVisible(true);

	}
	
	public JPanel makeContentPane() {
		
		mainpane = new JPanel();
		
		mainpane.setLayout(new BorderLayout(1,2));
		JPanel p = new JPanel();
		btEdit = new JButton("setEditable");
		btEdit.addActionListener(this);
		p.add(btEdit);
		
		
		btEnable = new JButton("setEnable");
		btEnable.addActionListener(this);
		p.add(btEnable);
		
		this.field = new JTextField("text");
		this.field.addCaretListener(this);
		p.add(this.field );
		
		mainpane.add(p);
		return mainpane;
	}
	  
	public void caretUpdate(CaretEvent e) {
		System.out.println("something happens");
	}


	public void actionPerformed(ActionEvent e) {
		if (e.getSource().equals(btEdit))
			this.field.setEditable(!this.field.isEditable());
		else if (e.getSource().equals(btEnable))
			this.field.setEnabled(!this.field.isEnabled());
	}


	public static void main(String[] args)	    {
    	Cgui cgui = new Cgui();
    	cgui.init();
	}
}
 
hm du könntest in der caretUpdate(...) irgendeinen Status deines Textfelds abfragen z.B. !isFocusable() und dann aus der Funktion rausspringen.
 
1. gibt doch bestimmt ein isEditable()??? und dann kannst du doch in der caret methode unterscheiden...
2. oder du addest/remove dein listener in deiner enableNameField...
 
@Verjigorm und @SirWayne: ja, das ist möglich und im Moment mache ich es auch so (if isEditable..). Ungünstig ist es aber trotzdem. Und richtig sinnvoll scheint es mir nicht zu sein, dass ein nicht editierbares Feld immer noch anklickbar ist...

Trotzdem Dank, Gruß kmt
 
du könntest es auch mit einem MouseListener versuchen, vielleicht klappts dann ...
 
kmt hat gesagt.:
@Verjigorm und @SirWayne: ja, das ist möglich und im Moment mache ich es auch so (if isEditable..). Ungünstig ist es aber trotzdem. Und richtig sinnvoll scheint es mir nicht zu sein, dass ein nicht editierbares Feld immer noch anklickbar ist...

Trotzdem Dank, Gruß kmt

Also dieses Verhalten beobachte ich persönlich auch zum ersten Mal...
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben