将JScrollPane中的元素置于确定的位置

时间:2016-05-17 21:22:30

标签: java swing jpanel jscrollpane

我正在制作一个以这种方式运作的GUI:

就像一堆元素。我在我的堆栈中输入一个元素,我想要在我的JPanel的中心(在JScrollPane中)。我添加的下一个元素需要位于中心,最后一个元素是X向左。我添加一个新元素并发生相同。当一个元素不在JPanel中时,JScrollPane需要激活,让我滚动到左侧查看全部。

JPanel a = new JPanel();
    this.setBackground(new java.awt.Color(200, 200, 200));
    this.setPreferredSize(new java.awt.Dimension(father.getSize().width, height));
    BoxLayout aaa = new BoxLayout(this,1);
    this.setLayout(aaa);
    FlowLayout MigasDePanLayout = new FlowLayout(0,80,0); //Este es la separacion entre elementos
    a.setLayout(MigasDePanLayout);
    JButton ab = null;

    sp = new JScrollPane(a);
    sp.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
    sp.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    sp.setBounds(0, 0,father.getSize().width, height);

    this.add(sp);
    father.add(this, java.awt.BorderLayout.PAGE_END);
    for (int i = 0; i < 20; i++) {

        ab = new JButton("HHH");
        ab.setLocation(i*20, 0);
        a.add(ab);
    }
    addMouseListener(this);
addMouseMotionListener(this);
}

我有这段代码(父亲是JPanel)。

我使用布局来获取每个元素的分离,但是当我添加一个新元素时,总是在从左边开始的第一个洞上设置

[] [] []

我添加了一个新元素

[A] [] []

我想要这个:

[] [A] []

或者这个,但是将元素放在视图的中心:

[] [] [A] - &gt; [] | [] [A] []

但我不知道我是否可以选择我想放置元素的位置。

我读到必须删除布局是免费的,你可以把元素(在这种情况下的按钮)放在X Y的位置。

有人知道是否有办法将元素置于我想要的位置? (是从右到左而不是从左到右插入,但以元素为中心的东西)

我需要删除布局或创建另一个组件来实现我的目标吗?

谢谢你的时间!

1 个答案:

答案 0 :(得分:3)

  

但我不知道我是否可以选择我想放置元素的位置。

您可以使用:

panel.add(component, index);

将组件插入特定位置。大多数布局管理器(如BoxLayout,FlowLayout和GridLayout)不使用约束将遵循此参数。

int count = panel.getComponentCount();

因此索引的值必须小于计数。

  

(是从右到左而不是从左到右插入,但以元素为中心的东西)

因此,当使用具有中心对齐的FlowLayout时,您只需要:

panel.add(component, 0);

另外,请勿使用以下代码:

ab.setLocation(i * 20,0);

它会让人感到困惑,因为它会被忽略,因为布局管理器会设置位置和大小。