2013-03-10 88 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);