Как добавить изображение в апплет (Java) после нажатия кнопки? - PullRequest
0 голосов
/ 06 сентября 2010

Я нашел странный способ поместить картинку в апплет просто сам по себе, но, кажется, он не работает, когда я помещаю код в buttonListener, чтобы картинка отображалась при нажатии кнопки. Если бы вы могли также дать мне самый простой код для размещения изображения в апплете, это было бы очень ценно!

код, который работает: импорт java.awt. ; импорт java.applet. ; импорт 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);

    }

}

но когда это программа, я добавил ее, а кнопка не дает работать:

import java.awt. ; импорт java.applet. ; import java.awt.event. ; импорт 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();
        }
     }

 }



}

1 Ответ

0 голосов
/ 06 сентября 2010

Не уверен в этом, но вы можете попробовать следующее:

  1. Вам следует позвонить setBounds() на ваших drawing_panel

  2. изображенияхзагрузить асинхронно;Вы можете использовать ImageObserver, чтобы узнать, когда он загрузился, затем repaint.Вы можете переопределить свой метод DrawingPanel.imageUpdate().

  3. обновляется ли дерево?после добавления компонента вам может потребоваться позвонить getContentPane().invalidate().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...