2012-05-22 209 views
1

首先,是的,我知道我是新手,這是我第一次嘗試製作自定義組件。自定義按鈕大小不正確?

好了,在我的項目,我想做出一個自定義的按鈕做了三兩件事:

  1. 繪製背景
  2. 獲取所選應用程序的圖標
  3. 繪製應用程序的按鈕中的名稱。

它可以做所有這三個的,除了按鈕微小

pic

的圖標的Jar應用程序和名稱爲「試驗中的應用」。

這是我班上的paintComponent(圖形)方法,AppButton:

@Override 
public void paintComponent(Graphics g) { 
    super.paintComponent(g); 

    Graphics2D antiAlias = (Graphics2D) g; 
    antiAlias.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 


    g.setColor(Color.blue); 
    //g.fillRoundRect(x, y, width, height, arcWidth, arcHeight); 
    g.fillRoundRect(this.getX(), this.getY(), this.getWidth(), this.getHeight() - 25, 20, 20); 
    g.setColor(Color.red); 

    FontMetrics metrics = g.getFontMetrics(); 
    int widthOfAppName = metrics.stringWidth(this.appName); 
    g.drawString(this.appName, this.getWidth()/2 - (widthOfAppName/2), this.getHeight() - 10); 

    File refrenceFile = new File(this.appURL); 
    try { 
     if (refrenceFile.exists()) { 
      ShellFolder sf = ShellFolder.getShellFolder(refrenceFile); 
      this.appIcon = new ImageIcon(sf.getIcon(true)); 
      g.drawImage(this.appIcon.getImage(), this.getWidth()/2 - (this.appIcon.getIconWidth()/2), 
        this.getHeight()/2 - (this.appIcon.getIconHeight()/2), JLaunch.theFrame); 
    //Draw the centered Image 
     } else { 
      ImageIcon noImageFound = getNoImageAvailable(); 
      //g.drawImage(img, x, y, observer) 
      g.drawImage(noImageFound.getImage(), this.getWidth()/2 - (noImageFound.getIconWidth()/2), 
        this.getHeight()/2 - (noImageFound.getIconHeight()/2), JLaunch.theFrame); 
    //Draw the centered Image 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

在一個側面說明,如果任何人有關於自定義Swing組件有很好的瞭解,你能不能也請點我一個很好的教程還是像你一樣學習它的方法?

回答