2012-05-22 4 views
1

Прежде всего, да, я знаю, что я новичок, и это моя первая попытка создать пользовательский компонент.Пользовательская кнопка неправильного размера?

Итак, в моем проекте, я пытаюсь сделать пользовательскую кнопку, которая делает три вещи:

  1. Нарисовать фон
  2. Получить иконку выбранного приложения
  3. Изобразите приложения имя в кнопке.

Он может сделать все три из них, за исключением того, что кнопка крошечное:

pic

Значок приложения Jar и название "Test Application".

Это метод paintComponent (Graphics) в моем классе, 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, вы можете также, пожалуйста, указать мне хороший учебник или способ обучения, как вы это сделали?

ответ

1

Ну, для одного, JButton может рисовать изображения. Но то, что вы, вероятно, ищете, - JComponent.setPreferedSize(). Вы можете посмотреть документацию здесь: http://docs.oracle.com/javase/6/docs/api/javax/swing/JComponent.html#setPreferredSize(java.awt.Dimension).

+0

> _ <Спасибо ... Я настолько тупой ... – mattbdean

+0

Добро пожаловать. И вы код, вероятно, лучше, чем 75% людей, с которыми я иду в школу. Продолжать! –

Смежные вопросы