2016-04-30 3 views
0

Я понятия не имею, что здесь происходит, так как я много рисовал здесь, но это сводит меня с ума. Изображение m_background получает только половину отображаемого изображения. Когда я изменяю размер, похоже, что это какой-то компонент, поэтому, когда я приношу нижнюю часть окна, показывается меньше изображений, и когда я его сниму, это показывает больше.ImageIcon, отображается только половина изображения

Это изображение только 600x600, но только около 250 пикселей. Ive попытался удалить все на панели, и это ничего не делает.

package game; 

import java.awt.Graphics; 
import java.io.File; 
import java.io.IOException; 

import javax.imageio.ImageIO; 
import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class LudoGameController extends JPanel { 

    private JFrame m_ludoFrame; 
    private int m_humanValue; 
    private int m_computerValue; 
    private JPanel m_boardPanel; 
    private ImageIcon m_background = new ImageIcon("images/background.png"); 

    public LudoGameController(JFrame m_ludoFrame, int m_humanValue, int m_computerValue) throws IOException { 
     this.m_ludoFrame = m_ludoFrame; 
     this.m_humanValue = m_humanValue; 
     this.m_computerValue = m_computerValue; 
     m_ludoFrame.add(this); 
     m_ludoFrame.setSize(1000, 700); 
     m_ludoFrame.setVisible(true); 
    } 

    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     g.drawImage(m_background.getImage(), 0, 0, null); 
    } 

} 
+1

Вы спрашиваете: «Почему мой код не работает», но мы застреваем, так как не можем запустить и протестировать ваш код. Лучше всего, если вы могли бы создать и опубликовать [mcve] или лучше [sscce] (http://sscce.org), тот, который использует изображение, доступное для всех онлайн, и которое показывает вашу ошибку непосредственно для нас. –

+0

В качестве побочной рекомендации я бы изменил 'g.drawImage (m_background.getImage(), 0, 0, null);' to 'g.drawImage (m_background.getImage(), 0, 0, this);' –

+0

Я бы также избегал использования ImageIcons, когда я действительно хочу использовать только Image. –

ответ

0

Может попытаться использовать JLabel с пиктограммой и посмотреть, не работает ли это по-другому. Ниже приведен фрагмент кода, который я использовал много раз в сценариях, похожих на ваши.

//bringing in the image 
File file = new File("images/background.png"); 
try { 
    BufferedImage logo = ImageIO.read(file); 
    JLabel logoLabel = new JLabel(new ImageIcon(logo)); 
    logoPanel.add(logoLabel); 
} catch (IOException ex) { 
    System.err.println(ex); 
} 
+0

, но изображение должно быть добавлено на фон 'JPanel'. Вы предлагаете его добавить в панель – Blip

+0

Да, вы правы. +1 на ваш ответ. – corbfon

1

Поскольку вы работаете только с изображением, лучше не использовать ImageIcon. Вместо того, чтобы использовать ImageIO класс, как показано ниже, чтобы загрузить изображение из файла:

Сначала объявить переменную класса background как тип Image и инициализирует его null.

Затем в конструкторе добавьте следующий код, чтобы получить изображение из файла

File file = new File("images/background.png"); 
try { 
    background = ImageIO.read(file).getScaledInstance(1000, 700, Image.SCALE_FAST); 
} catch (IOException ex) { 
    System.err.println(ex); 
} 

Теперь в методе paintComponent заменить

g.drawImage(m_background.getImage(), 0, 0, null); 

с

g.drawImage(background, 0, 0, null); 

Я надеюсь, что это помочь тебе.

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