setIcon aus ActionListener - Verständnisproblem

quidnovi

Erfahrenes Mitglied
Hi @ all :)

Oiso...

ich versuche über einen ActioListener, eine Methode in einer anderen Klasse aufzurufen, was ja auch funktioniert.
Nun sollte die aufgerufene Methode ein Icon nach einer if-else ausgeben, was leider nicht funktioniert.

Hier der Codeausschnitt der aufrufenden Klasse SelDrehen2.java:
Java:
btn13_r = new DesignButtonOTarget("Typ 13 rechts", 14, "Typ 13 rechts w\u00E4hlen");
btn13_r.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if(e.getSource() == btn13_r){
					anlNr = "13_r";
					datensatzAendern("13_r");
					MlbMlhLwDlh m = new MlbMlhLwDlh(null);
					m.showAnlNr();
					parent.showCard("MlbMlhLwDlh");
				}
			}
		});

Und der Codeausschnitt der aufgerufenen Klasse MlbMlhLwDlh.java:
Java:
// Die Methode, welche in SelDrehen2.java aufgerufen wird
	public void showAnlNr() {
		try {

			DBConnect.connect();
			Statement stmt = DBData.connection.createStatement();

			String sqlMaxId = "SELECT ANLTYP FROM KOMMART WHERE KOMMID = " + KommAdd.maxId;
			ResultSet rs = stmt.executeQuery(sqlMaxId);

			while (rs.next()) {				
				imgNr = (rs.getString("ANLTYP"));
				
				// Das wird auf der Konsole ausgegeben
				System.out.println("showAnlNr initialisiert");
				
				if (imgNr.equals("10_l") || 
						imgNr.equals("11_rd")||
						imgNr.equals("12_l") ||  
						imgNr.equals("13_r") || 
						imgNr.equals("19_d") || 
						imgNr.equals("21_d")) {
					
					// Das wird auf der Konsole ausgegeben
					System.out.println("die if in showAnlNr liefert: " + imgNr);
					
					// Die auszugebenden Bilder erscheinen nicht 
					lblMlbImage.setIcon(new ImageIcon(MlbMlhLwDlh.class.getResource("/at/img/masseingabe/1ol_1stRe_mlb.jpg")));
					lblMlhImage.setIcon(new ImageIcon(MlbMlhLwDlh.class.getResource("/at/img/masseingabe/1ol_1stRe_mlh.jpg")));
					lblLwImage.setIcon(new ImageIcon(MlbMlhLwDlh.class.getResource("/at/img/masseingabe/1ol_1stRe_lw.jpg")));
					lblDlhImage.setIcon(new ImageIcon(MlbMlhLwDlh.class.getResource("/at/img/masseingabe/1ol_1stRe_dlh.jpg")));
				} 
				else if (imgNr.equals("14_bb_l") || 
						imgNr.equals("14_bb_r")|| 
						imgNr.equals("15_bb_l") || 
						imgNr.equals("15_bb_r") || 
						imgNr.equals("16_bb_l") || 
						imgNr.equals("17_bb_r")) {	
					
					// Das wird auf der Konsole ausgegeben
					System.out.println("die else in showAnlNr liefert: " + imgNr);

					// Die auszugebenden Bilder erscheinen nicht 
					lblMlbImage.setIcon(new ImageIcon(MlbMlhLwDlh.class.getResource("/at/img/masseingabe/1ol_2st_bb_mlb.jpg")));
					lblMlhImage.setIcon(new ImageIcon(MlbMlhLwDlh.class.getResource("/at//img/masseingabe/1ol_2st_bb_mlh.jpg")));
					lblLwImage.setIcon(new ImageIcon(MlbMlhLwDlh.class.getResource("/at//img/masseingabe/1ol_2st_bb_lw.jpg")));
					lblDlhImage.setIcon(new ImageIcon(MlbMlhLwDlh.class.getResource("/at/img/masseingabe/1ol_2st_bb_dlh.jpg")));
				}
				
				
			}

Die GUI ist'n CardLayout mit einem Grouplayout.
Die zugehörigen JLabels werden in weiteren Methoden der Klasse MlbMlhLwDlh.java erzeugt und im Konstruktor aufgerufen.
Alle dieser JLabels werden auf dieser Card immer benötigt, nur die Icons ändern sich.

Zur Vervollständigung die Methode mlb (mlh, lw und dlh werden natürlich auch so erzeugt) in der Klasse MlbMlhLwDlh:
Java:
private void mlb(){
		pnlMlb = new JPanel();
		pnlMlb.setToolTipText("");
		pnlMlb.setOpaque(false);
		pnlMlb.setBorder(new LineBorder(new Color(63, 163, 221)));
		
		lblMlb = new JLabel("Mauerlichte Breite:");
		lblMlb.setForeground(Color.WHITE);
		lblMlb.setFont(new Font("Century Gothic", Font.PLAIN, 13));				
		
		txtMlb = new JTextField();
		txtMlb.setOpaque(false);
		txtMlb.setForeground(Color.WHITE);
		txtMlb.setFont(new Font("Century Gothic", Font.BOLD, 13));
		txtMlb.setCaretColor(Color.WHITE);
		txtMlb.setBorder(new MatteBorder(0, 0, 1, 0, (Color) new Color(63,163,221)));		
		txtMlb.setColumns(5);
		
		lblMlbImage = new JLabel("");
		lblMlbImage.setHorizontalAlignment(SwingConstants.CENTER);
	}

Tja...ich hoffe, dass ich alle notwendigen Infos dargetan habe.
Da ich das Ganze offenbar nicht mal nicht begreife, bitte ich Euch um eure Hilfe...vielen Dank im Voraus :)

quidnovi
 
Hi,

ohne jetzt alles zu lesen, im ersten Abschnitt, Zeile 4:

Java:
if(e.getSource() == btn13_r){

Objekt-Vergleiche macht man immer mit .equals(). Versuchs mal so:
Java:
if(e.getSource().equals(btn13_r)) {

// oder ab Java 1.7:
if(Objects.equals(e.getSource(), btn13_r)) {

Ansonsten: Was sollte auf der Konsole ausgegeben werden / was wird ausgegeben? Mit dem Debugger schon angesetzt und schrittweise nachvollzogen was passiert?

Grüße,
BK
 
Zuletzt bearbeitet:
Hi Bratkartoffel (geiler Name :D),

erstmal Danke für Deine Antwort. Und Danke auch für den Hinweis mit dem equals...verwende ich auch grundsätzlich, nur hat sich in diesem Codeabschnitt ein Fehler eingeschlichen.

Nun...die Ausgabe auf der Konsole ist zur Überprüfung.
Was ich nicht zusammenbekommen habe ist, dass immer die benötigten Images ersichtlich sind.

Das habe ich jetzt allerdings anders gelöst.
Da das ganze Programm Datenbankgestützt ist, lasse ich die Images über eine Sql-Abfrage ausgeben.

Allerdings habe ich das ursprüngliche Problem dadurch nicht gelöst, sondern nur einen anderen Weg gefunden.
Weil das Programm, welches hier entsteht, auch mal fertig werden muss, kann ich mich jetzt leider um diesen Problemfall nicht kümmern.
Das mache ich dann, wenn die Zeit dafür da ist.

Also, vielen Dank nochmal für Dein Bemühen :)
Quidnovi
 
Zurück