Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Java » Probleme mit JTable und Tabulatoren

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
02.06.2006, 21:19 Uhr
Lumina



die Methode gibt es bei mir nicht... Welches jdk müsste ich dazu haben? oder such ich an der falschen Stelle?

Zu Mnemonics: Also das mit der 9 und der ) versteh ich jetzt, aber warum funzt des mit den anderen "normalen" Buchstaben auch nicht immer? Hab auf einem Button "seriell" als Beschriftung und das 's' als Mnemonic gesetzt. Das geht nur am Anfang, wenn ich noch keinen anderen Button ausgeblendet hab. Warum gibts da nicht sowas wie this.setFocus(Component comp)?!
--
*******************************************
Willst du glücklich sein im Leben, trage bei zu and'rer Glück,
denn die Freude, die wir geben, kehrt ins eig'ne Herz zurück!
*******************************************
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
02.06.2006, 21:28 Uhr
KaraHead



Sorry, hab vergessen zu sagen, dass setDefaultEditor in der JTable liegt und nicht in der Klasse TableColumn.

poste mal ein bische Code zu den Mnemonics, vielleicht stimmt nur die Reihenfolge nicht.
Außerdem gibt es noch die Methde requestFocus(), die bei jeder Komponente existiert, die von JComponent erbt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
02.06.2006, 21:31 Uhr
Lumina



erst nochmal zu der JTable:

hab jetzt das so getestet:

C++:
    DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
    renderer.setToolTipText("Bitte die gewünschte Einheit auswählen.");
    DefaultTableColumnModel tcm = new DefaultTableColumnModel();

    tm = new DefaultTableModel(nrOfRows, 5) {
      public boolean isCellEditable(int row, int col) {
        return (col == 0 ? false : true); //Sperrt die Eingabe in Spalte 0
    }};

    // Textfeld für Kommazahleneingabe anlegen:
    JTextField txtForFloats = new JTextField();

     txtForFloats.addKeyListener(new KeyAdapter() {
        public void keyTyped(KeyEvent e) {
          char c = e.getKeyChar();
          JOptionPane opt = new JOptionPane();
          opt.showMessageDialog(null, String.valueOf(c));
          if (!Character.isDigit(c) && c != KeyEvent.VK_ENTER
                  && c != KeyEvent.VK_COMMA && c != KeyEvent.VK_PERIOD
                  && c != KeyEvent.VK_TAB
                  && c != KeyEvent.VK_BACK_SPACE) {
                  Toolkit.getDefaultToolkit().beep();
                  e.consume();
          }
        }
     });

    // Das Kommazahlen-Textfeld als Editor verwenden:
    TableCellEditor editFloats = new DefaultCellEditor(txtForFloats);

    // Spalte A: (Pumpe)
    TableColumn tcApump = new TableColumn(0,30);
    tcApump.setHeaderValue("Px");
    tcApump.setResizable(false);
    tcm.addColumn(tcApump);

    // Spalte B: (Maximaldruck)
    TableColumn tcBpMax = new TableColumn(1,80);
    tcBpMax.setHeaderValue("pMax");
//    tcBpMax.setCellEditor(editFloats);
    this.jTblIsData.setDefaultEditor(TableColumn.class, editFloats);
    tcm.addColumn(tcBpMax);




Geht leider immer noch nicht...
--
*******************************************
Willst du glücklich sein im Leben, trage bei zu and'rer Glück,
denn die Freude, die wir geben, kehrt ins eig'ne Herz zurück!
*******************************************
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
02.06.2006, 21:47 Uhr
Lumina



Hey, cool, das mit den Mnemonics ist mir jetzt voll klar! Hab zwischendrin immer ein paar Buttons ausgeblendet. Dummerweise lag da wohl grad dann der Fokus drauf.
Hab also dann immer mit requestFocus() einen anderen Button, der nie ausgeblendet wird, angepeilt und schon gehts.

Spitze! jetzt wenn das andere noch funzen würde, wärs natürlich optimal...
--
*******************************************
Willst du glücklich sein im Leben, trage bei zu and'rer Glück,
denn die Freude, die wir geben, kehrt ins eig'ne Herz zurück!
*******************************************
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
02.06.2006, 21:47 Uhr
KaraHead




C++:
this.jTblIsData.setDefaultEditor(Object.class, editFloats);



Das erste Argument erwartet die Klasse des Inhaltes der Column und nicht die Column an sich.
Wenn du editFloats nur auf Float-Spalten anwenden willst, dann musst du

C++:
this.jTblIsData.setDefaultEditor(Float.class, editFloats);


eingeben.
Wenn du die editFloats nur auf FloatSpalten, damit mein ich Spalten in denen nur Floats eingegeben werden, anwenden willst, darfst du nicht vergessen, dass international der Punkt als Kommazeichen gilt.

Dieser Post wurde am 02.06.2006 um 21:50 Uhr von KaraHead editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
02.06.2006, 21:57 Uhr
Lumina



