PlainDocument

Status
Nicht offen für weitere Antworten.
G

Gast2

Gast
Hi zusammen

Code:
package test;

import javax.swing.JFrame;

import studio.base.MoneyField;

public class test extends JFrame
{
	MoneyField money;
	public test()
	{
	money=new MoneyField();
	getContentPane().add(money);
	setSize(200,200);
	setVisible(true);
	}
	
	public static void main(String [] args)
	{
		new test();
	}
	
}

Code:
package studio.base;



import java.awt.Toolkit;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.JTextComponent;
import javax.swing.text.PlainDocument;

import studio.base.MEDJDateField.DateDocument;
import studio.manager.MEDParamManager;

public class MoneyField extends JTextField implements FocusListener
{
	private StringBuffer sb;
	private String datum;
	private int focus=0;
	private String initString="0.00";
	
	public MoneyField()
	{
		super();
		init();
	}
	
	public MoneyField(int x ,int y ,int w ,int h,String sToolTip)
	{
		super();
		super.setBounds(x,y,w,h);
		super.setToolTipText(sToolTip);
		init();
	}
	
	public MoneyField(String sBeschriftung)
	{
	 super.setText(sBeschriftung!=null ?sBeschriftung:"0.00");
	 init();
	}
	
	public void init()
	{
		addFocusListener(this);
		this.setDocument(new MoneyDocument(this));
	}
//	public void setText(String sBeschriftung)
//	{
//		 //super.setText(sBeschriftung!=null ?sBeschriftung:"0.00");
//		 this.setDocument(new MoneyDocument(this));
//		 initString ="0.00"; 
//	}

	public class MoneyDocument extends PlainDocument 
	{ 
	
	  private String str; 
	  private  String sep1 = ".";
	  private JTextComponent textComponent; 
	  private int newOffset; 
	  boolean sep=false;
	  int point=0;

	  public MoneyDocument(JTextComponent tc) 
	  { 
	    textComponent = tc; 
	    try{ 
	         insertString(0,initString,null); 
	       } 
	       catch(Exception ex) {} 
	  } 
 
	  public void insertString(int offset, String s, AttributeSet attributeSet) throws BadLocationException 
	  { 
	     if(s.equals(initString)) 
	        super.insertString(offset,s,attributeSet); 
	     else 
	     { 
 
	     
	             try 
	             { 
	               newOffset = offset; 
	               if(s.equals(".")&&point==0) 
	               { 
	            	 sep=true;
	            	 point++;
	                 newOffset++; 
	                 textComponent.setCaretPosition(newOffset); 
	               } 
	               else
	               {
	            	   sep=false;
	            	   Integer.parseInt(s);   
	               }
	               
	               super.remove(newOffset,1); 
	               super.insertString(newOffset,s,attributeSet); 
	             }
	             catch(Exception ex2) 
	             { 
	            	 Toolkit.getDefaultToolkit().beep(); 
	               return; //only allow integer values 
	             } 
	         } 
	     
	  } 


	  public void remove(int offset, int length) throws BadLocationException 
	  { 
	     if(sep) 
	       textComponent.setCaretPosition(offset-1); 
	     else
	    	 textComponent.setCaretPosition(offset); 
	  } 



	}

	public void focusGained(FocusEvent arg0) {
		this.selectAll();
		
	}

	public void focusLost(FocusEvent fe) {
	
	}
}

könnt euch den code kopieren und den effekt anschauen :) :)

also ich hatte vor sobald ich auf . drücke, dass er zu den cents wechselt
 
G

Gast2

Gast
nee ist bissle buggy drück mal viermal auf 1 dann gehst nimmer weiter und .00 wird auch noch nicht angehängt
 

André Uhres

Top Contributor
SirWayne hat gesagt.:
nee ist bissle buggy drück mal viermal auf 1 dann gehst nimmer weiter und .00 wird auch noch nicht angehängt
Solche Eingabehilfen sind auch recht schwierig zu entwickeln.
Ich hab das mal versucht mit dem Datum in der Form TT/MM/JJJJ
damit das / immer stehen bleibt und immer nur das Datumsegment selektiert wird,
bei dem man grad ist, und er immer über das / springt.
Es läuft bis heute noch nicht ganz rund :wink:
 

thE_29

Top Contributor
Das Problem bei deinem Datumsfeld ist sicher, das du alles in einem Textfeld nimmst ;)

Baus einfach um auf 3 (so wie mein IP Dokument).
Da erspart man sich haufen Arbeit!

Ich guck mir mal das MoneyDocument an!


Willst du eine gewisse Vorlage immer angeben, also zB 000.00 und es darf/soll dann nur 000.00 als Zahl zulässig sein?
 
G

Gast2

Gast
nee vor dem punkt sollte soviel zahlen wie möglich eingegeben werden und sobald man auf . drückt kann man die cents verändern....ich versuch auch grad noch ein bischen rum :)...

EDIT: zu beginn soltle vielleicht immer 0.00 stehen damit man erkennt das es ein MoneyDocument ist
 
G

Gast2

Gast
wie meinst wenn man alles raus löscht??? also ich dachte wenn er alle zahlen vor dem komma gelöscht hat dann sollte wieder 0.00 stehen , aber soweit hab ich noch wenn ich ehtlich bin noch gar nicht gedacht, da ich nicht mal das einfügen richtig hinbekomme =)
 
G

Gast2

Gast
hammer hart echt geil...
du kannst echt eine eigene package schreiben :) schick sie gleich zu sun ....
also den code muss ich jetzt echt mal studieren...
thx
 

thE_29

Top Contributor
So, neue Version gibts auch schon!

Noch 3 neue Methoden (setText überschrieben und 2 Geld hol Methoden)
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben