繁体   English   中英

摇摆:JList将多个组件作为单个项保存

[英]Swing: JList holding multiple Components as a single item

这是我的问题:我正在创建一个负责列出图层的窗口,该窗口在其中显示该图层的当前图像(截至目前为ImageIcon的形式),图层的名称以及一个复选框,用于更改当前的表示层的/关闭状态。 整个过程应该是Paint.NET的Layer Window仿制品 ,如下所示:

我的问题是如何绕过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的类。 (让我们称它为RowPanel
  • 将所有需要放在其中的元素放在一行中(使用水平布局)
  • 使用以下面板创建JList

     JList<RowPanel> list = new JList<RowPanel>(); 
  • 您可以参考此文件来创建ListCellRendererListCellEditorhttps : //docs.oracle.com/javase/tutorial/uiswing/components/list.html

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

希望这可以帮助。
祝好运。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM