2013-03-10 28 views
-1

我有下面的圖像。它由一個包含一個圖片標籤的JPanel,另一個用於'@ usuario1'文本​​,另一個用於'contenido',另一個用於'#demo'。圖像下面是構建它的代碼。全高度元素 - MiGLayout

src

SettingsManagerTab.panelForTweet1 = new JPanel(); 
SettingsManagerTab.panelForTweet1.setOpaque(true); 
SettingsManagerTab.panelForTweet1.setLayout(new net.miginfocom.swing.MigLayout()); 
this.add(SettingsManagerTab.panelForTweet1); 

SettingsManagerTab.labelForTweetPhoto1 = new JLabel(new ImageIcon(
     SettingsManagerTab.class.getResource("/res/User1.png"))); 
SettingsManagerTab.panelForTweet1.add(SettingsManagerTab.labelForTweetPhoto1); 

SettingsManagerTab.labelForTweetUsername1 = new JLabel("@usuario1"); 
final Font contentFont = new Font(SettingsManagerTab.labelForTweetUsername1.getFont() 
     .getName(), Font.BOLD, SettingsManagerTab.labelForTweetUsername1.getFont() 
     .getSize()); 
final Font userFont = new Font(contentFont.getName(), Font.BOLD, 
     (int) (contentFont.getSize() * 0.7)); 
SettingsManagerTab.labelForTweetUsername1.setFont(userFont); 
SettingsManagerTab.panelForTweet1.add(SettingsManagerTab.labelForTweetUsername1); 

SettingsManagerTab.labelForTweetContent1 = new JLabel("contenido"); 
SettingsManagerTab.labelForTweetContent1.setFont(contentFont); 
SettingsManagerTab.panelForTweet1.add(SettingsManagerTab.labelForTweetContent1); 

SettingsManagerTab.labelForTweetHashtag1 = new JLabel("#demo"); 
SettingsManagerTab.labelForTweetHashtag1.setFont(contentFont); 
SettingsManagerTab.panelForTweet1.add(SettingsManagerTab.labelForTweetHashtag1); 

但我想實現的是:

goal

它看起來微不足道的我。只需製作grow 012帶圖片的標籤,然後添加'@ usuario1'和包裝選項,以便在下一行的開頭添加下一個組件('contenido'標籤),並且由於圖片標籤佔用JPanel的所有高度,所提到的下一行將在'@ usuario1'標籤下面開始。然而,似乎發生的情況是下一行從圖片標籤的下方開始,但由於標籤佔據了JPanel的所有高度,因此不會顯示,所以我得到的結果比開頭差。

我的目標可能嗎?如果是這樣,怎麼樣?

+1

當然可能:-)請展示一個SSCCE來展示你想要達到的目標與發生的事情,以便我們可以調整以向你展示如何實現你的目標。 – kleopatra 2013-03-10 13:58:32

回答

3

請通過PDF格式的link獲取MiGLayout,或者您可以嘗試GridBagLayout。如果你想使用GridBagLayout this link可能會有所幫助。使用GridBagLayout,您可以根據需要設置組件。的例子下面

採取參考:

panel.add(comp1); 
    panel.add(comp2, "span 2 2"); // The component will span 2x2 cells. 
    panel.add(comp3, "wrap"); // Wrap to next row 
    panel.add(comp4); 
    panel.add(comp5, "wrap"); // Note that it "jumps over" the occupied cells. 
    panel.add(comp6); 
    panel.add(comp7); 


O/P:

enter image description here

+0

很顯然,我閱讀了備忘單(否則,我應該怎麼知道關於生長和包裝選項?)。而對於GridBagLayout,當然我更喜歡使用JDK佈局而不是外部佈局,但是如果我嘗試使用MiGLayout,那是因爲我對佈局不熟練,但是MiGLayout(或者至少應該)相當容易使用,但提供了許多可能性,實際上我已經在我的應用程序的其他地方使用了(這就是爲什麼,儘管我更喜歡使用原始佈局,但我並不介意使用MiGLayout) 。 – 2013-03-10 12:21:31

+0

更新了我的答案。你會有一些想法;) – Sach 2013-03-10 13:03:16

0

哈哈!管理做到這一點感謝您的指示sachin,但與GridBagLayout。

SettingsManagerTab.panelForTweet1.setLayout(new GridBagLayout()); 
this.add(SettingsManagerTab.panelForTweet1); 

SettingsManagerTab.labelForTweetPhoto1 = new JLabel(new ImageIcon(
     SettingsManagerTab.class.getResource("/res/User1.png"))); 

final GridBagConstraints a = new GridBagConstraints(), b = new GridBagConstraints(), c = new GridBagConstraints(), d = new GridBagConstraints(); 
a.gridheight = GridBagConstraints.REMAINDER; 
a.gridx = 0; 
a.weightx = 0.1; 
a.anchor = GridBagConstraints.LINE_START; 
SettingsManagerTab.panelForTweet1.add(SettingsManagerTab.labelForTweetPhoto1, a); 

SettingsManagerTab.labelForTweetUsername1 = new JLabel("@usuario1"); 
final Font contentFont = new Font(SettingsManagerTab.labelForTweetUsername1.getFont() 
     .getName(), Font.BOLD, SettingsManagerTab.labelForTweetUsername1.getFont() 
     .getSize()); 
final Font userFont = new Font(contentFont.getName(), Font.BOLD, 
     (int) (contentFont.getSize() * 0.7)); 
SettingsManagerTab.labelForTweetUsername1.setFont(userFont); 
b.weightx = 1; 
b.gridwidth = 2; 
b.anchor = GridBagConstraints.LINE_START; 
SettingsManagerTab.panelForTweet1.add(SettingsManagerTab.labelForTweetUsername1, b); 

SettingsManagerTab.labelForTweetContent1 = new JLabel("contenido"); 
SettingsManagerTab.labelForTweetContent1.setFont(contentFont); 
c.gridheight = GridBagConstraints.REMAINDER; 
c.weightx = 1; 
c.anchor = GridBagConstraints.LINE_START; 
SettingsManagerTab.panelForTweet1.add(SettingsManagerTab.labelForTweetContent1, c); 

SettingsManagerTab.labelForTweetHashtag1 = new JLabel("#demo"); 
SettingsManagerTab.labelForTweetHashtag1.setFont(contentFont); 
d.weightx = 30; 
d.anchor = GridBagConstraints.LINE_START; 
SettingsManagerTab.panelForTweet1.add(SettingsManagerTab.labelForTweetHashtag1, d);