编辑: 我保留了下面的原始问题。如果您想使用AnchorFX源代码和下面的代码测试该问题,您应该能够重新创建该问题。它在某些其他情况下也会发生,并且类似于这两个问题中的问题:在Pane中调整SwingNode大小 和 如何调整嵌入在JavaFX8 SwingNode中的Swing控件的大小? 他们的答案都没有对我有帮助,但是也许我找到的答案将来会帮助其他人。
我在JScrollPane
内部放置了一个JTable
,并且需要将其嵌入到javafx应用程序中。我正在尝试使用AnchorFX停靠框架实现此目的。我还需要将此SwingNode放置在Control
(我尝试过的两个是ScrollPane
和SplitPane
)中,以便我可以向其中添加与应用程序的其余部分一致的ContextMenu
。
问题是,当我“停靠”和“取消停靠”选项卡或仅调整窗口或窗口内的面板时,包含表格的JScrollPane
无法正确调整大小。
我修改了AnchorFX项目中的一个演示文稿以展示我的问题:
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);
}
}