moin
heute wird es etwas schwieriger ...
vielleicht habt ihr ja ne idee...
also folgendes problem:
ich hab ne tabelle in der die felder mit einem editor bzw textfield gefüllt sind
so in dem editor überprüf ich halt auf verschiedene sachen wie das in manchen feldern nur zahlen drin stehn dürfen
in anderen darf alles drin stehn wieder andere bekommen statt dem editor nen popup menü usw ...
mich interessieren aber nur die beiden fälle wo der editor aktiv ist, einmal "nur zahlen" einmal "komplette tastatur"
so nun: was will ich eigentlich:
ich möchte bei feldern die nur mit zahlen gefüllt werden dürfen per + und - die zahlen erhöhen bzw minimieren können...
wo fang ich da jetzt aber an?
also wo in dem editor setz ich an um mir meinen eigenen listner der auf die taste + und - reagiert hin?
ahja und wie lass ich einen listner auf nur eine taste reagieren?
ich poste mal noch meine classe vielleicht hilft das weiter:
mfg Kala
heute wird es etwas schwieriger ...
vielleicht habt ihr ja ne idee...
also folgendes problem:
ich hab ne tabelle in der die felder mit einem editor bzw textfield gefüllt sind
Code:
class Editor extends JTextField implements TableCellEditor, DocumentListener{
so in dem editor überprüf ich halt auf verschiedene sachen wie das in manchen feldern nur zahlen drin stehn dürfen
in anderen darf alles drin stehn wieder andere bekommen statt dem editor nen popup menü usw ...
mich interessieren aber nur die beiden fälle wo der editor aktiv ist, einmal "nur zahlen" einmal "komplette tastatur"
so nun: was will ich eigentlich:
ich möchte bei feldern die nur mit zahlen gefüllt werden dürfen per + und - die zahlen erhöhen bzw minimieren können...
wo fang ich da jetzt aber an?
also wo in dem editor setz ich an um mir meinen eigenen listner der auf die taste + und - reagiert hin?
ahja und wie lass ich einen listner auf nur eine taste reagieren?
ich poste mal noch meine classe vielleicht hilft das weiter:
Code:
class Editor extends JTextField implements TableCellEditor, DocumentListener{
private List<CellEditorListener> listeners = new ArrayList<CellEditorListener>();
private int akt_row=0;
private int akt_col=0;
public Editor(){
// Der Editor hört sich selbst ab, so kann er auf jede Benutzereingabe reagieren
getDocument().addDocumentListener( this );
}
public Component getTableCellEditorComponent( JTable table, Object value, boolean isSelected, int row, int column ) {
// Diese Methode wird von der JTable aufgerufen, wenn der Editor angezeigt werden soll
akt_row=row;
akt_col=column;
setText( value.toString() );
return this;
}
public void setAktRowCol() {
akt_row=0;
akt_col=1;
}
public void addCellEditorListener( CellEditorListener l ) {
listeners.add( l );
}
public void cancelCellEditing() {
// Falls abgebrochen wird, werden alle Listeners informiert
ChangeEvent event = new ChangeEvent( this );
for( CellEditorListener listener : listeners.toArray( new CellEditorListener[ listeners.size() ] ))
listener.editingCanceled( event );
}
public Object getCellEditorValue() {
// Gibt den aktuellen Wert des Editors zurück
return getText();
}
public boolean isCellEditable( EventObject anEvent ) {
// Im Falle eines MouseEvents, muss ein Doppelklick erfolgen, um den Editor zu aktivieren.
// Ansonsten wird der Editor auf jeden Fall aktiviert
if( anEvent instanceof MouseEvent )
return ((MouseEvent)anEvent).getClickCount() > 1;
return true;
}
public void removeCellEditorListener( CellEditorListener l ) {
listeners.remove( l );
}
public boolean shouldSelectCell( EventObject anEvent ) {
return true;
}
public boolean stopCellEditing() {
// Sollte die Eingabe falsch sein, darf das editieren nich gestoppt werden
if(zurueckbutton){
zurueckbutton=false;
setAktRowCol();
cancelCellEditing();
return true;
}
if( !isValid_Spalte() ) {
return false;
}
// Ansonsten werden die Listener vom stop unterrichtet
ChangeEvent event = new ChangeEvent( this );
for( CellEditorListener listener : listeners.toArray( new CellEditorListener[ listeners.size() ] ))
listener.editingStopped( event );
return true;
}
public void changedUpdate( DocumentEvent e ) {
update();
}
public void insertUpdate( DocumentEvent e ) {
update();
}
public void removeUpdate( DocumentEvent e ) {
update();
}
private boolean isValid_Spalte(){
String parameter=""+model.getValueAt(akt_row, akt_col-1).toString();
int objects_id=Integer.parseInt(""+model.getValueAt(2, 1).toString());
// Bestimmt, was eine gültige Eingabe ist.
int erg = DB.getSpaltenDeklaration(parameter,objects_id);
if(erg==GlobaleVariablen.zellen_inhalts_beschreibung_1){
if(getText().matches( "[0-9]+" )){
if((parameter.compareToIgnoreCase("Pos_X")==0)||(parameter.compareToIgnoreCase("Pos_Y")==0)||(parameter.compareToIgnoreCase("Size_X")==0)||(parameter.compareToIgnoreCase("Size_Y")==0)){
return true;
}else{
int max = DB.getMaxWert(parameter,objects_id);
int min = DB.getMinWert(parameter,objects_id);
if((Integer.parseInt(getText())>=min)&&(Integer.parseInt(getText())<=max)){
return true;
}else{
return false;
}
}
}else{
return false;
}
}else{
if(erg==GlobaleVariablen.zellen_inhalts_beschreibung_2){
if(DB.isNurZahlen(objects_id, parameter)){
return getText().matches( "[0-9]+" );
}else{
if(DB.isFloatWert(objects_id, parameter)){
return getText().matches( "[0-9]+\u002e[0-9]+" );
}else{
return getText().matches( "[a-zA-Z0-9\u0020-\u002f\u003a-\u0040]+" );
}
}
}else{
if(erg==GlobaleVariablen.zellen_inhalts_beschreibung_3){
return getText().matches( "#[a-zA-Z0-9]+" );
}else{
return getText().matches( "[a-zA-Z0-9]+" );
}
}
}
}
private void setPos(String eigenschaft, String objects_id){
for(int i=0 ;i<labelarray.length; i++){
if(labelarray[i]==null){
break;
}
String akt_obj_titel = labelarray[i].getTitle();
String akt_obj[] = GlobaleFunction.split(akt_obj_titel, ":");
int pos = Integer.parseInt(getText());
if(akt_obj[0].compareToIgnoreCase(""+model.data[2][1])==0){
int pos_x=labelarray[i].getX();
int pos_y=labelarray[i].getY();
int size_x=labelarray[i].getWidth();
int size_y=labelarray[i].getHeight();
if(eigenschaft.compareToIgnoreCase(GlobaleVariablen.tabel_feld_4)==0){
labelarray[i].setBounds(pos, pos_y, size_x, size_y);
param_einzeln(objects_id, eigenschaft, ""+(pos+1));
}
if(eigenschaft.compareToIgnoreCase(GlobaleVariablen.tabel_feld_5)==0){
labelarray[i].setBounds(pos_x, pos, size_x, size_y);
param_einzeln(objects_id, eigenschaft, ""+pos);
}
if(eigenschaft.compareToIgnoreCase(GlobaleVariablen.tabel_feld_6)==0){
labelarray[i].setBounds(pos_x, pos_y, pos, size_y);
param_einzeln(objects_id, eigenschaft, ""+(pos-2));
}
if(eigenschaft.compareToIgnoreCase(GlobaleVariablen.tabel_feld_7)==0){
labelarray[i].setBounds(pos_x, pos_y, size_x, pos);
param_einzeln(objects_id, eigenschaft, ""+(pos-11));
}
}
}
}
private void setBorder_Color(String eigenschaft, String objects_id){
for(int i=0 ;i<labelarray.length; i++){
if(labelarray[i]==null){
break;
}
String akt_obj_titel = labelarray[i].getTitle();
String akt_obj[] = GlobaleFunction.split(akt_obj_titel, ":");
if(akt_obj[0].compareToIgnoreCase(""+model.data[2][1])==0){
String border_color=getText();
Color color = new Color (GlobaleFunction.HEXtoRGB(border_color));
String titel = labelarray[i].getTitle();
String titelgetrennt[]=GlobaleFunction.split(titel, ":");
labelarray[i].setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(color, 2), titelgetrennt[1], TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, new Font("Dialog", Font.BOLD, 12), new Color(51, 51, 51)));
param_einzeln(objects_id, eigenschaft, ""+border_color);
}
}
}
private void setObjektLabel(String objektID){
for(int i=0 ;i<labelarray.length; i++){
if(labelarray[i]==null){
break;
}
String akt_obj_titel = labelarray[i].getTitle();
String akt_obj[] = GlobaleFunction.split(akt_obj_titel, ":");
if(akt_obj[0].compareToIgnoreCase(objektID)==0){
labelarray[i].setTitle(akt_obj[0]+":"+getText()+":"+akt_obj[2]);
}
}
}
public void update(){
// Verändert die Umrandung des Editors, jenachdem, ob eine gültige
// oder eine ungültige Eingabe gemacht wurde
Color color;
String objects_id = model.getValueAt(2, 1).toString();
String eigenschaft = model.getValueAt(akt_row, akt_col-1).toString();
if(eigenschaft.compareToIgnoreCase(GlobaleVariablen.tabel_feld_3)==0){
if( isValid_Spalte() ){
color = Color.GREEN;
String objektID=""+model.data[2][1];
setObjektLabel(objektID);
}else {
color = Color.RED;
}
}else{
if(eigenschaft.compareToIgnoreCase(GlobaleVariablen.tabel_feld_8)==0){
if( isValid_Spalte() ){
color = Color.GREEN;
setBorder_Color(eigenschaft, objects_id);
}else {
color = Color.RED;
}
}else{
if((eigenschaft.compareToIgnoreCase(GlobaleVariablen.tabel_feld_4)==0)||
(eigenschaft.compareToIgnoreCase(GlobaleVariablen.tabel_feld_5)==0)||
(eigenschaft.compareToIgnoreCase(GlobaleVariablen.tabel_feld_6)==0)||
(eigenschaft.compareToIgnoreCase(GlobaleVariablen.tabel_feld_7)==0)
){
if( isValid_Spalte() ){
color = Color.GREEN;
setPos(eigenschaft, objects_id);
}else {
color = Color.RED;
}
}else{
if( isValid_Spalte() ){
//Wenn Parameter sich ändern
int rowData_len=rowData_read.length;
int start_obj=0;
int stop_obj=0;
for(int i=0; i<rowData_len; i++){
if(rowData_read[i][0]==null){
break;
}
if((rowData_read[i][0].toString().compareToIgnoreCase("Objekt_ID")==0)&&(rowData_read[i][1].toString().compareToIgnoreCase(objects_id)==0)){
start_obj=i+1;
}
}
for(int i=start_obj; i<rowData_len; i++){
if(rowData_read[i][0]==null){
stop_obj=i-1;
break;
}
if(rowData_read[i][0].toString().compareToIgnoreCase("Objekt_ID")==0){
stop_obj=i-1;
break;
}
}
update_rowData_read(start_obj, stop_obj, akt_row, akt_col, ""+getCellEditorValue());
color = Color.GREEN;
param_einzeln(objects_id, eigenschaft, ""+getCellEditorValue());
}else {
color = Color.RED;
}
}
}
}
setBorder( BorderFactory.createLineBorder( color ));
}
}
mfg Kala