-1

下の画像があります。これは、画像用の1つのラベル、「@ usuario1」テキスト用の別のラベル、「contenido」用の別のラベル、および「#demo」用の別のラベルを含むJPanelで構成されます。画像の下には、それを構成するコードがあります。

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

しかし、私が達成したいのはこれです:

ゴール

それは私には些細なことのように見えました。単に画像付きのラベルを成長させてから、ラップオプション付きの「@ usuario1」を追加し、次のコンポーネント(「contenido」ラベル)が次の行の先頭に追加されるようにします。画像ラベルがすべてを占めているため、 JPanelの高さ、前述の次の行は「@usuario1」ラベルのすぐ下から始まります。ただし、次の行は画像ラベルのすぐ下から始まるようですが、ラベルがJPanelの高さをすべて取っているため、表示されないため、最初よりも悪い結果が得られます。

私の目標は可能ですか?もしそうなら、どのように?

4

2 に答える 2

3

MiGLayoutのリンクにあるPDFを参照するか、GridBagLayoutを試すことができます。GridBagLayoutを使用する場合は、このリンクが役立つ場合があります。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:

ここに画像の説明を入力してください

于 2013-03-10T11:19:14.050 に答える
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);
于 2013-03-10T14:46:48.810 に答える