java - 将 JScrollPane 中的元素放在确定的位置

标签 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)。

我使用 Layout 来分隔每个元素,但是当我添加一个新元素时,总是设置在从左边开始的第一个孔上

[][][]

我添加了一个新元素

[A][][]

我想要这个:

[][A][]

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

[][][A] --> []|[][A][]

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

我读到有必要删除布局以获得自由,您可以将元素(在本例中为按钮)放在 X Y 位置。

有人知道有没有办法把元素放在我想要的位置? (是从右到左而不是从左到右插入的东西,但居中元素)

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

感谢您的宝贵时间!

最佳答案

But I dont know if I can choose where I want to put the element.

您可以使用:

panel.add(component, index);

在特定位置插入组件。大多数不使用约束的布局管理器(如 BoxLayout、FlowLayout 和 GridLayout)都会遵守此参数。

int count = panel.getComponentCount();

所以索引的值一定小于计数。

(is something lie that insert from right to left instead left to right, but centering the element)

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

panel.add(component, 0);

此外,不要使用如下代码:

ab.setLocation(i*20, 0);

这很困惑,因为它会被忽略,因为布局管理器将设置位置和大小。

关于java - 将 JScrollPane 中的元素放在确定的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37286455/

相关文章:

Java Swing 问题,为什么changeEvent 使用jButton 触发额外的事件?

java - 如何克服因 Content-Type=[text/xml; 导致的无效 token 字符; subtype=gml/2.1.2] 在 Spring HttpMessageConverterExtractor 中?

java - Java JDK10 中的 TypeTags 错误

java - java.lang.Object x = new Foo() 的 C++ 等价物是什么?

java - 如何使用此代码在 RandomAccessFile 中搜索字符串?

java - 是否可以连接两个 JTextField 以同时实时编辑

Java的Swing似乎正在改变Card Layout的布局

swing - JPanel的MouseListener缺少mouseClicked事件

java - SWING - 同一个 JPanel 中的不同颜色

java - 记录接口(interface)抛出的 RuntimeException