Hi ich bin Umsteiger von .NET und noch sehr unerfahren in Java.
Ich möchte ein kleines Memory Spiel programmieren und müsste dazu Bilder auf einem Panel anzeigen lassen.
Dazu habe ich eine JFrame GUI, ein Interface als Listener und eine Klasse als JComponent die ihr Bild zeichnen soll.
Das Problem was dabei auftritt ist, dass nur die zuletzt hinzugefügte JComponente angezeigt wird.
Dabei will ich natürlich alle angezeigt bekommen.
Ich möchte ein kleines Memory Spiel programmieren und müsste dazu Bilder auf einem Panel anzeigen lassen.
Dazu habe ich eine JFrame GUI, ein Interface als Listener und eine Klasse als JComponent die ihr Bild zeichnen soll.
Das Problem was dabei auftritt ist, dass nur die zuletzt hinzugefügte JComponente angezeigt wird.
Dabei will ich natürlich alle angezeigt bekommen.
Java:
public class MemoryGUI extends JFrame implements GUIListener{
private static final long serialVersionUID = 1L;
//attributes
private MemoryGame memoryGame;
private java.util.List<ViewComponent> componentList = new ArrayList<ViewComponent>();
private JPanel cardPanel = new JPanel(new BorderLayout());
//constructors
public MemoryGUI()
{
initComponents();
memoryGame = new MemoryGame(8);
createCardComponents();
}
//methods
private void initComponents()
{
this.setSize(300,300);
this.setResizable(false);
this.setLocation(GUItools.getCenteredPoint(this.getSize().height, this.getSize().width));
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
cardPanel.setLocation(0,0);
//cardPanel.setLayout(new BoxLayout(cardPanel, BoxLayout.PAGE_AXIS));
cardPanel.setSize(this.getSize());
this.add(cardPanel);
}
private void createCardComponents()
{
/*int posX = 0;
int posY = 0;
int space = 5;
for(int i = 0; i < memoryGame.getCardList().size(); i++)
{
ViewComponent viewComponent = new ViewComponent();
viewComponent.setID(i);
File file = new File( ImageSet.ImagePathStr() + ImageSet.cardBackImageStr() + ImageSet.fileFormat());
viewComponent.setImage( file );
viewComponent.setPosX(posX * (64 + space));
viewComponent.setPosY(posY * (64 + space));
if(posX >= memoryGame.getRowXMaxCount()) { posX = 0; posY++; }
else { posX++; }
viewComponent.setGUIListener(this);
componentList.add(viewComponent);
cardPanel.add( viewComponent );
}
this.setSize(memoryGame.getRowXMaxCount() * (64 + space) *2, posY * (64 + space) *2);*/
ViewComponent viewComponent = new ViewComponent();
ViewComponent viewComponent2 = new ViewComponent();
File file2 = new File( ImageSet.ImagePathStr() + ImageSet.cardBackImageStr() + ImageSet.fileFormat());
File file = new File( ImageSet.ImagePathStr() + ImageSet.cardBackImageStr() + ImageSet.fileFormat());
viewComponent.setImage( file );
viewComponent2.setImage( file2 );
viewComponent.setPosX(0 * (64));
viewComponent.setPosY(0 * (64));
viewComponent2.setPosX(1 * (64));
viewComponent2.setPosY(1 * (64));
cardPanel.add( viewComponent2 );
cardPanel.add( viewComponent );
}
@Override
public void MouseClicked(ViewComponent sender) {
Card card = memoryGame.getCardList().get(sender.getID());
memoryGame.cardChosen(this, card);
}
@Override
public void CardFlipped(Card card) {
File file;
if(card.isFaceUp())
{
file = new File( ImageSet.ImagePathStr() + ImageSet.cardFrontImageStr() + card.getPictureID() + ImageSet.fileFormat());
}
else
{
file = new File( ImageSet.ImagePathStr() + ImageSet.cardBackImageStr() + ImageSet.fileFormat());
}
componentList.get(card.getID()).setImage(file);
}
}
Java:
class ViewComponent extends JComponent implements MouseListener
{
private Image image;
private GUIListener guiListener;
private int id;
private int posX;
private int posY;
public ViewComponent()
{
super();
this.addMouseListener(this);
}
public Image getImage()
{
return image;
}
public void setImage( File file )
{
image = Toolkit.getDefaultToolkit().getImage( file.getAbsolutePath() );
if ( image != null )
{
repaint();
}
}
public int getID()
{
return id;
}
public void setID(int id)
{
this.id = id;
}
public void setGUIListener(Object gui)
{
guiListener = (GUIListener) gui;
}
public void setPosX(int x)
{
posX = x;
}
public void setPosY(int y)
{
posY = y;
}
@Override
protected void paintComponent( Graphics g )
{
if ( image != null )
g.drawImage( image, posX, posY, this );
}
@Override
public void mouseClicked(MouseEvent arg0) {
guiListener.MouseClicked(this);
}
@Override
public void mouseEntered(MouseEvent arg0) {
}
@Override
public void mouseExited(MouseEvent arg0) {
}
@Override
public void mousePressed(MouseEvent arg0) {
}
@Override
public void mouseReleased(MouseEvent arg0) {
}
}
Java:
public interface GUIListener {
public void MouseClicked(ViewComponent sender);
public void CardFlipped(Card card);
}