java - 可视化数组列表

标签 java swing arraylist jpanel layout-manager

我的 JFrame 中有一个包含“页面”数组列表的大型 JPanel - 扩展 JPanel 的数据类型,它默认包含 JPanel“区域”,高度等于它的子项的累积之一(默认情况下它没有),和 BOX.filler(首选高度是“页面”的全高)。因此,默认情况下,整个“页面”都填充有填充物,随着我向“区域”添加元素,填充物会减少。

此外,我还有一个包含 JPanel 的数组列表。它们是进入“区域”的元素。当我添加它们时,当填充物的高度变为零时,我创建了一个新的“页面”并将最后一个元素(“越界”)移到它上面。基本上,它的工作方式应该类似于 MS Word。

现在开始。用户可以从文档的任何部分自由添加和删除这些元素。问题是,如何将元素添加到“区域”上的随机点?添加可能会通过调用附加到另一个元素的 keylistener 来进行,因此我将知道在哪两个元素之间放置随机元素。

是否有布局管理器可用于此目的,还是应该以其他方式完成? 走哪条路?

最佳答案

如果我对你的问题理解正确,你是想在某个位置插入一个组件而不是附加它?

如果这是您的问题,您可能需要使用 BoxLayout 和 java 的 swing 容器的 add(component, index) 方法。当然,您可能再次需要将一些子元素移动到下一页,并将下一页的子元素递归到下一页。

import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class AddAt {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
        JLabel one = new JLabel("one");
        JLabel two = new JLabel("two");
        JLabel between = new JLabel("between");

        frame.add(panel);
        panel.add(one);
        panel.add(two);
        panel.add(between, 1);

        frame.pack();
        frame.setVisible(true);
    }
}

结果: JFrame with panels in the right order

关于java - 可视化数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12131751/

相关文章:

java - 在 JTabbedPane 中简单禁用 JPanel

java - 如何通过java过滤文本文件并将结果保存到新文件

java - 如何将多个小整数保存在一个整数中以进行位移位?

java - BLE 入门 -> NullPointerException

java - 为什么Java Generic不能设计继承到父Generic类?

java - 将 YUV_420_888 中的图像从 Android 发送到 OpenCV Mat 中的 JNI 的最有效方法

java - JFrame 不从单独的类更新图形

Java Swing : Action Event to submit multiple variables

java - 使用 Jackson 将 JSON 反序列化为包含集合的 Java 对象

java - 对混合整数和字符串的 ArrayList 进行排序,同时保留字符串和整数的相对顺序