作为编程练习,我使用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在其父组件中的位置。这就是导致对齐不正确的原因。