对于编程练习,我使用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总是放在父组件的左上角。
答案 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在其父组件中的位置。这就是导致对齐功能不正确的原因。