Изображение на Custom JComponent не видно? - PullRequest
2 голосов
/ 06 марта 2012

Когда я запускаю свой код, он не отображается. По сути, у меня есть пользовательский Jcomponent, который я добавляю в JFrame или View, а затем создаю View, который создает фрейм в моем основном методе. Я уже добавил в JFrame вот мой код для JComponent:

public class CardDisplay extends JComponent {
private Card card;
private Image cardImage;

public CardDisplay()
{
    cardImage = Toolkit.getDefaultToolkit().createImage(("Phase10//res//Blue2.png"));
}

@Override
public void paint(Graphics g)
{
    g.drawImage(cardImage, 125 ,200, this);
}
public class View {
public View(){

}

public void makeFrame()
{
   JFrame frame = new JFrame("Phase 10");
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   frame.setLayout(new BorderLayout());
   JPanel handPanel = new JPanel();
   CardDisplay cd = new CardDisplay();
   handPanel.setLayout(new FlowLayout());
   frame.add(handPanel, BorderLayout.SOUTH);
   handPanel.add(cd);
   frame.pack();
   frame.setSize(600,500);
   frame.setResizable(false);
   frame.setLocationRelativeTo(null);
   frame.setVisible(true);
}

public static void main(String[] args){
    View view = new View();
    Game game = new Game();
    view.makeFrame();
    //game.run();

}

Ответы [ 2 ]

3 голосов
/ 06 марта 2012

Вот рабочая версия. Проблема была в основном связана с предпочтительным размером компонента. Обратите внимание на реализацию метода getPreferredSize().

Если вы хотите увидеть границы компонентов, я бы порекомендовал использовать MigLayout менеджер макетов в режиме отладки (на сайте есть вся необходимая документация).

public class CardDisplay extends JComponent {
    private BufferedImage cardImage;

    public CardDisplay() {
        try {
            cardImage = ImageIO.read(new File("Phase10//res//Blue2.png"));
        } catch (final IOException e) {
            e.printStackTrace();
        }    
    }

    @Override
    public void paintComponent(final Graphics g) {
        super.paintComponent(g);
        g.drawImage(cardImage, 0, 0, null);
    }

    @Override
    public Dimension getPreferredSize() {
        if (cardImage == null) {
            return new Dimension(100, 100);
        } else {
            return new Dimension(cardImage.getWidth(null), cardImage.getHeight(null));
        }
    }

    public static class View {
        public View() {}

        public void makeFrame() {
            final JFrame frame = new JFrame("Phase 10");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLayout(new BorderLayout());
            final JPanel handPanel = new JPanel();
            final CardDisplay cd = new CardDisplay();
            handPanel.setLayout(new FlowLayout());
            frame.add(handPanel, BorderLayout.SOUTH);
            handPanel.add(cd);
            frame.pack();
            frame.setResizable(false);
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        }
    }

    public static void main(final String[] args) {
        final View view = new View();
        view.makeFrame();
    }
}
2 голосов
/ 06 марта 2012

Для JComponents вы используете paintComponent вместо paint. Paint фактически используется для рисования компонентов, в то время как paintComponent используется для рисования изображений.

...