JButtons oder vielleicht ein Mouse Event

haggard

Grünschnabel
Hallo, ich bin es mal wieder.

Ich stehe nun kurz vor Beendigung meines Programms. Ich habe einen Viewer gebaut und in dem werden aus einer XML Datei Bilder wieder eingelesen. Diese Bilder haben natürlich Zusatzinformationen, welche ich gern über einen Mausklick oder sowas ähnliches anzeigen lassen möchte (PopUp Fenster oder sowas ähnliches).

Ich hatte zuerst Versucht die Bilder in JButtons zu verpacken, aber wie man auf dem Bild sehen kann, sind die Buttons irgendwie zu groß und ich weiß nicht warum.

viewer.jpg


Bisher war es so realisiert das alles mit JPanels gemacht wurde.

Ein andere Möglichkeit wäre vielleicht irgendetwas mit MouseClickedEvents, oder sowas ähnlichem zu machen, aber davon hab ich leider gar keine Ahnung.

Ich denke mal das hier ist die betreffende Stelle die noch Falsch ist. Ich weiß aber leider auch nicht wie es anders geht.

Code:
JButton [][] kachel = new JButton[5][5]; // Kachel array zum effektieven arbeiten


//Erstmaliges f¸llen des zeichnen Panels mit dem speicher
  private void firstpaint() {
    for (int i = 0; i < 5; i++) {
      for (int j = 0; j < 5; j++) {
        kachel[i][j] = new JButton();
        (kachel[i][j]).setIcon( (ImageIcon) speicher[i][j]);
        zeichnen.add(kachel[i][j]);

      }
    }
  }

Hier ist auch der Versuch des MouseEvents. Das hat leider auch noch nicht wirklich funktioniert.

Code:
for (int x = 0; x < 5; x++) {
	  for (int y = 0; y < 5; y++) {
		kachel[x][y].setToolTipText("Bildkachel an der Stelle "+ (x+1)+(y+1));
		kachel[x][y].addMouseListener(new MouseAdapter() {
			
			public void mousePressed(MouseEvent e) {
				
				System.out.println("Kachel:"+ e.getSource().toString());
				
			}
		});
	  }
	}
	
	//System.out.println(root.getChild("kachel").getText());
  }

Falls mehr Informationen gewünscht werden, stelle ich auch gern noch einmal den ganzen Quellcode zur Verfügung, damit man einen besseren Überblick bekommt.

Danke schon einmal im Voraus
Der Haggard
 
Original geschrieben von haggard
Hallo, ich bin es mal wieder.

Hier ist auch der Versuch des MouseEvents. Das hat leider auch noch nicht wirklich funktioniert.

Code:
for (int x = 0; x < 5; x++) {
	  for (int y = 0; y < 5; y++) {
		kachel[x][y].setToolTipText("Bildkachel an der Stelle "+ (x+1)+(y+1));
		kachel[x][y].addMouseListener(new MouseAdapter() {
			
			public void mousePressed(MouseEvent e) {
				
				System.out.println("Kachel:"+ e.getSource().toString());
				
			}
		});
	  }
	}
	
	//System.out.println(root.getChild("kachel").getText());
  }


Danke schon einmal im Voraus
Der Haggard

mousePressed(...) eignet sich nicht so recht. Ich habe auch noch keine Systematik erkennen können, wann mouseClicked(...) und wann mouseReleased(...) zu nehmen ist, aber probier mal mit diesen beiden Methoden. Die benutzen wir in den Projekten immer und sie funktionieren auch. Mal die eine, mal die andere Methode. ;-)
 
Original geschrieben von haggard
Hallo, ich bin es mal wieder.

Code:
JButton [][] kachel = new JButton[5][5]; // Kachel array zum effektieven arbeiten

SNIP

for (int x = 0; x < 5; x++) {
	  for (int y = 0; y < 5; y++) {
		kachel[x][y].setToolTipText("Bildkachel an der Stelle "+ (x+1)+(y+1));
		kachel[x][y].addMouseListener(new MouseAdapter() {
			
			public void mousePressed(MouseEvent e) {
				
				System.out.println("Kachel:"+ e.getSource().toString());
				
			}
		});
	  }
	}
	
	//System.out.println(root.getChild("kachel").getText());
  }

