Java Swing: JSplitPane中右元素的对齐



作为编程练习,我使用JSplitPane创建了一个窗口,右边是一个漂亮的分形渲染,左边是一些其他垃圾。然而,我遇到了一个非常奇怪的问题:左元素完全没问题,但右元素也总是左对齐。据我所知,右元素被赋予了屏幕右部分的大小,但它总是完全在左边,左边元素在它的上方。

我创建JSplitPane并像这样添加它的元素:

splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true);
splitPane.add(sidebar, JSplitPane.LEFT);
splitPane.add(fractalWindow, JSplitPane.RIGHT);
frame.add(splitPane);

我已经尝试了许多不同的方法来构建JSplitPane和添加组件(使用setLeftComponent和setRightComponent等),但无论我做什么,两个组件总是左对齐。我做错了什么?

编辑:sidebar是一个JPanel, fractalWindow是JPanel的一个子类。我试过将fractalWindow添加到另一个JPanel并将其添加到splitPane,但随后根本没有绘制正确的组件。我没有为JFrame框架指定布局。

编辑2:问题解决了。我的Fractal类使用方法getX()getY(),我不知道我重写了这些。它们通常都只返回0,这意味着JPanel总是放在父组件的左上角。

您可以尝试在右侧放置JPanel,并放置任何您想要的JPanel:

splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true);
splitPane.add(sidebar, JSplitPane.LEFT);
JPanel panel = new JPanel();
panel.add(fractalWindow,BorderLayout.CENTER);
splitPane.add(panel, JSplitPane.RIGHT);
frame.add(splitPane);

这样,面板就会把你放进去的东西放在中间,而分割面板会把面板放在右边。

事实证明,罪魁祸首是我的Fractal类中的两个方法:

class Fractal extends JPanel {
    ...
    int xpos;
    int ypos;
    ...
    public int getX() {
        return xpos;
    }
    public int getY() {
        return ypos;
    }
    ...
}

这两个方法覆盖JPanel中的getX()getY(),它们用于确定JPanel在其父组件中的位置。这就是导致对齐不正确的原因。

相关内容

  • 没有找到相关文章

最新更新