Çok satırlı başlıklı javaFX 2.0 tablosu yapmak mümkün mü? Web'de bulduğum tüm örnekler, sütun başlığı olmayan başlık genişliği = metin büyüklüğünde, sarma gerektirmeyen tablolara sahiptir. i var ve ne ben gereken bir ekranda gösterilir ne exaple: JavaFX 2.0 Çok satırlı tablo üstbilgisi içeren tablo
cevap
aşağıdaki işlevi ile geldi: Tam bir yürütülebilir örnek in this gist olduğunu
private void makeHeaderWrappable(TableColumn col) {
Label label = new Label(col.getText());
label.setStyle("-fx-padding: 8px;");
label.setWrapText(true);
label.setAlignment(Pos.CENTER);
label.setTextAlignment(TextAlignment.CENTER);
StackPane stack = new StackPane();
stack.getChildren().add(label);
stack.prefWidthProperty().bind(col.widthProperty().subtract(5));
label.prefWidthProperty().bind(stack.prefWidthProperty());
col.setGraphic(stack);
}
(2.2 developer preview as a minimum gerektirir).
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.text.TextAlignment;
import javafx.stage.Stage;
public class TableWrappedHeaders extends Application {
public static void main(String[] args) { launch(args); }
@Override public void start(Stage stage) {
TableColumn firstNameCol = new TableColumn("First Name (which is a really long name)");
makeHeaderWrappable(firstNameCol);
firstNameCol.setPrefWidth(100);
firstNameCol.setCellValueFactory(new PropertyValueFactory<Person,String>("firstName"));
TableColumn lastNameCol = new TableColumn("Last Name");
lastNameCol.setPrefWidth(100);
lastNameCol.setCellValueFactory(new PropertyValueFactory<Person,String>("lastName"));
TableView table = new TableView();
table.getColumns().addAll(firstNameCol, lastNameCol);
table.setItems(FXCollections.observableArrayList(
new Person("Jacob", "Smith"),
new Person("Isabella", "Johnson"),
new Person("Ethan", "Williams")
));
table.setPrefSize(250, 200);
Pane layout = new VBox(10);
layout.setStyle("-fx-padding: 10;");
layout.getChildren().addAll(table);
stage.setScene(new Scene(layout));
stage.show();
}
private void makeHeaderWrappable(TableColumn col) {
Label label = new Label(col.getText());
label.setStyle("-fx-padding: 8px;");
label.setWrapText(true);
label.setAlignment(Pos.CENTER);
label.setTextAlignment(TextAlignment.CENTER);
StackPane stack = new StackPane();
stack.getChildren().add(label);
stack.prefWidthProperty().bind(col.widthProperty().subtract(5));
label.prefWidthProperty().bind(stack.prefWidthProperty());
col.setText(null);
col.setGraphic(stack);
}
public static class Person {
private final SimpleStringProperty firstName;
private final SimpleStringProperty lastName;
private Person(String fName, String lName) {
this.firstName = new SimpleStringProperty(fName);
this.lastName = new SimpleStringProperty(lName);
}
public String getFirstName() { return firstName.get(); }
public void setFirstName(String fName) { firstName.set(fName); }
public String getLastName() { return lastName.get(); }
public void setLastName(String fName) { lastName.set(fName); }
}
}
muhtemelen bunu yapmak için daha iyi bir yolu yoktur, ancak fonksiyon yukarıda benim test durumda benim için en azından çalışma yaptı.
Bunun basit bir css stili ile gerçekleştirilebileceğini düşündüm, ancak tek başına css ile çalışamıyorum.
başlık metni hizalama en kolay yolu böyle CSS stili ile geçerli: birden fazla satır bölmek başlık metin dizesindeki "\ n"
.table-view .column-header .label {
-fx-text-alignment: center;
}
kullanın yeni hat çıkış sırası.
sütunun başlığı grafikte bir Etiketi ile daha kolay mı: (sütun başlığı silin gibi bazı metin varsa)
- sütun başlığı grafikte bir etiket ekleyin.
- Metni Sar izin etiketi ayarlayın (-> etiket basıp Wrap Metin Özellikleri veya Kanununda gitmek - Sahne Builder> label.setWrapText) (doğru) biz isteyen
- Seti etiket genişliği ve yüksekliği
Not: Bunu bir FXML'de (Scene Builder ile) kodda olduğundan daha kolaydır. Aşağıdaki
Örnek: FXML kullanılarak
public class TableColumnLongTextLabel extends Application {
@Override
public void start(Stage stage) {
TableView table = new TableView();
TableColumn tableColumnData1 = new TableColumn(),
tableColumnData2 = new TableColumn("Long Title without Text Wrap");
tableColumnData1.setCellValueFactory(new PropertyValueFactory<SomeStructure, String>("data1"));
tableColumnData2.setCellValueFactory(new PropertyValueFactory<SomeStructure, String>("data2"));
table.getColumns().addAll(tableColumnData1, tableColumnData2);
Label columnTitle = new Label("Long Title with Text Wrapped");
columnTitle.setPrefWidth(125);
columnTitle.setPrefHeight(50);
columnTitle.setWrapText(true);
columnTitle.setTextAlignment(TextAlignment.CENTER);
tableColumnData1.setGraphic(columnTitle);
table.setItems(FXCollections.observableArrayList(
new SomeStructure("Java", "FX", 1),
new SomeStructure("Java", "Swing", 0),
new SomeStructure("Java", "Sample", 2),
new SomeStructure("Some", "Other", 10)
));
Pane layout = new VBox(10);
layout.getChildren().addAll(table);
stage.setScene(new Scene(layout, 350, 350));
stage.show();
}
public static class SomeStructure {
private final SimpleStringProperty data1;
private final SimpleStringProperty data2;
private final SimpleIntegerProperty data3;
private SomeStructure(String data1, String data2, Integer data3) {
this.data1 = new SimpleStringProperty(data1);
this.data2 = new SimpleStringProperty(data2);
this.data3 = new SimpleIntegerProperty(data3);
}
public String getData1() {
return data1.get();
}
public void setData1(String data1) {
this.data1.set(data1);
}
public String getData2() {
return data2.get();
}
public void setData2(String data2) {
this.data2.set(data2);
}
public Integer getData3() {
return data3.get();
}
public void setData3(Integer data3) {
this.data3.set(data3);
}
}
public static void main(String[] args) {
launch(args);
}
}
Örnek (Resim kod gerekli :)): etiket kullanılmadan bir çözelti
<TableView prefHeight="251.0" prefWidth="556.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
<columns>
<TableColumn editable="false" maxWidth="90.0" prefWidth="70.0" sortable="false" text="Player">
<columns>
<TableColumn editable="false" maxWidth="80.0" prefWidth="50.0" text="ID" />
<TableColumn editable="false" maxWidth="200.0" prefWidth="180.0" text="Name" />
</columns>
</TableColumn>
<TableColumn maxWidth="80.0" minWidth="50.0" prefWidth="60.0" text="Game" />
<TableColumn editable="false" maxWidth="160.0" minWidth="125.0" prefWidth="135.0" sortable="false" text="Team" visible="false" />
<TableColumn editable="false" maxWidth="160.0" minWidth="107.0" prefWidth="107.0" sortable="false">
<graphic>
<Label alignment="CENTER" text="Individual Points (Big Team)" textAlignment="CENTER" wrapText="true" />
</graphic>
</TableColumn>
<TableColumn editable="false" maxWidth="160.0" minWidth="99.0" prefWidth="102.0" sortable="false">
<graphic>
<Label alignment="CENTER" text="Team Points (Small Maps)" textAlignment="CENTER" wrapText="true" />
</graphic>
</TableColumn>
<TableColumn editable="false" maxWidth="116.0" minWidth="55.0" prefWidth="55.0" sortable="false">
<graphic>
<Label text="Total Points" textAlignment="CENTER" wrapText="true" />
</graphic>
</TableColumn>
</columns>
</TableView>
Oyuncu sütununun altında kimlik ve İsim ile sonuçlanan kodu ekleyebilme şansınız var mı? – Tommo
Bu iki sütunu bir ana sütunun altına eklemek istediğiniz anlamına mı geliyor? evet eğer kod basit: 'tableColumnPlayer.getColumns(). Add (tableColumnID); tableColumnPlayer.getColumns(). Add (tableColumnName); ' – Harry244
bulunamamıştır. Scene Builder 8.3.0'da (Gluon), JavaFX 8'de, farenin üzerine gelindiğinde, metin alanının hemen sağında, menüden bir çok satırın seçilebileceği bir düğme görünür.
Bu aşağıdaki XML kodu ile sonuçlanır:
<TableColumn fx:id="prodDisc" editable="false" prefWidth="50.0" text="Prod Disc" />
- 1. Çok satırlı tablo hücresi reStructuredText?
- 2. JavaFX 2.0'daki Tablo Görünümündeki seçimi okuyun.
- 3. Tablo bölüm üstbilgisi: çok satır/sözcük kaydırma
- 4. Tablo kolonu yeniden boyutlandırma, tablo üstbilgisi birden çok satıra sahipse ve tablo hücresine yazılırsa çalışmaz
- 5. Tablo sıralayıcısı kullanarak muticolumn üstbilgisi ve gövde değerleriyle Tablo Sıralama
- 6. JavaFX tablo görünümünde düğme ekleme
- 7. Tablo üstbilgisi, panel gövdesi önyüklemesinin içinde birden çok tablo olduğunda daraltılır
- 8. 1000 tablo içeren bir tablodan 1 tablo nasıl denetlerim
- 9. Android'de birden çok sütun içeren bir tablo nasıl oluşturulur?
- 10. h2 sql, çok sütunlu birincil anahtar içeren tablo oluşturulsun mu?
- 11. Öğeler ve özel ürünler: Yinelenen sütunlar, ana tablo ve ayrıntı tablosu içeren birden çok tablo veya ...?
- 12. Swift 2.0 tablo görünüm hücresindeki ifadesi
- 13. Tablo = Tablo vs Table.Data (Tablo)
- 14. jQuery - belirli bir metni içeren tablo hücresi içeren tablo satırını bulun
- 15. pander tabloları, style = "çok satırlı"
- 16. Birden çok tablo güncelleştirme Oracle
- 17. Tablo görünümünde birden çok sütun
- 18. Sorguda birden çok tablo arama
- 19. % 100 genişlikli taşma içeren IE7'deki tablo
- 20. Birden çok tablo iç birleştirme için ilk tablo numarası gerekir
- 21. Birçok ilişkide çok sayıda tablo adında tablo laravel
- 22. Tablo görünümünde farklı sütun türleri için uygun olan özelleştirilmiş tablo hücresini uygulayabilirim Javafx
- 23. Tablo Tablo Hücre tutarsızlığı.
- 24. MySQL birden tablo 2 tablo
- 25. Bazı verileri içeren hücreyi içeren bir tablo satırı nasıl kaldırılır?
- 26. tablo
- 27. Tablo
- 28. Veri kümesini birden çok tablo ile doldurma?
- 29. Tablo vs Sıcaklık Tablo Performansı
- 30. Lua içinde tablo içinde tablo
Birincisi, jewelsea ... Hep Cevaplarınızı beslemek. Bu çözüm ile Java 8'deki bazı garip davranışları fark ediyorum. Başlangıçta her şey iyi görünüyor, ancak sütun başlığını bölen (genellikle sütunu içeriğe sığacak şekilde yeniden boyutlandırıyor) çift tıklatırsam, sütun genişliğini artırmaya devam eder. Asla küçülmez, sadece daha büyük. Bunun neden olabileceğine dair herhangi bir öneri veya fikir var mı? – Tommo
The gist derlenmiyor. –
JavaFX 9.0.4'te benim için iyi çalışıyor ve çalışıyor, yine de Tommo'nun işaret ettiği sorunla karşı karşıya. – jewelsea