2

JLabelの目的は、メールクライアントのように、メッセージの宛先を表示することです。

宛先:ジョン、メアリー、ピーター、フランク、トム、ハリー

ベクトルに名前を付けるので、そこから文字列を作成して、ラベルのテキストをこの文字列に設定できます。ただし、かなり長くなる可能性があります。私はこのようなものがあるといいかもしれないと思っていました:

宛先:ジョン、メアリー、ピーター、フランク、トム、ハリー、..。

次に、「...」をクリックすると、さらに展開されるか、マウスオーバーするとツールチップが表示されます...はい、このアイデアはThunderbirdから盗まれました。私は他のアイデアを受け入れています。JLabelを使用する必要はありません。

誰か提案がありますか?

ありがとう。

4

2 に答える 2

3

必要なものではありませんが、別の解決策として、ラベルのテキストに短いテキストを入れ、ラベルのツールチップを長いテキストに設定して、ユーザーがラベルにカーソルを合わせて全文を読むことができるようにします。

于 2010-03-26T11:14:58.490 に答える
1

JLabelは、その内容を表示するのに十分なスペースがない場合、自動的に「...」を追加します。したがって、ピクセル幅による制約を検討している場合は、ラベルに最大サイズを設定し、この設定に従うレイアウトマネージャーを使用してください(GridbagLayoutかもしれません)。

ただし、特定の数の名前で制約することをお勧めします。これは、「...」ボタンの前に最初の4つの名前を示すラベルが付いた例です。ボタンをクリックすると、ラベルのテキストが変更されてすべての名前が表示され、ボタンがレイアウトから削除されます。フルネームのテキストはツールチップで利用できます。

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class LabelDotTest
{
  private String fullText = "";
  private String clippedText = "";

  public LabelDotTest()
  {
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(new Dimension(280, 50));
    frame.setLocationRelativeTo(null);

    String[] testNames = new String[]{"John", "Mary", "Peter", "Hank", "Alys", "Debbie"};
    int DISPLAY_MAX = 4;

    for(int i=0; i<testNames.length; i++)
    {
      fullText += testNames[i];
      if (i<DISPLAY_MAX)
         clippedText += testNames[i];

      if (i<testNames.length-1)
      {
        fullText += ", ";
        if (i<DISPLAY_MAX)
          clippedText += ", ";
      }
    }

    final JLabel label = new JLabel(clippedText);
    label.setToolTipText(fullText);

    final JButton button = new JButton("...");
    button.setBorder(BorderFactory.createEmptyBorder());
    button.setOpaque(false);
    button.setBackground(new Color(0,0,0,0));
    button.setToolTipText(fullText);
    button.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e)
        {
          label.setText(fullText);
          button.getParent().remove(button);
        }
      });

    JPanel panel = new JPanel(new GridBagLayout());
    panel.add(label);
    panel.add(button);
    frame.add(panel);

    frame.setVisible(true);
  }

  public static void main(String[] args)
  {
    new LabelDotTest();
  }
}
于 2010-03-26T17:53:29.527 に答える