编辑:我已经离开了原来的问题,如下所示.如果您希望使用下面的AnchorFX源代码和我的代码测试该问题,您应该能够重新创建问题.它也发生在其他一些情况下,并且类似于这两个问题中的问题:调整窗格中的SwingNode以及如何调整JavaFX8中SwingNode内部的Swing控件的大小?这些答案都没有对我有帮助,但也许我找到的答案将来会帮助其他人.
我有一个JTable内部JScrollPane,我需要将它嵌入到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);
}
}
Run Code Online (Sandbox Code Playgroud)
因此,原来,SwingNode有家长谁适当调整大小本身,而是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));
Run Code Online (Sandbox Code Playgroud)
我不完全确定为什么重置SwingNode的内容有助于解决它,但它似乎有帮助,所以我离开那条线.
我以后可能会编辑的问题,以帮助任何人的怪异SwingNode调整问题阻碍别人,因为我不认为现在到了特别搜索.
| 归档时间: |
|
| 查看次数: |
397 次 |
| 最近记录: |