2014-03-01 32 views
2

当前实现布局: implementation layout动态调整挂钩的JLabel图像在GridLayout布局管理

((编辑:添加 代码:))

private JPanel panelCenter; 
private List<BufferedImage> listCreatedImages; 
public ChooseCircuitPanel(List<BufferedImage> listCreatedImages) { 
     this.listCreatedImages = listCreatedImages; 
     initiate(); 
} 
private void initiate() { 
     setLayout(new BorderLayout(50, 50)); 
     panelCenter = new JPanel(); 
     LayoutManager theLayout = new GridLayout(0, 3, 0, 0); 
     panelCenter.setLayout(theLayout); 
     panelCenter.setBorder(BorderFactory.createLineBorder(Color.BLACK)); 
     for (BufferedImage bufferedImage : listCreatedImages) { 
      ImageIcon theImage = new ImageIcon(bufferedImage); 
      JLabel lblForImage = new JLabel(theImage); 
      lblForImage.setBorder(BorderFactory.createLineBorder(Color.BLACK)); 
      panelCenter.add(lblForImage); 
     } 
     this.add(panelCenter, BorderLayout.CENTER); 
} 

现状:

我们想在这里展示一个赛道。应该通过将标准瓷砖彼此相邻来显示电路。应该可以调整窗口的大小,并且电路板也应该调整大小。

((编辑:位更多的信息:该赛道的数据被存储在服务器上和桌面应用程序的数据可视化的东西翻译,通过将一些标准砖以正确的顺序)。)

((编辑:我们是不允许使用任何外部库应该只使用Java Swing代码)是可行的。)

我想过把图像在JLabel,并把这些JLabel以GridLayout作为布局管理器。使用GridLayout - 我认为 - 应该很容易找到解决方案: GridLayout(= JLabels)中的组件已经可以扩展并按照我的需要进行操作。 现在,它只是一个找到调整图像大小的方法,以便填充JLabels

正如您所看到的:现在,图像具有固定的大小,并且根本不会缩放。

我浏览了一下,看到很多这归结为使用的Graphics2Dsuper.paintComponent方法解决方案等

但大多数这些解决方案无关了网格布局的。 所以确凿问题: 是否有更简单的解决方案除了使用的Graphics2D,等知道我使用网格布局?

如果没有,我当然会使用Graphics2D的,等等,但现在我只是在探索我的选择。 :)

((编辑:解决瓷砖现在完全适合对方不介意错位,这是我们的错)。) result

+0

你看过['JMCAD'](http://sourceforge.net/projects/jmcad)吗? – trashgod

+0

我觉得你对这个问题有点误解(我的错,加上这个也会开始发帖): 这不是一个比赛电路设计工具或任何东西。 赛道电路数据存储在服务器上,桌面应用程序必须将数据转换为可视化的东西,方法是按照正确的顺序放置一些标准切片。 :) 我会删除设计概念:实际上并非真的必要。 – Asgaro

+1

'我们不允许使用任何外部库。' - 什么是GridView?这不是一个标准的课程。 – camickr

回答

2

没有Swing组件可以做你想做的事情,所以你需要编写自己的代码。

最简单的方法是使用达里尔的Stretch Icon您的JLabel。

或者另一种方法是创建您自己的自定义组件,在绘制图像时动态缩放图像。像Background Panel这个代码允许您缩放或平铺图像。

+0

我已经遇到过Darryl的Stretch Icon课程,但还没有尝试,因为我首先想听听其他潜在的解决方案。 但我现在插入他的代码,它工作的很棒,我的期望!谢谢。谢谢Darryl。 – Asgaro

1

鉴于观点的性质,我会建议完全放弃图像,而是在Icon中实施渲染。假定您可以使用标签制作图标。