Swing:JList 将多个组件作为一个项目保存

Swing: JList holding multiple Components as a single item

这是我的问题: 我正在创建一个 window 负责列出一个层,它显示层的 当前图像(截至目前为 ImageIcon 的形式)、图层名称和用于更改所述图层当前 on/off 状态的复选框。整个事情应该是 Paint.NET's Layer Window 的仿制品,如下所示:

我的问题是如何绕过 JTable 来构造它。我想最后我可能不得不求助于只制作一个动态 table,但我想知道是否有办法制作一个可以单独显示这三个组件的 item/container。

我最接近的是使用 JLabel 及其图标和文本属性,但我无法弄清楚如何添加复选框。

我是否应该使用布局管理器将标签列表移到左侧,并在窗格中添加一个充满复选框的新列表?

我的代码大概如下:

public class StudioLayerWindow extends JFrame
{
// Objects
JPanel buttonPanel;
JScrollPane layerScroll;

JButton addNewLayer;
JButton deleteCurrentLayer;
JButton duplicateCurrentLayer;
JButton mergeCurrentLayer;
JButton moveCurrentLayerUp;
JButton moveCurrentLayerDown;
JButton layerProperties;

// Constructors & Initializers
public StudioLayerWindow()
{
    // Main Window Initialization
    this.setTitle("Layers");
    this.setType(Type.UTILITY);
    this.setSize(200,200);
    this.setResizable(false);
    this.setAlwaysOnTop(true);

    initButtons();

    buttonPanel = new JPanel(new GridLayout(1,7));
    buttonPanel.setPreferredSize(new Dimension(this.getWidth(), this.getHeight() /    7));
    buttonPanel.add(addNewLayer);
    buttonPanel.add(deleteCurrentLayer);
    buttonPanel.add(duplicateCurrentLayer);
    buttonPanel.add(mergeCurrentLayer);
    buttonPanel.add(moveCurrentLayerUp);
    buttonPanel.add(moveCurrentLayerDown);
    buttonPanel.add(layerProperties);

    // Code for what I'd add here
    layerScroll = new JScrollPane();

    this.add(layerScroll , BorderLayout.CENTER);
    this.add(buttonPanel , BorderLayout.PAGE_END);
}

上面的代码没有包含任何我尝试过的解决方案,只有我一直在的基本模板。

有什么方法可以在一行上制作多个组件吗?

JList 是通用的 class.

  • 创建一个扩展 JPanel 的 class。 (暂且称它为RowPanel
  • 将需要出现在一行中的所有元素放入其中(使用水平布局)
  • 使用像

    这样的面板创建你的JList
    JList<RowPanel> list = new JList<RowPanel>();
    
  • 创建ListCellRendererListCellEditor可以参考这个:https://docs.oracle.com/javase/tutorial/uiswing/components/list.html

注意: 如果您在任何情况下都不想使用 JTable,则应该这样做。 JTable 是该解决方案的一个很好的替代方案。

希望对您有所帮助。
祝你好运。