EDYCJA: Pozostawiłem moje oryginalne pytanie, jak było poniżej. Jeśli chcesz przetestować problem za pomocą kodu źródłowego AnchorFX i mojego kodu poniżej, powinieneś móc odtworzyć problem. Zdarza się to również w innych okolicznościach i jest podobny do problemów z tych dwóch pytań: Resize SwingNode in Pane i How to resize Swing control which is inside SwingNode in JavaFX8? Żadna z tych odpowiedzi nie okazała się mi pomocna, ale może odpowiedź, którą znalazłem, pomoże komuś innemu w przyszłości.Zawartość SwingNode nie zmienia rozmiaru, gdy rodzic SwingNode zmienia rozmiar
mam JTable
Wewnątrz JScrollPane
i muszę umieścić go w aplikacji javafx. Próbuję to zrobić przy użyciu AnchorFX docking framework. Też potrzebuję tego SwingNode by być jakoś wewnątrz Control
(dwa ja wypróbowałem to ScrollPane
i SplitPane
) tak, że mogę dodać ContextMenu
do tego, który jest zgodny z resztą aplikacji.
Problem polega na tym, że kiedy zakładam "dokowania" i "cofam" zakładki lub po prostu zmieniam rozmiar okna lub paneli w oknie, JScrollPane
z tabelą w nim nie zmienia się poprawnie.
zmodyfikowałem jedną z dema z projektu AnchorFX pokazać mój problem:
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);
}
}