2016-03-22 2 views
0

Ich habe eine vaadin Tabelle, mit sagen wir 5 Spalten. In der letzten Spalte (ganz rechts) haben wir die Schaltflächen zum Bearbeiten/Löschen, die immer die gleiche Breite haben.Vaadin Tabellenspalten Autosize/Autoscale ohne horizontale Scrollbar

Wenn ich die Breite der letzten Spalte auf eine bestimmte Breite und alle anderen Spalten auf eine bestimmte setColumnExpandRation(10); setzen, dann ist alles in Ordnung, mit der Ausnahme, dass die normalen Spalten nicht automatisch skaliert werden.

Wenn ich die in der letzten Spalte auf eine bestimmte Breite und alle anderen Spalten automatisch zu skalieren, (setColumnWidht(-1)), dann werden die normalen Spalten bemessen, um den Inhalt abhängig, sondern die ganze Tischbreite zu groß ist und einen horizontalen Scrollbalken.

Beispiel für einen solchen Fall im Bild unten

Wrong width

Und der Java-Code:

Table tb= new Table(); 
    tb.setWidth(100, Unit.PERCENTAGE); 
    tb.setHeight(100, Unit.PERCENTAGE); 
    layout.addComponent(tb); 

    BeanItemContainer<Person> pList = 
     new BeanItemContainer<>(Person.class); 
    for (int i=0; i < 20; i++) 
    { 
     Person p1= new Person("******", "++++++++++", "--++--++--++--++--++--++", "????", "3333 "+i, new Date()); 
     pList.addBean(p1); 
    } 

    tb.setContainerDataSource(pList); 
    tb.setColumnWidth("zip", 20); 
    tb.setColumnExpandRatio("firstName", 1); 

Example of code above

Gibt es eine Möglichkeit, die letzte Spalte mit einem haben feste Breite, aber immer noch die anderen Spalten automatisch sortiert, um Breiten abhängig vom Inhalt zu haben?

+0

Was meinst du mit Satz: "normale Spalten sind nicht automatisch skaliert". Was sind normale Spalten? Spalten mit Erweiterungsfaktor 10? –

+0

Ich verstehe, Sie meinen Spalten, die keine Spalten generiert werden. –

+0

ein minimaler Code Beispiel ist immer hilfreich eine gute Antwort bekommen :) –

Antwort

0

Die Lösung besteht darin, den Tisch auf 100% Breite zu setzen. Dann, um die letzte Spalte auf feste Breite zu setzen.

Legen Sie als einzige der anderen Spalten das Erweiterungsverhältnis 1 fest, um andere Spalten zu zwingen, den richtigen Platz zu erhalten.

Container, der Tabelle enthält, muss 100% Breite haben.

Wenn Sie Bildlaufleisten erhalten, müssen Sie Text innerhalb der Tabelle umbrechen.

+0

Ich möchte nicht den Text in der Tabelle zu wickeln, eine Zeile Text ist OK, auch wenn ein Teil des Textes am Ende der Spalte abgeschnitten ist –

+0

Hat Sie versuchen diese Lösung und was ist das Ergebnis. Bekommst du wieder Bildlaufleisten? –

+0

Ich habe der Frage ein kleines Beispiel hinzugefügt. Die h-Bildlaufleiste wird angezeigt, anstatt die Spalten kleiner zu machen. –