EDIT: Tôi đã để lại câu hỏi ban đầu của mình như dưới đây. Nếu bạn muốn kiểm tra vấn đề bằng cách sử dụng mã nguồn AnchorFX và mã của tôi bên dưới, bạn sẽ có thể tạo lại sự cố. Nó cũng xảy ra trong một số trường hợp khác, và tương tự như các vấn đề trong hai câu hỏi này: Resize SwingNode in Pane và How to resize Swing control which is inside SwingNode in JavaFX8? Không có câu trả lời nào hữu ích cho tôi, nhưng có lẽ câu trả lời tôi tìm thấy sẽ giúp người khác trong tương lai.Nội dung SwingNode không thay đổi kích thước khi phụ huynh của SwingNode đổi kích thước
Tôi có một JTable
bên trong một JScrollPane
và tôi cần phải nhúng nó vào một ứng dụng JavaFX. Tôi đang cố gắng thực hiện việc này bằng cách sử dụng AnchorFX docking framework. Tôi cũng cần SwingNode này bằng cách nào đó được bên trong một Control
(hai tôi đã thử là ScrollPane
và SplitPane
) để tôi có thể thêm một ContextMenu
vào nó phù hợp với phần còn lại của ứng dụng.
Vấn đề là khi tôi 'neo' và 'hoàn tác' các tab hoặc đơn giản thay đổi kích thước cửa sổ hoặc các ô bên trong cửa sổ, JScrollPane
với bảng trong đó không thay đổi kích cỡ đúng cách.
tôi đã sửa đổi một trong những bản demo từ dự án AnchorFX để hiển thị vấn đề của tôi:
public class AnchorFX_substations extends Application {
@Override
public void start(Stage primaryStage) {
DockStation station = AnchorageSystem.createStation();
Scene scene = new Scene(station, 1024, 768);
DockNode node1 = AnchorageSystem.createDock("Node", generateJTableNode());
node1.dock(station, DockNode.DockPosition.CENTER);
DockNode subNode = AnchorageSystem.createDock("subNode 1", generateJTableNode());
subNode.dock(station, DockNode.DockPosition.LEFT);
subNode.floatableProperty().set(false);
DockNode subNode2 = AnchorageSystem.createDock("subNode 2", generateJTableNode());
subNode2.dock(station, DockNode.DockPosition.LEFT);
AnchorageSystem.installDefaultStyle();
primaryStage.setTitle("AnchorFX SubStation");
primaryStage.setScene(scene);
primaryStage.show();
}
private Control generateJTableNode() {
ScrollPane contextMenuPane = new ScrollPane();
SwingNode swingNode = new SwingNode();
DefaultTableModel model = new DefaultTableModel();
JTable table = new JTable(model);
// Create a couple of columns
model.addColumn("Col1");
model.addColumn("Col2");
// Append a row
for(int i = 0; i < 200; i++) {
model.addRow(new Object[]{"col 1 row " + i, "col 2 row "+i});
}
JScrollPane scrollPane = new JScrollPane(table);
swingNode.setContent(scrollPane);
contextMenuPane.setFitToHeight(true);
contextMenuPane.setFitToWidth(true);
contextMenuPane.setContent(swingNode);
return contextMenuPane;
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}