2011-01-21 6 views
5

Java Swing JLabels 배열이 있습니다. 내 프로그램 사용자는 JFrame에 새 JLabel을 추가 할 수 있으며 프레임의 JLabel 수에 따라 JLabel의 텍스트 크기를 변경하려고합니다. 너무 많은 JLabel이 있으면 텍스트는 여전히 적합하며 다른 JLabel과 겹치지 않습니다.JLabel의 텍스트를 동적으로 크기 조정

+0

확인 .. 그 중 하나에 대해 질문이 있으십니까? 그렇다면 소식을 수정하고 질문을 추가하십시오. SSCCE (http://pscode.org/sscce.html)를 사용하면 이미 시도한 바가 바람직합니다. –

+0

질문에 대한 좋은 코드는 무엇입니까 동적 크기 사용자가 레이블을 원하는만큼 추가 할 수 있도록 레이블에 텍스트를 넣을 수 있습니다. – italiano40

답변

2

꽤 멋져 보이지만, 그것이 원하는 것이라면 여기 컴파일과 실행을위한 간단한 코드가 있습니다. 프로젝트에 필요한 코드를 자유롭게 추출하십시오. 즐겁게, - 미시시피

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class LabelSize extends JPanel {  

    private Font  font; 
    private JPanel  panel; 
    private JLabel  label = new JLabel ("Font Size Adapter Label", JLabel.CENTER); 
    private JTextField tf = new JTextField ("Type in text for new label here and hit [Enter]"); 

    public LabelSize() {   
     super (new BorderLayout()); 
     panel = labelPanel(); 
     add (panel, "North"); 
     add (tf, "South"); 
     tf.addActionListener (new ActionListener() { 
      public void actionPerformed (ActionEvent e) { 
       label.setText (tf.getText()); 
       label.setFont (font); 
       int labelW = (int) Math.ceil (label.getPreferredSize().getWidth()); 
       int maxWidth = (int) Math.floor (panel.getSize().getWidth()); 
       if (labelW <= maxWidth) 
        return; 
       for (int k = 1 ; labelW > maxWidth ; k++) { 
        Font labelFont = font.deriveFont (font.getSize() - k*1.0f); 
        label.setFont (labelFont); 
        labelW = (int) Math.ceil (label.getPreferredSize().getWidth()); 
     }}}); 
    } 

    private JPanel labelPanel() { 
     JPanel lp = new JPanel(new BorderLayout()); 
     lp.setPreferredSize (new Dimension (270,30)); 
     lp.add (label, "North"); 
     font = label.getFont(); 
     return lp; 
    } 

    public static void main (String[] args) { 
     JFrame lsFrame = new JFrame ("Lfit"); 
     lsFrame.add (new LabelSize()); 
     lsFrame.pack(); 
     lsFrame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 
     lsFrame.setVisible(true); 
}} 
+0

코드를 사용해 주셔서 감사합니다. 그렇지만 아무 것도 작동하지 않습니다. Jlabel의 크기 – italiano40

+0

당신은 환영합니다, 죄송합니다, 나는이 코드를 이해하지 못합니다 - 코드의 어느 부분이 작동하지 않습니까? 방금 편집기에서 복사하여 저장하고 컴파일하고 실행하여 정상적으로 실행됩니다. 귀하의 질문에 맞지 않았을 수 있습니다 - 어떤 구성 요소 (무언가) 당신이 크기를 바꿨습니까? JLabel을 고정 (기본값) 글꼴로 지정 하시겠습니까? –