的JLabel的目的是显示一个消息是谁到,就像在邮件客户端e.g。

要:约翰,玛丽,彼得·弗兰克,汤姆,哈里

我将有名字的载体中,可以建立从一个字符串,然后设置标签的文本到这个字符串。但是它必须得到相当长的潜力。我想这可能是不错的东西是这样的:

要:约翰,玛丽,彼得·弗兰克,汤姆,哈利, ...

然后当你点击“ ... ”,这将扩大更多或只显示一个工具提示,如果你的鼠标在... 是的,这想法是从雷鸟被偷了!我打开其他的想法,不必使用一个JLabel。

有没有人有什么建议吗?

感谢。

有帮助吗?

解决方案

的JLabel会自动添加“...”当没有足够的空间来显示它的内容。所以,如果你是像素宽度希望约束刚才设置的最大尺寸的标签上,并使用布局管理服从此设置(GridBagLayout的可能)。

但是你可能要由若干名来约束。下面是与显示的“...”按钮前的前四个名字标签的例子。当按钮被点击它改变了标签的文字显示所有名称,按钮从布局删除自身。全名文本会在提示。

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

其他提示

不是你想要的,但另一种解决办法是把短文本的文本为您的标签,并设置提示为标签的长文本,以便用户可以将鼠标悬停在标签阅读全文。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top