我有一个存储在BufferedImage
数组中的图像数组。我想在布局中的JFrame
表格中显示这些图像。我该怎么办注意:buffered image
数组中的图像数量是动态的
答案 0 :(得分:4)
1)使用JList
,您可以Icon
(来自BufferedImage
),Renderer
默认返回JLabel/JComponent
2)所有更改(删除,重新排序,添加)必须在EDT
上完成,然后更好地管理来自SwingWorker
或Runnable#Thread
的所有这些事件
3)将这些Objects
放入DefaultListModel
JList
答案 1 :(得分:1)
创建JPanel并将其布局管理器设置为GridLayout,其中包含网格中所需的行数和列数。
然后为每个BufferedImage创建一个JLabel并将其图标设置为包含BufferedImage的新IconImage。
最后按照您想要的顺序将所有JLabel添加到JPanel,并将JPanel添加到JFrame。
这是我头顶的一个例子;一些伪代码,因为我没有可以使用的图像:
JFrame frame = new JFrame("Title");
JPanel gridPanel = new JPanel();
//Layout as a grid with 4 rows and 3 columns
gridPanel.setLayout(new GridLayout(4,3));
//Pseudocode.
for(each BufferedImage in BufferedImageArray as img) {
gridPanel.add(new JLabel(new ImageIcon(img));
}
frame.add(gridPanel);
//Other frame stuff you want here
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600,600);
frame.setVisible(true);
答案 2 :(得分:1)
在您的问题中要解决这两个主题:绘制一些BufferedImage
(使用Graphics
完成)和布局图像。
你可以做自己的布局,但这可能很棘手。
要让Swing为您执行此操作,请使用已定义的布局(例如GridLayout
或FlowLayout
)并添加尽可能多的JPanel BufferedImage
。确保您的JPanel具有固定的维度(参见setPreferredSize()
)。
使用Graphics/Graphics2D
API完成自定义绘图。
在每个JComponent
上,您可以获取基础Graphics
实例来自定义渲染。在每个JPanel的graphics2D实例中绘制每个BufferedImage。
最后一个技巧是规范化图像尺寸,并且在调用Graphics.drawImage
或裁剪图像时不要忘记尊重比例,如果您想要尊重纵横比(这是用户大多数时间所期望的)。