2013-01-17 2 views
0

JPanel 안에 JLabel이 있습니다. 내 Java 프로그램의 GUI 용 Netbeans IDE (무료 디자인 및 레이아웃 관리자 없음)를 사용하고 있습니다.런타임시 JLabel의 일부를 강조 표시하는 방법은 무엇입니까?

런타임시에는 JLabel의 일부를 강조 표시해야합니다. 여기에 말한 것처럼 JLabel의 일부분을 강조 표시 할 수 있습니다 : How to highlight part of a JLabel?

런타임에이를 수행하는 방법을 모르겠다. 이미 JLabel이 있음을 의미합니다. 이제 어떻게 JLabel을 재정의 할 수 있습니까? 목적?

+1

테두리가없는 JTextField를 사용하고 투명하게 설정하는 것이 더 쉬울 것입니다. - IMHO – MadProgrammer

+0

내 문제는 강조 표시를하는 방법이 아니라 런타임시 해당 페이지에서 말한 것을 수행하는 방법입니다 ... – Soheil

+0

텍스트 만 변경 html로 내부, 한번도 시도한 적이 없는데 어쩌면 재귀() – Zemzela

답변

0

여기에 언급 한 게시물에서 Tikhon Jelvis가 제공 한 답변의 예시 예입니다. 강조 표시 할 영역을 나타내는 데 일부 필드 (이 예에서는 startend)를 추가하고

import java.awt.Color; 
import java.awt.FontMetrics; 
import java.awt.Graphics; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 

public class Main 
{ 
    public static void main(String[] argv) 
    { 
     JFrame frame = new JFrame("Highlighting"); 
     frame.setSize(300, 100); 

     Label label = new Label(); 
     label.setText("Money does not buy happiness"); 
     label.setVerticalAlignment(JLabel.TOP); 
     label.highlightRegion(3, 15); 

     frame.add(label); 
     frame.setVisible(true); 
    } 

    static class Label extends JLabel 
    { 
     private static final long serialVersionUID = 1L; 
     private int start; 
     private int end; 

     @Override 
     public void paint(Graphics g) 
     { 
      FontMetrics fontMetrics = g.getFontMetrics(); 

      String startString = getText().substring(0, start); 
      String text = getText().substring(start, end); 

      int startX = fontMetrics.stringWidth(startString); 
      int startY = 0; 

      int length = fontMetrics.stringWidth(text); 
      int height = fontMetrics.getHeight(); 

      g.setColor(new Color(0x33, 0x66, 0xFF, 0x66)); 
      g.fillRect(startX, startY, length, height); 

      super.paint(g); 
     } 

     public void highlightRegion(int start, int end) 
     { 
      this.start = start; 
      this.end = end; 
     } 
    } 

} 

주의 일을 단순화하기 label.setVerticalAlignment(JLabel.TOP);의 사용 : (이 예에서는 highlightRegion)는 이러한 필드를 설정합니다. 당신이 그것을 사용하지 않는다면 당신은 강조 될 지역의 정확한 수직 위치를 결정하기 위해 여분의 계산을 할 필요가 있습니다.

+0

에있는 HTML을 사용할 수 없기 때문입니다.하지만 문제가 해결되지 않습니다. 내 netbeans 무료 디자인 도구를 사용해야합니다 내 GUI 및 이러한 작업을 할 수 없습니다 Netbeans 나만 JLabel 사용할 수 있도록 상속자 ... – Soheil

+0

@ user1986618 새 레이블 클래스 (같은 HighlightLabel라는) 이전 질문의 코드를 기반으로 프로젝트에서 깨끗이하고 프로젝트를 수행하십시오. 새 양식을 작성하고 클래스를 프로젝트에서 양식으로 끌어옵니다. 정말로 원하는 경우 팔레트에 추가하는 것도 가능합니다. – MadProgrammer

+0

@MadProgrammer Great !!!! 당신의 놀라운 답변에 많은 감사를드립니다! 나는 Netbeans에서 그러한 작업이 가능하다는 것을 몰랐다 !!! +1 – Soheil

관련 문제