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>();
- 创建
ListCellRenderer
和ListCellEditor
可以参考这个:https://docs.oracle.com/javase/tutorial/uiswing/components/list.html
注意: 如果您在任何情况下都不想使用 JTable
,则应该这样做。 JTable
是该解决方案的一个很好的替代方案。
希望对您有所帮助。
祝你好运。
这是我的问题:
我正在创建一个 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>();
- 创建
ListCellRenderer
和ListCellEditor
可以参考这个:https://docs.oracle.com/javase/tutorial/uiswing/components/list.html
注意: 如果您在任何情况下都不想使用 JTable
,则应该这样做。 JTable
是该解决方案的一个很好的替代方案。
希望对您有所帮助。
祝你好运。