Javafx 2 调整窗口大小时,UI组件[JavaFX Group]失去其位置。。。仅在水平滚动后发生
请浏览下面的图片。Javafx 2 调整窗口大小时,UI组件[JavaFX Group]失去其位置。。。仅在水平滚动后发生,javafx-2,Javafx 2,请浏览下面的图片。 在上图中,您可以发现水平滚动未启动。 现在访问相同内容的后滚动图像 现在在第二幅图中,您可以看到水平滚动已完成… JFXPanel内容水平滚动。。。哪个是完美的… 现在,第三幅图将描述问题 当它被最大化时,它会稍微拉伸一点以查看… 您可以看到JFXPanel内容已更改其原始位置… 此外,内容必须以X_位移=0.0[X-Cordinate]开始,这是在前两幅图像中自动完成的… 所有内容都是节点,如[矩形、直线等],之后所有内容都放在组节点中… 此组节点通过在滚动窗格中设置
在上图中,您可以发现水平滚动未启动。
现在访问相同内容的后滚动图像 现在在第二幅图中,您可以看到水平滚动已完成…
JFXPanel内容水平滚动。。。哪个是完美的…
现在,第三幅图将描述问题 当它被最大化时,它会稍微拉伸一点以查看…
您可以看到JFXPanel内容已更改其原始位置…
此外,内容必须以X_位移=0.0[X-Cordinate]开始,这是在前两幅图像中自动完成的…
所有内容都是节点,如[矩形、直线等],之后所有内容都放在组节点中…
此组节点通过在滚动窗格中设置
js.setContent(Group node);
每个组件都以给定的x,y坐标值放置。。那么,在进行最大化时,这是如何发生的?请帮我找到根本原因 先谢谢你 以下是导致问题的一些事实
- Start Position of Scene : 0.0
- Start Position of Group in Scene : 49.5
- Width of the root : 364.5
- Start Position of Scene : 0.0
- Start Position of Group in Scene : 63.5
- Width of the root : 364.5
- Start Position of Scene : 0.0
- Start Position of Group in Scene : 83.5
- Width of the root : 364.5
当我们水平拖动窗口时,组在场景中移动。。。这不应该发生。。。如何避免这个
好的。。。这是MCVE
有一个框架。包含垂直拆分的拆分窗格。拆分窗格将显示两个JFXPanel的内容。
两个面板在相同的x坐标上有矩形,但Y坐标不同。
两个FXPanel都是水平滚动同步的。不是双向的。当您水平滚动下面板时,由于水平同步,上面板将被滚动 以下是fxPanel 1的代码
public class FxPanel1 extends JFXPanel
{
private ScrollPane scroll ;
public ScrollPane getJs() {
return scroll;
}
public void setJs(ScrollPane js) {
this.scroll = js;
}
private boolean initFX(JFXPanel fxPanel) {
Scene scene = createScene();
fxPanel.setScene(scene);
return true;
//craneAssignmentChartView.setFxPanel(fxPanel);
}
private Scene createScene() {
Group root = new Group();
Rectangle rect = new Rectangle(10.0, 20.0, 800, 40);
rect.setFill(javafx.scene.paint.Color.TRANSPARENT);
rect.setStroke(javafx.scene.paint.Color.RED);
AnchorPane anchor = new AnchorPane();
anchor.getChildren().add(rect);
GridPane grid = new GridPane();
grid.setHgap(0);
grid.setVgap(0);
grid.setPadding(new Insets(0, 0, 0, 0));
grid.add(anchor, 1, 0);
root.getChildren().add(grid);
ScrollPane scroll = new ScrollPane();
scroll.setHbarPolicy(ScrollBarPolicy.ALWAYS);
scroll.setVbarPolicy(ScrollBarPolicy.AS_NEEDED);
scroll.setContent(root);
setJs(scroll);
return new Scene(scroll, javafx.scene.paint.Color.WHITE);
}
private void createUI(final JFXPanel fxPanel)
{
Platform.runLater(new Runnable() {
@Override
public void run()
{
initFX(fxPanel);
}
});
}
public FxPanel1( JFXPanel fxPanel)
{
createUI(fxPanel);
}
}
现在第二个fxPanel的代码看起来像
public class FxPanel2 extends JFXPanel
{
private ScrollPane scroll ;
public ScrollPane getJs() {
return scroll;
}
public void setJs(ScrollPane js) {
this.scroll = js;
}
private boolean initFX(JFXPanel fxPanel) {
Scene scene = createScene();
fxPanel.setScene(scene);
return true;
//craneAssignmentChartView.setFxPanel(fxPanel);
}
private Scene createScene() {
Group root = new Group();
Rectangle rect = new Rectangle(10.0, 180.0, 800, 40);
rect.setFill(javafx.scene.paint.Color.TRANSPARENT);
rect.setStroke(javafx.scene.paint.Color.RED);
AnchorPane anchor = new AnchorPane();
anchor.getChildren().add(rect);
GridPane grid = new GridPane();
grid.setHgap(0);
grid.setVgap(0);
grid.setPadding(new Insets(0, 0, 0, 0));
grid.add(anchor, 1, 0);
root.getChildren().add(grid);
ScrollPane scroll = new ScrollPane();
scroll.setHbarPolicy(ScrollBarPolicy.ALWAYS);
scroll.setVbarPolicy(ScrollBarPolicy.NEVER);
scroll.setContent(root);
setJs(scroll);
return new Scene(scroll, javafx.scene.paint.Color.WHITE);
}
private void createUI(final JFXPanel fxPanel)
{
Platform.runLater(new Runnable() {
@Override
public void run()
{
initFX(fxPanel);
}
});
}
public FxPanel2( JFXPanel fxPanel)
{
createUI(fxPanel);
}
}
主类看起来像
public class DemoToCheckUIAlignment extends JFrame
{
public static void main(String[] args)
{
final DemoToCheckUIAlignment demo = new DemoToCheckUIAlignment();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFXPanel panel1 = new JFXPanel();
FxPanel1 fxObj1 = new FxPanel1(panel1);
JFXPanel panel2 = new JFXPanel();
FxPanel2 fxObj2 = new FxPanel2(panel2);
DemoToCheckUIAlignment frame = new DemoToCheckUIAlignment();
frame.setSize(800, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JSplitPane chartSplitPane = new JSplitPane();
chartSplitPane.setOrientation(JSplitPane.VERTICAL_SPLIT);
chartSplitPane.setDividerLocation(200);
chartSplitPane.setDividerSize(2);
chartSplitPane.setTopComponent(panel1);
chartSplitPane.setBottomComponent(panel2);
demo.provideScrollSyncBetweenFXPanels(fxObj1.getJs(), fxObj2.getJs());
frame.getContentPane().add(chartSplitPane);
//frame.getContentPane().add(panel2);
frame.setVisible(true);
}
});
}
public static void provideScrollSyncBetweenFXPanels(final ScrollPane upperSP, final ScrollPane lowerSP)
{
lowerSP.hvalueProperty().addListener(new ChangeListener<Number>()
{
public void changed(ObservableValue<? extends Number> ov,
Number old_val, Number new_val)
{
upperSP.hvalueProperty().set(new_val.doubleValue());
}
});
}
}
public类demoocheckualiagnment扩展了JFrame
{
公共静态void main(字符串[]args)
{
最终Demoocheckuialignment演示=新Demoocheckuialignment();
SwingUtilities.invokeLater(新的Runnable(){
@凌驾
公开募捐{
JFXPanel panel1=新的JFXPanel();
FxPanel1 fxObj1=新的FxPanel1(panel1);
JFXPanel panel2=新的JFXPanel();
FxPanel2 fxObj2=新的FxPanel2(panel2);
Demoocheckuialignment frame=新的Demoocheckuialignment();
框架设置尺寸(800500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JSplitPane chartsplippane=新的JSplitPane();
chartSplitPane.setOrientation(JSplitPane.VERTICAL_SPLIT);
chartSplitPane.setDividerLocation(200);
chartSplitPane.setDividerSize(2);
chartSplitPane.setTopComponent(面板1);
chartSplitPane.setBottomComponent(面板2);
expanel之间的demo.providescrollsynchbeen(fxObj1.getJs(),fxObj2.getJs());
frame.getContentPane().add(chartSplitPane);
//frame.getContentPane().add(panel2);
frame.setVisible(true);
}
});
}
public static void提供XPanel之间的滚动同步(最终滚动窗格Upper SP,最终滚动窗格lowerSP)
{
lowerSP.hvalueProperty().addListener(新的ChangeListener())
{
更改公众假期(ObservalEvalue您可以使用ScrollPane对象的setFitToWidth来匹配特定维度。有关更多详细信息,请参阅页面下方的链接,调整滚动窗格中组件的大小,您可以在解决方案中找到更多内容您可以尝试使用的子类而不是使用吗?例如,a。它将如何生效ective?我的意思是,组是否有如此大的开销…无论如何,我尝试过HBox,结果仍然是一样的。Group
不能直接调整大小。因此,当窗口从角落调整大小时,它不会被场景调整大小。你能创建一个并发布它吗?我很确定问题在于使用组,但事情会变得复杂ar如果你可以发布的话。setFitToWidth方法为滚动窗格设置true,内容宽度缩小,并且从不水平滚动。这对我来说很有用。。。。。。