JLabel的目的是显示邮件的来源,例如邮件客户端,例如
。致:约翰,玛丽,彼得,弗兰克,汤姆,哈利
我将在一个向量中包含名称,因此可以从中构建一个字符串,然后将标签的文本设置为该字符串。但是它有可能变得很长。我觉得这样的事情可能会很好:
致:John,Mary,Peter,Frank,Tom,Harry, ......
然后,当您点击“ ... ”时,如果您将鼠标悬停在...上,它会展开更多或只显示工具提示 是的,这个想法是从Thunderbird偷来的!我对其他想法持开放态度,不必使用JLabel。
有人有任何建议吗?
感谢。
答案 0 :(得分:3)
不是您想要的,但另一种解决方案是将短文本放在标签的文本中,并将标签的工具提示设置为长文本,以便用户可以通过将鼠标悬停在标签上来阅读全文。
答案 1 :(得分:1)
当没有足够空间显示内容时,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();
}
}