2015-08-18 2 views
0
BufferedImage buttonIcon = ImageIO.read(new File("res//Login Button.png")); 
loginButton = new JButton(new ImageIcon(buttonIcon)); 

Я использую приведенный выше код, чтобы попытаться добавить изображение в JButton, но кнопка не отображается на раме, и я получаю NullPointerException. Вот фактический код для создания кнопки:Добавление ImageIcon к JButton, что делает его исчезают

JButton loginButton = new JButton("Login"); 
    loginButton.setFont(new Font("Franklin Gothic Demi Cond", Font.PLAIN, 20)); 
    loginButton.setBounds(212, 252, 211, 55); 
    try { 
     ImageIcon image = new ImageIcon(getClass().getResource("res/LoginButton.png")); 
     loginButton = new JButton("", image); 
     panel.add(loginButton); 
     } catch (Exception e) { 
      JOptionPane.showMessageDialog(null, e); 
     } 
    panel.add(loginButton); 
+0

Опубликовать ошибку stacktrace .. изображение есть? –

+0

это 'LoginButton.png' или' Login Button.png'? Между вашим примером сверху и фактическим внизу есть несогласованность. – leigero

+0

@leigero это LoginButton.png – Groax

ответ

0

Вы создаете два экземпляра вашей JButton/перезапись Текст первой заменить второй. Измените код следующим образом:

JButton loginButton = null; 

try { 
    ImageIcon image = new ImageIcon(getClass().getResource("res/LoginButton.png")); 
    loginButton = new JButton("", image); 
    panel.add(loginButton); 
    } catch (Exception e) { 
     JOptionPane.showMessageDialog(null, e); 
    } 


if (!loginButton) 
    loginButton = new JButton("Login"); 

loginButton.setFont(new Font("Franklin Gothic Demi Cond", Font.PLAIN, 20)); 
loginButton.setBounds(212, 252, 211, 55); 

panel.add(loginButton); 
+0

Вы не можете вызвать loginButton.setFont() сразу после установки loginButton = null! – FredK

+0

приятный улов @FredK! Изменено, чтобы показать правильное решение. – andrewdleach

+0

OP не помещал никакого текста при добавлении изображения, поэтому просто setFont, только если будет текст. Размещение текста с текстом в catch-clause исключает необходимость более позднего if-теста. – FredK

0
JButton loginButton = null; 
try { 
     ImageIcon image = new ImageIcon(getClass().getResource("res/LoginButton.png")); 
     loginButton = new JButton("", image); 
     panel.add(loginButton); 
     } catch (Exception e) { 
      JOptionPane.showMessageDialog(null, e); 
      loginButton = new LoginButton("Login")(; 
      loginButton.setFont(new Font("Franklin Gothic Demi Cond", Font.PLAIN, 20)); 
     } 
    panel.add(loginButton); 

Вызов loginButton.setBounds(), вероятно, не имеет никакого эффекта - пусть менеджер компоновки поместить кнопку.

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