Der Haggard

Jetzt habe ich es erst mal gesehen. Du legst ein MouseEvent auf die Buttons. Das ist unschön und wenig gebräuchlich. Üblicherweise werden Buttons ActionEvents zugewiesen und auf actionPerformed(...) reagiert. Tausche also die MouseListener aus gegen ActionListener usw., dann klappts auch mit dem Nachbarn. ;-)
 
Danke, für die Tips. Die werde ich heute abend mal ausprobieren. Wie sieht es denn mit der größe der Buttons aus? Lässt sich da noch irgendwas machen? So wie es auf dem Bild aussieht kann es jedenfalls nicht bleiben.
 
Original geschrieben von haggard
Danke, für die Tips. Die werde ich heute abend mal ausprobieren. Wie sieht es denn mit der größe der Buttons aus? Lässt sich da noch irgendwas machen? So wie es auf dem Bild aussieht kann es jedenfalls nicht bleiben.

Jede Componente (also auch ein Button) hat eine PreferredSize, die man setzen kann - man sollte im gleichen Atemzug auch die MinimumSize setzen.
Möglicherweise hast Du aber auch ein falsches Layout genommen bzw. ein Layout falsch benutzt für das JPanel.
Oder Deine Icons für die Buttons sind zu groß...
 
Entschuldige das ich nochmal so dumm Fragen muss. Aber wo stellt man die Preferred Size ein?

Ich habe nochmal an meinem Arbeitsrechner ein Bildschirmfoto geknippst. Hier kannst du die Version sehen, die ich nur mit JLabels gemacht habe. Und so sollte dann das ganze dann eben auch mit den Buttons aussehen.

viewer1.jpg



Danke nochmals
 
>Entschuldige das ich nochmal so dumm Fragen muss. Aber wo stellt man die Preferred Size ein?

myButton.setPreferredSize(...);
myButton.setMinimumSize(...);

>Ich habe nochmal an meinem Arbeitsrechner ein Bildschirmfoto geknippst. Hier kannst du die Version sehen, die ich nur mit JLabels gemacht habe. Und so sollte dann das ganze dann eben auch mit den Buttons aussehen.
http://www2.hs-harz.de/~u15045/viewer1.jpg
>Danke nochmals

Dann ersetz doch einfach die JLabel durch JButton, oder wo liegt das Problem?
BTW das Mac OS X sieht interessant aus... wenn nen Mac bloss net so teuer wäre...
 
Das mit dem ersetzen hatte ich auch probiert. Da kam dann das erste Bild bei raus. Ich werd das mal so alles ausprobieren. Ich hoffe ich bekomme die Laufvariablen i und j irgendwie in den event. Das ist nämlich auch noch so ein Problem.

Haggard
 
Original geschrieben von haggard
Das mit dem ersetzen hatte ich auch probiert. Da kam dann das erste Bild bei raus. Ich werd das mal so alles ausprobieren. Ich hoffe ich bekomme die Laufvariablen i und j irgendwie in den event. Das ist nämlich auch noch so ein Problem.
Haggard

1) Button als Holder für Bilder/Grafiken sind in der Tat wenig geeignet. Vielleicht legst Du doch eher ein MouseEvent auf das gesamte Panel und greifst Dir bei mouseClicked oder mouseReleased die clickedComponent

2) Wieso sollen die Laufvariablen i und j in das (Action-?)Event?
 
Die Variablen i und j sollten mit in den Event rein damit ich eindeutig zuordnen kann aus welcher Kachel der event kommt. Sonst kann ich ja die Infokomponente nicht richtig zuordnen.

Ich hab dir eben mal ne Private Nachricht geschickt. Da steht es noch einmal genauer Erläutert drin.

grüße
Haggard
 

Neue Beiträge

Zurück