2010-03-26 1 views
2

JLabel의 목적은 메일 클라이언트와 같이 메시지의 대상을 표시하는 것입니다. 으로 특정 길이 또는 값의 수에 도달 한 후 텍스트를 숨기는 JLabel

: 요한, 마리아, 피터 프랭크, 톰,

해리

나는 그에서 문자열을 구축 할 수 있도록 벡터의 이름이 다음이 문자열로 레이블의 텍스트를 설정합니다. 그러나 그것은 상당히 오래 갈 가능성이 있습니다. 으로

: 나는 이런 식으로 뭔가가 좋을 거라고 생각했다 당신이 '를 클릭하면 다음 ... 요한, 마리아, 피터 프랭크, 톰, 해리,

을 .. . ', 더 확장하거나 툴팁을 표시하면 마우스 위로 움직이면 ... 예 썬더 버드에서이 아이디어가 도난당했습니다! 나는 다른 아이디어에 열려 있으며, JLabel을 사용할 필요가 없습니다.

누구에게 의견이 있습니까?

감사합니다.

+0

죄송합니다. 여기에 질문이 있습니까? – ninesided

+0

@ninesided 지금 질문을 추가했습니다 :) –

답변

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

자세한 답변과 코드 샘플을 보내 주셔서 감사합니다. 이 질문은 정확하게 지정된대로 작동합니다. –

3

다른 해결책으로는 텍스트 텍스트에 짧은 텍스트를 넣고 레이블의 툴팁을 긴 텍스트로 설정하여 사용자가 레이블 위로 마우스를 올리면 전체 텍스트를 읽을 수 있습니다.

+0

나쁜 제안이 아닙니다. 감사합니다. –

관련 문제