Der DefaultEditor wird also genutzt, wenn ich keinen anderen CellEditor auf eine TableColumn lege. Aha. Sollte gehen, tuts aber wieder nicht. Langsam nervt mich das. Nur gut, dass das bei dir nicht den Anschein macht und du mir immer noch antwortest. Danke!

und warum geht die Methode setCellEditor wenn eine ComboBox zugrundeliegt?

Ist alles so kompliziert...

Hab des TableColumn.class durch Float.class ersetzt... wieder Fehlanzeige, leider.
Das macht mich echt noch ganz zapplig.
--
*******************************************
Willst du glücklich sein im Leben, trage bei zu and'rer Glück,
denn die Freude, die wir geben, kehrt ins eig'ne Herz zurück!
*******************************************

Dieser Post wurde am 02.06.2006 um 22:04 Uhr von Lumina editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
02.06.2006, 22:08 Uhr
KaraHead



z.B. die Methode getColumnClass(int col) von TableModel überschreiben

C++:
tm = new DefaultTableModel(nrOfRows, 5) {
      public boolean isCellEditable(int row, int col) {
        return (col == 0 ? false : true); //Sperrt die Eingabe in Spalte 0
     }

     public Class getColumnClass(int col){
       if(col == 1 || col == 3){
          return Float.class;
       }
       return Object.class;
     }
};

//Und dann
this.jTblIsData.setDefaultEditor(Float.class, editFloats);



Leider muss ich dir Recht geben. JTable und JTree sind die 2 schwierigsten Komponenten die es in Java gibt. Man könnte fast schon Bücher alleine über die 2 Komponenten schreiben.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
02.06.2006, 22:24 Uhr
Lumina



das gibt den komischen Effekt, dass in meiner Spalte 1 die Eingabe von rechts nach links angezeigt wird und noch dazu meine ComboBoxen in den Spalten 2 und 4 verschwunden sind...
da waren die doch als Editor definiert und sind es noch... warum macht der DefaultEditor die dann platt? Dann ist er doch nicht mehr default...!?

Und die JAVA-Bücher, die ich kenne, die schreiben nur, dass man toll in einer JTable Daten anzeigen kann und das wars dann auch schon, leider!
--
*******************************************
Willst du glücklich sein im Leben, trage bei zu and'rer Glück,
denn die Freude, die wir geben, kehrt ins eig'ne Herz zurück!
*******************************************
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
02.06.2006, 22:32 Uhr
Lumina




C++:
    tm = new DefaultTableModel(nrOfRows, 5) {
      public boolean isCellEditable(int row, int col) {
        return (col == 0 ? false : true); //Sperrt die Eingabe in Spalte 0
      }
      
      public Class getColumnClass(int col) {
       if (col == 1 || col == 3) {
          return Float.class;
       }
       if (col == 2 || col == 4) {
         return JComboBox.class;
       }
       return Object.class;
     }
    };

    // Textfeld für Kommazahleneingabe anlegen:
    JTextField txtForFloats = new JTextField();

     txtForFloats.addKeyListener(new KeyAdapter() {
        public void keyTyped(KeyEvent e) {
          char c = e.getKeyChar();
          JOptionPane opt = new JOptionPane();
          opt.showMessageDialog(null, String.valueOf(c));
          if (!Character.isDigit(c) && c != KeyEvent.VK_ENTER
                  && c != KeyEvent.VK_COMMA && c != KeyEvent.VK_PERIOD
                  && c != KeyEvent.VK_TAB
                  && c != KeyEvent.VK_BACK_SPACE) {
                  Toolkit.getDefaultToolkit().beep();
                  e.consume();
          }
        }
     });

    // Das Kommazahlen-Textfeld als Editor verwenden:
    TableCellEditor editFloats = new DefaultCellEditor(txtForFloats);
    this.jTblIsData.setDefaultEditor(Float.class, editFloats);



Damit bekomm ich eine Exception, sobald ich aus einer JComboBox was ausgewählt hab,
außerdem kann ich immer noch Buchstaben in Spalte 2 und 4 eingeben....

Exception:
Starte CDokumente und Einstellungen\Sonja\Eigene Dateien\Pumpenhelferlein\FrmTest.java

java.lang.IllegalArgumentException: Cannot format given Object as a Number
at java.text.NumberFormat.format(NumberFormat.java:219)
at java.text.Format.format(Format.java:133)
at javax.swing.JTable$DoubleRenderer.setValue(JTable.java:3397)
at javax.swing.table.DefaultTableCellRenderer.getTableCellRendererComponent(DefaultTableCellRenderer.java:168)
.........
--
*******************************************
Willst du glücklich sein im Leben, trage bei zu and'rer Glück,
denn die Freude, die wir geben, kehrt ins eig'ne Herz zurück!
*******************************************
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ Java ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: