ImageIcon не се показва в JPanel

Просто се опитвам да заредя 9 еднакви .gif на doges. Това е всичко, което искам да направя. Моля помогнете!

Това е за проект на модифицирана версия на tic-tac-toe и по някаква причина не мога да накарам изображенията да се показват в моя прозорец. Помогне!

package jerryTacToe;
import javax.swing.*;

import java.awt.*; 
import java.awt.event.*;

import java.io.IOException;

class picture extends JPanel
{
  /**
 * 
 */
private static final long serialVersionUID = 1L;
ImageIcon doge;

  public picture() throws IOException
  {
    doge = new ImageIcon("dogeRotates.gif", null);
    JPanel panel = new JPanel();
    JLabel label = new JLabel("", doge, JLabel.CENTER);
    panel.add(label, BorderLayout.CENTER);
}



public void paintComponent(Graphics g) 
{
    ((Icon) g).paintIcon(this, g, 10, 10);
/*        Graphics2D g2 = (Graphics2D) g;
    Line2D line = new Line2D.Float(100, 100, 250, 260);
    g2.draw(line);*/
}

public void changeDoge(boolean human) throws IOException
{
    if(human)
        doge = new ImageIcon("./dogeIntensifies.gif", null);
    else
        doge = new ImageIcon("./ferociousDoge.gif", null);
}
}

class Closer extends WindowAdapter
{
  public void windowClosing(WindowEvent e)
  {
System.out.println("much derp");
System.exit(0);
  }
}

public class Gui extends JFrame
  implements ActionListener, MouseListener
 {
/**
 * 
 */
private static final long serialVersionUID = 1L;

boolean human;

  JButton goSecond;
  picture centerCenter; picture topLeft; picture topCenter; 
  picture topRight; picture centerLeft; picture centerRight; 
  picture bottomLeft; picture bottomCenter; picture bottomRight;

  public void mouseClicked(MouseEvent e){
  if(e.getSource()==topLeft || e.getSource()==topCenter      
  ||e.getSource()==topRight ||
            e.getSource()==centerLeft ||e.getSource()==centerCenter   
  ||e.getSource()==centerRight || 
            e.getSource()==bottomLeft ||e.getSource()==bottomCenter 
   ||e.getSource()==bottomRight)
  {
      /*
       * Call the AI here. 
       * 
       * 
       * hello?
       * yes, this is doge. 
       * */
  }
  }
 public void mouseEntered(MouseEvent e){}
  public void mouseExited(MouseEvent e){}
   public void mousePressed(MouseEvent e){}
    public void mouseReleased(MouseEvent e){}
     public void actionPerformed(ActionEvent e)
   {

  }

   public Gui() throws IOException
   {
addWindowListener( new Closer() );
setTitle("DOGE-TAC-TOE (very0.0.4)");
setVisible(true);
setSize(1600,900);

goSecond=new JButton("wow second");
topLeft=new picture();
topCenter=new picture();
topRight=new picture();
centerLeft=new picture();
centerCenter=new picture();
centerRight=new picture();
bottomLeft=new picture();
bottomCenter=new picture();
bottomRight=new picture();



centerCenter.addMouseListener(this);
topLeft.addMouseListener(this);
topCenter.addMouseListener(this);
topRight.addMouseListener(this);
centerLeft.addMouseListener(this);
centerRight.addMouseListener(this);
bottomRight.addMouseListener(this);
bottomCenter.addMouseListener(this);
bottomLeft.addMouseListener(this);
goSecond.addActionListener(this);

Container stuff=getContentPane();

stuff.setLayout( new BoxLayout(stuff, BoxLayout.PAGE_AXIS) );

JPanel panelTop=new JPanel();
panelTop.setLayout(new GridLayout(1, 3, 300, 100));
panelTop.add(topLeft);
panelTop.add(topCenter);
panelTop.add(topRight);

JPanel panelCenter=new JPanel();
panelCenter.setLayout(new GridLayout(1, 3, 150, 100));
panelCenter.add(centerLeft);
panelCenter.add(centerCenter);
panelCenter.add(centerRight);

JPanel panelBottom=new JPanel();
panelBottom.setLayout(new GridLayout(1, 3, 300, 100));
panelBottom.add(bottomLeft);
panelBottom.add(bottomCenter);
panelBottom.add(bottomRight);

stuff.add(goSecond);
stuff.add(panelTop);
stuff.add(panelCenter);
stuff.add(panelBottom);
  }

  public static void main(String [] args)throws IOException
  {
    JFrame it=new Gui();
   }

}

person Captain    schedule 30.04.2014    source източник
comment
Моля, в бъдеще публикувайте чист код. Бих помогнал, но прекарах 5 минути, просто опитвайки се да разбера къде е всичко, и се изгубих. Не мога да разбера кои променливи са локални и кои полеви; Не мога да разбера кога създавате нов клас и разстоянието е напълно произволно   -  person Dioxin    schedule 30.04.2014
comment
Къде се съхранява dogeRotates.gif? Дали е в проектите src или се намира в контекста на изпълнение на приложението във файловата система? Също така, защо просто не използвате JLabel...   -  person MadProgrammer    schedule 01.05.2014


Отговори (1)


Имате достъп до изображения по различни начини, както е показано по-долу:

doge = new ImageIcon("dogeRotates.gif", null);

doge = new ImageIcon("./dogeIntensifies.gif", null);

Моля, проверете отново разположението на изображението.

Ако имате проблем с достъпа до изображенията, вижте публикацията ми

Как да извлека изображение от папката на проекта?


Защо не използвате просто GridLayout в тази игра на tic-tac-toe?

Намерете примерни кодове по-долу

въведете описание на изображението тук

person Braj    schedule 30.04.2014