2010-09-06 177 views
0

我发现了一个奇怪的方式,把一张图片放在一个小程序中,但它似乎不起作用,当我将代码放到buttonListener中时,按钮被按下时,图片显示出来。如果你也可以给我最简单的代码来将图片放入applet,那将非常感谢!如何在按下按钮后在applet(java)中添加图片?

工作的代码: import java.awt。 ; import java.applet。; import javax.swing。*;

公共类gamedone延伸JApplet的{

public void init() { 

    Container cp = getContentPane(); 
    cp.setBackground(Color.black); 

    Container content_pane = getContentPane(); 

    Image img = getImage(getCodeBase(), "portal-cake.jpg"); 

    DrawingPanel drawing_panel = new DrawingPanel(img); 

    // Add the DrawingPanel to the content pane. 
    content_pane.add(drawing_panel); 
    } // init 

} 类DrawingPanel扩展JPanel { 图像IMG;

DrawingPanel (Image img) 
    { this.img = img; } 

    public void paintComponent(Graphics g) { 
    super.paintComponent(g); 

    g.drawImage(img, 0, 0, this); 

    } 

} 

,但是当这是我加入到程序,并且按钮不会使其工作:

进口java.awt中。 ; import java.applet。; import java.awt.event。 ; import javax.swing。;

公共类TypeInNames扩展JApplet的{

JButton StartButton; 
JTextField name1, name2; 
String player1, player2; 
String reply; 


Container cp = getContentPane(); 

public void init() 
{ 

    setSize(350, 400); 
    setLayout(null); 

    cp.setBackground(Color.black); 

    StartButton = new JButton("Start Game!"); 
    name1 = new JTextField("Player 1",35); 
    name2 = new JTextField("Player 2",35); 
    //(x, y, width, height); 
    StartButton.setBounds(115,200,120,30); 
    name1.setBounds(115,140,120,20); 
    name2.setBounds(115,170,120,20); 


    startGame(); 
} 

public void startGame() 
{ 
    add(StartButton); 
    add(name1); 
    add(name2); 


    StartButton.addActionListener(new ButtonListener()); 
} 

public void game() 
{ 

} 

public void endGame() 
{ 

    Container cp = getContentPane(); 
    cp.setBackground(Color.black); 

    Container content_pane = getContentPane(); 

    Image img = getImage(getCodeBase(), "portal-cake.jpg"); 

    DrawingPanel drawing_panel = new DrawingPanel(img); 

    // Add the DrawingPanel to the content pane. 
    content_pane.add(drawing_panel); 
} 

private class ButtonListener implements ActionListener{ 

    public void actionPerformed(ActionEvent event) 
    { 
     if (event.getSource() == StartButton) 
     { 
      player1 = name1.getText(); 
      player2 = name2.getText(); 
      remove(StartButton); 
      remove(name1); 
      remove(name2); 

      endGame(); 
      repaint(); 
     } 
    } 

} 



} 
+0

你为什么不发布你到目前为止? – Joel 2010-09-06 14:54:01

回答

0

不知道这个,但你可以尝试以下方法:

  1. 你应该在你的drawing_panel

  2. 图像加载调用setBounds()异步;您可能需要使用ImageObserver来了解它何时加载,然后repaint。你可以覆盖你的DrawingPanel.imageUpdate()方法。

  3. 树正在更新?添加组件后,您可能需要拨打getContentPane().invalidate()

相关问题