Java Swing:JSplitPane

时间:2016-10-26 10:54:20

标签: 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等),但无论我做什么,两个组件始终保持对齐。我做错了什么?

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

编辑2:它已经解决了。我的Fractal课程正在使用方法getX()getY(),但我并不知道我是否超越了这些方法。它们通常都只返回0,这意味着JPanel总是放在父组件的左上角。

2 个答案:

答案 0 :(得分:2)

您可以尝试将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);

这样,面板将您放入中心的内容与中心对齐,分割窗格将面板放在右侧。

答案 1 :(得分:0)

事实证明,罪魁祸首是我的Fractal课程中的两种方法:

class Fractal extends JPanel {

    ...

    int xpos;
    int ypos;

    ...

    public int getX() {
        return xpos;
    }

    public int getY() {
        return ypos;
    }

    ...

}

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