gpt4 book ai didi

java - 当 SwingNode 的父级调整大小时,SwingNode 内容不调整大小

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:24:39 24 4
gpt4 key购买 nike

编辑:我在下面留下了我原来的问题。如果您希望使用 AnchorFX 源代码和我下面的代码测试问题,您应该能够重现问题。在其他一些情况下也会发生,并且类似于以下两个问题中的问题:Resize SwingNode in PaneHow to resize Swing control which is inside SwingNode in JavaFX8?谁的答案都没有对我有帮助,但也许我找到的答案将来会帮助其他人。


我在 JScrollPane 中有一个 JTable,我需要将它嵌入到 javafx 应用程序中。我正在尝试使用 AnchorFX docking framework 来做到这一点.我还需要这个 SwingNode 以某种方式位于 Control 中(我尝试过的两个是 ScrollPaneSplitPane),这样我就可以添加一个 ContextMenu 到它,这与应用程序的其余部分是一致的。

问题是,当我“停靠”和“取消停靠”选项卡或只是调整窗口或窗口内 Pane 的大小时,其中包含表格的 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);
}

}

最佳答案

事实证明,SwingNode 有一个适当调整自身大小的 Parent,但 SwingNode 本身并没有调整大小,而是根据其内容调整大小。我通过在停靠或取消停靠 DockNode 时进行以下调用来解决此问题:

swingNode.setContent(swingNode.getContent());
int width = (int) swingNode.getParent().getBoundsInParent().getWidth();
int height = (int) swingNode.getParent().getBoundsInParent().getHeight();
swingNode.getContent().setPreferredSize(new Dimension(width, height));

我不完全确定为什么重置 SwingNode 的内容有助于解决它,但它似乎有帮助,所以我将那一行留在那里。

稍后我可能会编辑这个问题,以帮助其他因奇怪的 SwingNode 大小调整问题而受阻的人,因为我认为它现在不是特别可搜索的。

关于java - 当 SwingNode 的父级调整大小时,SwingNode 内容不调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46474641/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com