JTabbedPane: table in new tab: tooltip benutzt die column-widths von table in erstem geöffneten tab

JavaOHJA

Mitglied
Hey,

also ich starte ein frame mit tabbedpane drin und diese enthält eine table+tooltips. funktioniert auch alles, aber wenn ich dann eine gruppe aus der table in einem neuen tab der tabbedpane anzeige, fragen die tooltips nicht die spaltenbreite der neugeöffneten table ab, sondern immernoch die der ersten.

Habs mit repaint() versucht, das klappt aber nicht. mir fällt sonst nix ein. Wer toll wenn jemand weiß worans liegt.

MfG
 
Moin,

deine ToolTipps fragen die Spaltenbreite ab ???:L???:L :bahnhof:

Hast Du denn für den zweiten Tab auch ein eigenes Model, eigene ToolTips usw. deklariert ??

Aber ohne den konkreten Code wird man kaum was dazu sagen können ..... :noe:


Gruß Klaus
 
hey, hier ist mal der Code (find grad die tags für code nicht):
Models veränder ich bisher nicht, denk das sind die DefaultModels dann?. zweite table erstelle und adde ich in nem listener.

starttabelle: hier werden die tipps correct für spalte 4 angezeigt.

Java:
final JTable table = new JTable(db.getGruppen(tableData),tableHeader){
         public String getToolTipText(MouseEvent e) {
                String tip = null;
                java.awt.Point p = e.getPoint();
                int rowIndex = table.rowAtPoint(p);
                int colIndex = table.columnAtPoint(p);

                 try {
                    // System.out.println(table.getColumnModel().getColumnIndex(p));
                    if(colIndex == 4)
                     tip = getValueAt(rowIndex, colIndex).toString();
                    
                 } catch (RuntimeException e1) {
                     //catch null pointer exception if mouse is over an empty line
                 }

                 return tip;
            }
    };
    

weitere tabellen werden so hinzugefüg: (und die ToolTips wissen nicht, das die Spalten andere Breiten haben, aber das es eine andere Tabelle ist schon):

    btnGruppeAnzeigen.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent e) {
            
                            
                String gruppenID = MouseWahl;
                String[] tableHeader2 = {"Matrikelnummer","Name","Vorname","Gruppe","Kommentar","Rehabilitant","Datum"};
                JTable table2 = new JTable(db.getGruppenTeilnehmer(gruppenID),tableHeader2){
                     public String getToolTipText(MouseEvent e) {
                            String tip = null;
                            java.awt.Point p = e.getPoint();
                            
                                                        
                            int rowIndex = table.rowAtPoint(p);
                            int colIndex = table.columnAtPoint(p);

                             try {
                                 if(colIndex == 4 )
                                 tip = getValueAt(rowIndex, colIndex).toString();
                                 //tip = "" + rowIndex + "/" +colIndex;
                             } catch (RuntimeException e1) {
                                 //catch null pointer exception if mouse is over an empty line
                             }

                             return tip;
                        }
                };
 
Zuletzt bearbeitet:
In den überschriebenen getToolTipText-Methoden greifst du jeweils auf die Variable table zu, obwohl die Variable im 2. Fall table2 heisst.
Da du dich in der getToolTipText-methode sowieso gewissermaßen in einer JTable-Instanz befindest, würde ich mal probieren, rowAtPoint und columnAtPoint ganz ohne vorangestelltes table oder table2 aufzurufen.
 
[EDIT] zu spät ;(


Java:
JTable table2 = new JTable(db.getGruppenTeilnehmer(gruppenID),tableHeader2){
public String getToolTipText(MouseEvent e) 
{
                            String tip = null;
                            java.awt.Point p = e.getPoint();
                                                        
                            int rowIndex = table.rowAtPoint(p);
                            int colIndex = table.columnAtPoint(p);
// ...
Müsste der Zugriff hier nicht über "table2" erfolgen ???:L

Gruß
Klaus
 
Zuletzt bearbeitet:
Hätte noch eine weitere Frage zu den ToolTips:
wie kann ich einstellen, dass nach x Zeichen ein Zeilenumbruch gemacht wird? Im Moment wird alles in eine megalange Zeile gepackt, was nicht so toll ist.
 
Hätte noch eine weitere Frage zu den ToolTips:
wie kann ich einstellen, dass nach x Zeichen ein Zeilenumbruch gemacht wird?
Das wird mit ToolTipps vermutlich ein wenig frickelig!
'Einstellen' kannst Du dabei IMHO gar nicht !!
Da musst den darzustellenden Text mit einer eigenen Logik zusammenbasteln und dann jeweils an den gewünschten Stellen umbrechen. Hierzu kannst Du etwa die Anzahl der jeweils hinzugefügten Zeichen zählen und dann "\r\n" einfügen (oder <br>, falls Du ihn HMTL-formatierst).
Hat natürlich den Nachteil, dass Du ggf. mitten im Wort umbrichst ... hier müsste man die Logik dann entsprechend aufschlauen, dass der Zeilennumbruch beim letzten vorherigen Blank kommt o. ä. ..... 😉

Gruß
Klaus
 
Zuletzt bearbeitet:
Hey,
ja da bastel ich schon ne Weile rum jetzt. Hab grad gesehen, dass man nem String ein eigenes Format geben kann, meinst du damit könnt es gehen?

hab die Lösung gefunden:
im HTML Teil : <p width=\"150px\"> gewünschte Breite angeben.

Gruß und Danke für die Hilfen!
 
Zuletzt bearbeitet:
hey,
hab noch eine weitere Frage:
Wie kann ich in einer JTable die cells editable = false setzen aber trotzdem noch markierbar lassen.
setEnable(false) geht nicht.

Gruß
 
kann ich dir so aus dem Stand wirklich nicht sagen, da ich das noch nie gesucht habe ...
Auf jeden Fall sind "editable" und "enable" aber zwei Paar Schuhe !!!

Gruß Klaus
 
Wie kann ich in einer JTable die cells editable = false setzen aber trotzdem noch markierbar lassen.
setEnable(false) geht nicht.
Du musst nix machen, einfach dafür sorgen, dass isCellEdiatble(int row, int col) false zurückgibt. Du kannst die Zellen trotzdem noch markieren.
Schwieriger wäre es eher, auch das auswählen zu unterbinden. Dazu müsste man wohl das selection model anpassen.
 
Hey,

wie spreche ich die Methode isCellEditable() an ohne ein DefaultTableModel Objekt zu erzeugen?
also table.getModel.isCellEditable oder Ähnliches? wenn das überhaupt möglich ist.

Danke nochmal für die Hilfe
 
Eine JTable hat immer ein TableModel. Wenn du keins explizit anlegst, z. B. wenn du den Konstruktor JTable(Object[][] rowData, Object[] columnNames) verwendest, erzeugt JTable selber eins.
Und da das TableModel-Interface die Methode isCellEditable(int row, int col) deklariert, kannst du immer jtable.getModel().isCellEditable(int, int) aufrufen.
Ich würde dir dringend raten, den Umgang mit der Java API zu üben. Dann lassen sich solche Fragen in Minuten beantworten.
 

Zurück
Oben