Hallo,
ich bin swing-Anfänger und verzweifele an diesem MouseListener. Jedesmal wenn ich das Programm starte, macht der was anderes.
Ich hab ein GridLayout mit nem Panel drin, das 89 Labels mit Bildern enthält,´.
Was ich erreichen will, ist, dass man auf ein Bild klickt, es dann durch ein anderes ausgetauscht wird.
Das funktioniert prinzipiell, in meinem Fall aber immer nur bei ca. der Hälfte der Bilder. Die anderen verändern sich nicht und es sind auch jedesmal andere, bei denen es funktioniert.
Was mache ich falsch?
ich bin swing-Anfänger und verzweifele an diesem MouseListener. Jedesmal wenn ich das Programm starte, macht der was anderes.
Ich hab ein GridLayout mit nem Panel drin, das 89 Labels mit Bildern enthält,´.
Was ich erreichen will, ist, dass man auf ein Bild klickt, es dann durch ein anderes ausgetauscht wird.
Das funktioniert prinzipiell, in meinem Fall aber immer nur bei ca. der Hälfte der Bilder. Die anderen verändern sich nicht und es sind auch jedesmal andere, bei denen es funktioniert.
Was mache ich falsch?
Java:
package GoGame;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.List;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.ImageObserver;
import java.util.ArrayList;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
public class Gui {
private String text;//Aus dem Konstrukter raus, damit von überall drauf zugreifbar.
private JTextField text1;
private JFrame frame;
private JPanel Gesamt;
private JPanel panel;
private ArrayList<JLabel> Rasterfelder;
private JLabel tmpLabel;
private ImageIcon icon1;
Gui(){
frame = new JFrame( "Go" );
frame.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );
frame.setVisible( true );
frame.setSize( 800, 400 );
Gesamt=new JPanel();
Gesamt.setLayout(new BorderLayout());
text1=new JTextField();
text="abc";
text1.setText(text);
Gesamt.add(BorderLayout.NORTH, new JLabel("<---Oben--\n--------------"));
Gesamt.add(BorderLayout.SOUTH, new JLabel("<---Unten--\n--------------"));
Gesamt.add(BorderLayout.CENTER, text1);
Gesamt.add(BorderLayout.EAST, new JLabel("<---Rechts--\n--------------"));
panel = new JPanel();
//panel.setPreferredSize(new Dimension(360,360));
Gesamt.add(BorderLayout.WEST, panel);
//frame.getContentPane().add( panel );
frame.getContentPane().add( Gesamt );
panel.setLayout( new GridLayout( 9, 9));
icon1=new ImageIcon("D:/Temp/gridiconsm.jpg");
Rasterfelder=new ArrayList<JLabel>();
for(int i=0;i<=89;i++){
//tmpLabel=new JLabel(new ImageIcon("D:/Temp/gridiconsm.jpg"));
icon1.setDescription("clear");
tmpLabel=new JLabel(icon1);
tmpLabel.setName(String.valueOf(i));
tmpLabel.addMouseListener(new MouseListener()
{
@Override
public void mouseClicked(MouseEvent arg0) {
//<--Es soll vom im Label enthaltenen MausListener der Name
//des enthaltenden Labels ausgegeben werden. (MausListener.super wäre EventListener->geht nicht)
//Deshalb wird die Liste aller Labels durchsucht und geprüft, ob
//der MausListener eines Labels Diesem Objekt entspricht.
//Ist dies der Fall kennt man das zugehörige Label (for-Index).
for(int i=0;i<Rasterfelder.size();i++)
{ if(Rasterfelder.get(i).getMouseListeners()[0]==this) //[0], da es offenbar nicht DEN MausListener gibt, sondern mehrere
{ text="Feld: "+Rasterfelder.get(i).getName()+" mouseClicked";
if( ((ImageIcon)Rasterfelder.get(i).getIcon()).getDescription()=="clear")
{ ((ImageIcon)Rasterfelder.get(i).getIcon()).setDescription("black");
Rasterfelder.get(i).setIcon(new ImageIcon("D:/Temp/gridiconsmblack.jpg"));
}
if( ((ImageIcon)Rasterfelder.get(i).getIcon()).getDescription()=="black")
{ ((ImageIcon)Rasterfelder.get(i).getIcon()).setDescription("clear");
Rasterfelder.get(i).setIcon(new ImageIcon("D:/Temp/gridiconsm.jpg"));
}
}
}
//------------------------------------->
text1.setText(text); //JTextfield bekommt String
}
@Override
public void mouseEntered(MouseEvent arg0) {
for(int i=0;i<Rasterfelder.size();i++) //
if(Rasterfelder.get(i).getMouseListeners()[0]==this)
{ text="Feld: "+Rasterfelder.get(i).getName()+" mouseEntered";
/*if( ((ImageIcon)Rasterfelder.get(i).getIcon()).getDescription()=="clear")
{ ((ImageIcon)Rasterfelder.get(i).getIcon()).setDescription("rotate");
Rasterfelder.get(i).setIcon(new ImageIcon("D:/Temp/gridiconsmblack.jpg"));
//((ImageIcon)Rasterfelder.get(i).getIcon()).setImage("D:/Temp/gridiconsmrot.gif");
//((ImageIcon)Rasterfelder.get(i).getIcon()).setDescription("rotate");
}*/
}
text1.setText(text);
}
@Override
public void mouseExited(MouseEvent arg0) {
for(int i=0;i<Rasterfelder.size();i++)
{ if(Rasterfelder.get(i).getMouseListeners()[0]==this)
{ text=((ImageIcon)Rasterfelder.get(i).getIcon()).getDescription();
//text="Feld: "+Rasterfelder.get(i).getName()+" mouseExited";
/*if( ((ImageIcon)Rasterfelder.get(i).getIcon()).getDescription()=="rotate")
{ ((ImageIcon)Rasterfelder.get(i).getIcon()).setDescription("clear");
Rasterfelder.get(i).setIcon(new ImageIcon("D:/Temp/gridiconsm.jpg"));}*/
}
}
text1.setText(text);
}
@Override
public void mousePressed(MouseEvent arg0) {
for(int i=0;i<Rasterfelder.size();i++)
if(Rasterfelder.get(i).getMouseListeners()[0]==this)
text="Feld: "+Rasterfelder.get(i).getName()+" mousePressed";
text1.setText(text);
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
});
Rasterfelder.add(tmpLabel); //gerade erstelltes Label (Ref.Var) in Liste
panel.add(tmpLabel); //das SELBE auch ins Panel
}
frame.setVisible( true );
}
public static void main(String[] args) { Gui g=new Gui();}
}
//quelle [url=http://www.java2s.com/Code/Java/Swing-JFC/AddJListtoScrollpane.htm]Add JList to Scroll pane : ListSwing JFCJava[/url]
Zuletzt bearbeitet von einem Moderator: