2013-01-17 28 views
0

我在JPanel中有一個JLabel。我使用Netbeans IDE作爲我的java程序的GUI(免費設計,沒有佈局管理器)。如何在運行時突出顯示JLabel的一部分?

在運行時我需要突出顯示我的JLabel的一部分。突出的JLabel的一部分可以作爲這裏說的做:How to highlight part of a JLabel?

我不知道該怎麼做,在運行時,我的意思是我已經有一個JLabel,現在我能覆蓋這對於那些的paintComponent()方法目的?

+1

它可能會更容易使用JTextField沒有邊界,並設置爲透明 - 恕我直言 – MadProgrammer

+0

我的問題是不是如何做突出顯示,它是如何做在運行時在頁面中說什麼... – Soheil

+0

只是改變文本與HTML內,從未嘗試過,也許你將需要打電話repaint() – Zemzela

回答

0

這裏是你提到的職位由吉洪Jelvis給出的答案的一個示例是,所有你需要的是增加一些領域(在這個例子中startend)以指示突出的區域,並使用方法(在該示例highlightRegion)來設置這些字段:

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);以簡化的東西。如果你不使用它,那麼你需要做額外的計算來確定要突出顯示的區域的確切垂直位置。

+0

thanx使用HTML,但它不能解決我的問題。我必須使用netbeans免費設計工具爲我的圖形用戶界面,這些作品不能在這樣的情況下完成,因爲Netbeans只允許我使用JLabel,而不是它的繼承者... – Soheil

+0

@ user1986618創建一個新的標籤類(稱爲HighlightLabel)在您的項目基於上一個問題的代碼。做一個乾淨的和建設的項目。創建一個新窗體,將該類(從項目)拖到窗體上。它甚至可以添加到調色板,如果你真的想 – MadProgrammer

+0

@MadProgrammer太棒了!非常感謝你的驚人答案!我不知道這樣的作品在Netbeans中是可能的! +1 – Soheil

相關問題