2013-10-11 2 views
1

Я пытаюсь получить изображения, которые появятся на JPanel, и ранее пытались использовать JLabels, но это не сработало. Теперь я пытаюсь использовать метод paintComponent. Мой код состоит в создании окна с фреймом и добавлении JPanel к фрейму. Затем в моем методе actionPerformed, вызванном с использованием переадресации вызовов таймера, я не получаю вывод из метода System.out.println. Как я могу заставить это работать?Как получить метод paintComponent для отображения на экране

public void createWindow(){ 

    frame.add(panel); 
    frame.addComponentListener(this); 
    frame.setVisible(true); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setLocationRelativeTo(null); 
    frame.pack(); 
    frame.setSize(xSize, ySize); 
    frame.setLocation(0, 0); 

    } 

@Override     
public void paintComponent(Graphics g) { 

    System.out.println("Method Called"); 
    super.paintComponent(g); 
    g.drawString("Code has painted", 10, 100); 

    } 
+2

'ранее пытались использовать JLabels, но это не сработало' - JLabel - это самый простой компонент в Swing. Нет причин, по которым вы не можете использовать ImageIcon с JLabel. Вы должны научиться делать это сначала, прежде чем выполнять обычную роспись. Не изобретайте велосипед! Фактически я показал вам, как это сделать 3 недели назад: http://stackoverflow.com/a/18927663/131872. Также в учебнике Swing есть много примеров. – camickr

+1

И, пожалуйста, делайте вызовы типа 'frame.setVisible (true)' в конце, как только все компоненты были добавлены в контейнер, и контейнер полностью понял его размер. –

+0

По этой причине я не делал JLabels, потому что это не позволяло мне изменять размер или перемещать любые метки –

ответ

2

Ваш код не показывает нам вопрос кроме того, что вы не добавляете this в JFrame. Для вызова метода paintComponent объект, содержащий этот метод, должен быть добавлен в GUI, он должен быть видимым. Ваш код не показывает это.

Другими словами, это изменить:

public void createWindow(){ 
    frame.add(panel); // what is panel? do you override *its* paintComponent? 
    frame.addComponentListener(this); 
    frame.setVisible(true); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setLocationRelativeTo(null); 
    frame.pack(); 
    frame.setSize(xSize, ySize); 
    frame.setLocation(0, 0); 
} 

к этому:

public void createWindow(){ 
    frame.add(this); // ****** Here you go **** 
    frame.addComponentListener(this); // Not sure what this is for 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setLocationRelativeTo(null); 
    frame.pack(); 
    frame.setVisible(true); 
    // frame.setSize(xSize, ySize); // *** avoid this guy 
    frame.setLocation(0, 0); 
} 

Также вам состояние:

Я пытаюсь получить фотографии, чтобы появиться на JPanel и ранее пытались использовать JLabels, но это не сработало

Но использование JLabel должно работать нормально и, как правило, это более простой способ сделать это, особенно если изображение не нужно изменять. Подумайте о том, чтобы показать нам эту попытку кода.

+0

componentlistener должен получить, когда окно изменяет размер –

+0

Спасибо, что я изменил первую строчку, и теперь она работает правильно. –

+0

@CurtisFloras: Я знаю, для чего нужен компонент ComponentListener. Мне просто интересно, почему у вашего графического интерфейса есть один. Обычно я позволяю моим менеджерам макетов делать все, что работает для меня. –

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