2015-05-01 2 views
0

Я пытаюсь добавить JLabel в свой основной метод с изображением цыпленка. Когда я добавляю метку в рамку, ничего не появляется. Мне также нужно, чтобы цыпленок помещался в рамку с координатами. Это мой код:Добавление JLabel в рамку для игрового персонажа

import java.awt.Graphics; 
import java.awt.Image; 
import java.awt.MediaTracker; 
import java.awt.Toolkit; 
import java.awt.Container; 

import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 


public class TEST extends JFrame { 
    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

TEST(){ 
    add(new ContentPanel()); 
    setSize(1440, 500); 
    } 

    public static void main(String[] args) { 
    TEST jrframe = new TEST(); 
    jrframe.setVisible(true); 
    JLabel chicken = new JLabel(" "); 
    ImageIcon chick = new ImageIcon("chicken.gif"); 
    chicken.setIcon(chick); 
    JPanel p1 = new JPanel(); 
    p1.add(chicken); 
    jrframe.add(p1); 
    p1.setLocation(0, 0); 
    } 
} 

class ContentPanel extends JPanel{ 
    Image bgimage = null; 

    ContentPanel() { 
    MediaTracker mt = new MediaTracker(this); 
    bgimage = Toolkit.getDefaultToolkit().getImage("level0.gif"); 
    mt.addImage(bgimage, 0); 
    try { 
     mt.waitForAll(); 
    } catch (InterruptedException e){ 
     e.printStackTrace(); 
    } 
    } 

    protected void paintComponent(Graphics g){ 
    super.paintComponent(g); 
    int imwidth = bgimage.getWidth(null); 
    int imheight = bgimage.getHeight(null); 
    g.drawImage(bgimage, 1, 1, null); 
    } 
} 
+0

Я бы рекомендовал создать ваш пользовательский интерфейс на [EDT] (https://docs.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html) и следовать [соглашениям об именах java] (http: // www.oracle.com/technetwork/java/codeconvtoc-136057.html) – copeg

ответ

1

Вы добавляете компоненты к уже видимой рамке. При этом вам нужно уведомить об этом LayoutManager, или еще лучше переместить вызов setVisible(true) после добавления компонентов.

+0

Когда я пытаюсь изменить jrframe.setVisible (true); после jrframe.add (p1) ;, он будет показывать только изображение на этой панели. –

+0

Это из-за LayoutManager - по умолчанию LayoutManager панели содержимого является BorderLayout, у которого не может быть двух Компонентов в его местоположении 'CENTER'. Для демонстрации в первой строке конструктора TEST измените макет, вызвав 'getContentPane(). SetLayout (new FlowLayout())' См. [Визуальное руководство для менеджеров макетов] (https://docs.oracle.com/javase /tutorial/uiswing/layout/visual.html) для получения дополнительной информации. – copeg

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