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

Java Swing:JList将多个组件作为单个项目保存,java,swing,jtable,jlist,imageicon,Java,Swing,Jtable,Jlist,Imageicon,我的问题是: 我正在创建一个窗口,该窗口负责列出一个层,其中显示该层的 当前图像(以ImageIcon的形式,从现在开始)、层的名称以及用于改变所述层的当前开/关状态的复选框。整个事件应该是一个仿制品,如图所示: 我的问题是如何绕过JTable,从而将其结构化。我想最终我可能不得不求助于创建一个动态表,但我想知道是否有一种方法可以创建一个可以单独显示这三个组件的项/容器 我得到的最接近的方法是使用带有图标和文本属性的JLabel,但我很难找到如何添加复选框的方法 我是否应该使用布局管理器将标签

我的问题是: 我正在创建一个窗口,该窗口负责列出一个层,其中显示该层的 当前图像(以
ImageIcon
的形式,从现在开始)、层的名称以及用于改变所述层的当前开/关状态的复选框。整个事件应该是一个仿制品,如图所示:

我的问题是如何绕过
JTable
,从而将其结构化。我想最终我可能不得不求助于创建一个动态表,但我想知道是否有一种方法可以创建一个可以单独显示这三个组件的项/容器

我得到的最接近的方法是使用带有图标和文本属性的
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
是一个通用类

  • 创建一个扩展
    JPanel
    的类。(我们称之为
    行面板
  • 将其中需要显示的所有元素放在一行中(使用水平布局)
  • 使用以下面板创建您的
    JList

    JList<RowPanel> list = new JList<RowPanel>();
    
    JList list=new JList();
    
  • 创建
    ListCellRenderer
    ListCellEditor
    时,可以参考以下内容:

注意:如果您在任何情况下都不想使用
JTable
,则应执行此操作
JTable
是此解决方案的良好替代方案

希望这有帮助。

祝你好运

“我的问题是如何绕过
JTable
,这样构造它。”为什么要“绕过”?一个标准的(3列)
JTable
(垂直线和水平线被抑制)可以做到这一点。是否有办法为
JPanel
中的每个组件添加
工具提示
。我这样做了,我可以只为
JPanel