क्या मल्टीलाइन हेडर के साथ जावाएफ़एक्स 2.0 टेबल बनाना संभव है? वेब पर मिले सभी उदाहरण, टेबल हैं, जहां कॉलम हेडर चौड़ाई = इसके टेक्स्ट आकार को लपेटने के बिना। मैं क्या है, और क्या मैं जरूरत है एक स्क्रीन पर दिखाया जाता का exaple: मल्टीलाइन टेबल हेडर के साथ JavaFX 2.0 तालिका
उत्तर
मैं निम्नलिखित समारोह के साथ आया था:
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);
}
एक पूरा निष्पादन उदाहरण in this gist है (2.2 developer preview as a minimum आवश्यकता है)।
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); }
}
}
शायद यह करने के लिए एक बेहतर तरीका है, लेकिन समारोह के ऊपर अपने परीक्षण के मामले में मेरे लिए कम से कम काम किया है।
मैंने सोचा कि यह एक साधारण सीएसएस शैली के साथ प्राप्त किया जा सकता है, लेकिन मैं इसे अकेले सीएसएस के माध्यम से काम नहीं कर सका।
शीर्ष पाठ संरेखित करने के लिए सबसे आसान तरीका है, सीएसएस शैली के साथ है इस तरह:
.table-view .column-header .label {
-fx-text-alignment: center;
}
उपयोग नई लाइन एस्केप अनुक्रम "\ n" शीर्षक पाठ स्ट्रिंग में यह कई पंक्तियों में विभाजित करने के लिए।
कॉलम के हेडर ग्राफिक में एक लेबल के साथ आसान है: (यदि स्तंभ शीर्षक इसे हटा के रूप में कुछ पाठ है)
- स्तंभ शीर्ष लेख ग्राफिक में एक लेबल जोड़ें।
- लेबल सेट पाठ लपेटें अनुमति देने के लिए (दृश्य बिल्डर -> लेबल का चयन करें और पाठ लपेटें के गुण करने के लिए या संहिता में जाना -> label.setWrapText (सही))
- सेट लेबल चौड़ाई और ऊंचाई हम चाहते हैं
नोट: कोड में से FXML (दृश्य बिल्डर के साथ) में ऐसा करना आसान है।
नीचे उदाहरण:
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);
}
}
उदाहरण FXML का उपयोग कर (कोई कोड की जरूरत :)):
<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>
कोई भी मौका आप उस कोड को शामिल कर सकते हैं जिसके परिणामस्वरूप प्लेयर कॉलम आईडी और नाम के नीचे है? – Tommo
आपका मतलब है कि एक मास्टर कॉलम के नीचे उन दो कॉलम को कैसे जोड़ना है? यदि हां कोड सरल है: 'tableColumnPlayer.getColumns()। जोड़ें (tableColumnID); tableColumnPlayer.getColumns()। जोड़ें (tableColumnName); ' – Harry244
लेबल का उपयोग किए बिना मिले एक समाधान। दृश्य बिल्डर 8.3.0 (ग्लूऑन), जावाएफएक्स 8 में, माउस होवर पर एक बटन दिखाई देता है, बस टेक्स्ट फ़ील्ड का दायां, जहां मेनू से एक बहु-रेखा चुनी जा सकती है।
यह एक निम्न XML कोड में जो परिणाम:
<TableColumn fx:id="prodDisc" editable="false" prefWidth="50.0" text="Prod Disc" />
- 1. JavaFX 2.0
- 2. JavaFX तालिका
- 3. JavaFX 2.0 MediaView
- 4. javafx 2.0 लेबल
- 5. तालिका कॉलम javaFX
- 6. jQuery टेबल हेडर सॉर्ट
- 7. JavaFX 2.0 + FXML - अजीब देखने व्यवहार
- 8. javafx
- 9. सीएसएस केवल - फिक्स्ड हेडर के साथ तालिका ओवरफ्लो
- 10. बनाना multirow तालिका हेडर
- 11. प्राइमफेस टेबल कॉलम हेडर छुपाएं
- 12. टेबल व्यू फ़ूटर तालिका
- 13. विशेष एक टेबल हेडर रंग जावा स्विंग
- 14. स्टेजिंग तालिका से रिकॉर्ड के साथ लाइव टेबल भरना
- 15. JavaFX
- 16. मल्टीलाइन
- 17. JAVAFX चार्ट
- 18. JavaFX
- 19. स्वत: लंबवत स्क्रॉल के साथ मल्टीलाइन टेक्स्टबॉक्स
- 20. Prawn में टेबल हेडर सेट करने के लिए कैसे?
- 21. Javafx 2.0 कैसे-to Application.getParameters() एक Controller.java फ़ाइल में
- 22. JavaFX
- 23. Javafx
- 24. JavaFX
- 25. javafx
- 26. javaFX
- 27. JavaFX
- 28. नाम के साथ ओरेकल टेबल
- 29. एचटीएमएल तालिका हेडर कई पंक्तियों
- 30. divs तालिका डेटा के लिए टेबल बनाम
पहले, jewelsea ... मैं हमेशा अपने जवाब संजोना। मैं इस समाधान के साथ जावा 8 में कुछ अजीब व्यवहार देख रहा हूं। प्रारंभ में सबकुछ ठीक दिखता है, लेकिन यदि मैं कॉलम हेडर डिवाइडर (जो आम तौर पर सामग्री के लिए उपयुक्त कॉलम का आकार बदलता है) पर डबल क्लिक करता है तो यह कॉलम की चौड़ाई को बढ़ाता रहता है। यह कभी छोटा नहीं होता, केवल बड़ा होता है। कोई सुझाव या विचार क्यों हो सकता है कि ऐसा क्यों हो रहा है? – Tommo
गीस्ट संकलित नहीं करता है। –
जावाफैक्स 9.0.4 पर मेरे लिए संकलित और चलाता है, अभी भी टॉमो द्वारा बताए गए मुद्दे को पीड़ित है। – jewelsea