2013-03-10 5 views
-1

아래 이미지가 있습니다. 그림에 대한 레이블 하나, '@ usuario1'텍스트에 대한 또 다른 레이블, 'contenido'에 대한 또 다른 레이블, '#demo'에 대한 또 다른 레이블로 구성된 JPanel로 구성됩니다. 이미지 아래에는 그것을 구성하는 코드가 있습니다. 전체 높이 요소 - 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

그것은 나에게 사소한 보였다. 간단히 growy 그림과 함께 레이블을 만든 다음 옵션과 함께 '@ usuario1'을 추가하면 다음 구성 요소 ('contenido'레이블)가 다음 줄의 시작 부분에 추가되므로 그림 레이블 언급 된 다음 줄은 '@ usuario1'레이블 바로 아래에서 시작됩니다. 그러나 다음 줄은 그림 레이블 바로 아래에서 시작하지만, 레이블이 JPanel의 높이를 모두 차지하고 있기 때문에 표시되지 않으므로 시작보다 나 빠지게됩니다.

내 목표가 가능합니까? 그렇다면 어떻게?

+1

물론 가능합니다 .-- 당신이 달성하고자하는 것을 보여주기 위해 SSCCE를 보여 주시고 어떤 일이 일어나는지 정확하게 보여 주시면 어떻게 목표를 정확하게 달성 할 수 있는지 보여 드리겠습니다. – kleopatra

답변

3

MiGLayout의 경우 link으로 이동하거나 GridBagLayout을 시도 할 수 있습니다. GridBagLayout this link을 사용하려면 도움이 될 수 있습니다. GridBagLayout을 사용하여 원하는대로 구성 요소를 설정할 수 있습니다. 예 아래의

테이크 참조 :

O/P

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); 


:

enter image description here

+0

분명히 치트 시트를 읽었을 것입니다. 그렇지 않으면 어떻게 성장하고 감싸는 옵션에 대해 알고 있어야합니까? 그리고 GridBagLayout의 경우, 외부 JDK 레이아웃보다는 JDK 레이아웃을 선호하지만, MiGLayout을 사용하면 레이아웃에 익숙하지 않아 Mivelayout을 사용할 수 있습니다 (또는 최소한) 상당히 사용하기 쉽지만, 사실 내 응용 프로그램의 다른 장소에서 사용하고있는 많은 가능성을 제공합니다. (원래 레이아웃을 사용하기를 원하지만 MiGLayout을 사용하는 것이 그리 마음에 들지 않습니다. . –

+0

내 답변이 업데이트되었습니다. 당신은 약간의 아이디어를 얻을 것이다;) – Sach

0

하하! 귀하의 징후 덕분에 그것을 처리 할 수 ​​있지만 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);