2014-03-01 35 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中實施渲染。假定您可以使用標籤製作圖標。