JavaSwing:JSplitPane中右元素的对齐

JavaSwing:JSplitPane中右元素的对齐,java,swing,jsplitpane,Java,Swing,Jsplitpane,对于一个编程练习,我使用一个JSplitPane来创建一个窗口,右边是一个漂亮的分形渲染,左边是一些其他垃圾。然而,我遇到了一个非常奇怪的问题:left元素是完全正确的,但是right元素也总是左对齐的。据我所知,right元素的大小与屏幕右侧部分的大小相同,但它总是完全向左,而left元素位于其上方 我创建JSplitPane并添加如下元素: splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true); splitPane.ad

对于一个编程练习,我使用一个JSplitPane来创建一个窗口,右边是一个漂亮的分形渲染,左边是一些其他垃圾。然而,我遇到了一个非常奇怪的问题:left元素是完全正确的,但是right元素也总是左对齐的。据我所知,right元素的大小与屏幕右侧部分的大小相同,但它总是完全向左,而left元素位于其上方

我创建JSplitPane并添加如下元素:

splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true);

splitPane.add(sidebar, JSplitPane.LEFT);
splitPane.add(fractalWindow, JSplitPane.RIGHT);

frame.add(splitPane);
我尝试了许多不同的方法来构造JSplitPane并向其中添加组件(使用setLeftComponent和setRightComponent等),但无论我做什么,这两个组件总是左对齐的。我做错了什么

编辑:边栏是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);

这样,面板将您放入的内容对齐到中心,拆分窗格将面板置于右侧。

事实证明,罪魁祸首是我的分形类中的两种方法:

class Fractal extends JPanel {

    ...

    int xpos;
    int ypos;

    ...

    public int getX() {
        return xpos;
    }

    public int getY() {
        return ypos;
    }

    ...

}

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

这可能是由于
fractalWindow
的LayoutManager测试了我的答案吗?1)要更快获得更好的帮助,请发布或。2) 以最小尺寸提供ASCII艺术或GUI预期布局的简单绘图,如果可以调整大小,则具有更大的宽度和高度。我正在尝试创建一个不是100行的示例,但我似乎无法重新创建它。我只知道在分形的
public void paintComponent(Graphics g)
方法中,
Graphics
对象显示在不正确的位置。所以我使用的布局肯定有问题。但是,我不知道是什么。如果你已经解决了自己的问题,那么社区可以用正式的答案自我回答你的问题,并接受它,这样用户将来就可以使用它。我认为这是可以解决的。我希望OP也这样认为