Swing ImageIcon hover

A

ack3799

Gast
Ich würde gerne wenn man mit der Maus über ein ImageIcon fährt eine kleine Hover-Box mit einer kurzen Beschreibung öffnen lassen. Da die Icons nicht quadratisch sind (transparente Bereiche) sollte die Hoverbox nur beim direkten über dem Icon sein erscheinen. Kann ich irgendwie die Form eines Jbuttons so verändern, dass das funktioniert, oder wie macht man das am Besten?
 
A

ack3799

Gast
Ja. Gibt es da auch die Möglichkeiten nur bei nicht-transparenten Flächen eines Bildes den tooltip anzuzeigen?
 
G

Gast2

Gast
Meines erachtens: nope

JButtons sind immer Rechteckig. Du kannst zwar alles sichtbare ausblenden aber programmatisch ist er immernoch rechteckig.

Der Tooltio ist mit dem Button oder dem ImageIcon verknüpft. Da dieses auch immer Rechteckig ist wüsste ich nicht wie.

Solltest du das herausfinden interessierts mich aber auch.
 
A

ack3799

Gast
Java:
		for(int xValue=0;xValue<image.getWidth();xValue++){
			for (int yValue=0; yValue < image.getHeight(); yValue++) {
			    int rgb = image.getRGB(xValue, yValue);	
			    int alpha = ((rgb >> 24) & 0xff); 		

			    if (alpha != 0) {
			    	makeButton();
			    }

			}
		}

Werden dann aber ganz schön viele Buttons.... Sehr sehr unschöne Lösung.

(Evtl. Non-Transparent Pixel in Rechtecke groupen, dann immerhin etwas besser. Wie mache ich sowas am besten?)
 

bERt0r

Top Contributor
Jop, über so etwas habe ich auch schon nachgedacht. Läuft nur letzten Endes auch auf Pixel für Pixel durchgeste hinaus :/
Dann hast du da was grundlegend falsch verstanden. Die Funktion wird automatisch aufgerufen, wenn der Mauszeiger eine gewisse zeit still über deinem Komponenten stehen bleibt. Die Funktion bekommt ein MouseEvent übergeben, in dem steht die Position des Zeigers (EIN x und y Wert) und von diesem einen Punkt kannst du dann z.B die Pixeldaten überprüfen.
 
A

ack3799

Gast
Dann hast du da was grundlegend falsch verstanden. Die Funktion wird automatisch aufgerufen, wenn der Mauszeiger eine gewisse zeit still über deinem Komponenten stehen bleibt. Die Funktion bekommt ein MouseEvent übergeben, in dem steht die Position des Zeigers (EIN x und y Wert) und von diesem einen Punkt kannst du dann z.B die Pixeldaten überprüfen.

Genau. Da der Hintergrund und Vordergrund des Icons übereinander gelegt werden (nur der Vordergrund soll tooltipped werden), müssen die Pixel bereits beim Erstellen des Icons geprüft und in ein Array (o.ä.) geschrieben werden. Oder jedesmal die Vordergrundsgrafik neu Eingelesen werden, was warscheinlich noch weniger performant ist.
 

Michael...

Top Contributor
Ist dieses Thema Hintergrund für den anderen Thread mit dem Array bzw. ArrayList?

Zu diesem Thema:
Grundsätzlich kannst Du Dir das Bild im Vordergrund doch merken und in der getToolTip auswerten.

Hier mal ein Beispiel. Ich erstelle hier ein BufferedImage als Maske, um beliebige Objekte vom Typ Image verwenden zu können. Wenn man ausschließlich mit BufferedImages arbeitet, kann man sich das sparen. Wenn man mag, kann man auch ein Hintergrundbild hinterlegen, der Konstruktor und die Klasse sieht das vor.
In der getToolTip des ImageHoverPanel wird diese Maske ausgewertet und dem entsprechend der ToolTip angepasst.

Java:
import java.awt.AlphaComposite;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.Stroke;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;

import javax.swing.JComponent;
import javax.swing.JFrame;
public class ImageToolTipDemo extends JFrame {
	
	class ImageHoverPanel extends JComponent {
		private Image image, bgImg;
		BufferedImage mask;
		private int imgX, imgY;
		
		public ImageHoverPanel(Image hoverImg, Image bgImg) {
			this.image = hoverImg;
			this.bgImg = bgImg;
			this.createAlphaMask();
			this.setPreferredSize(new Dimension(imgX + hoverImg.getWidth(null), imgY + hoverImg.getHeight(null)));
			this.setToolTipText("");
		}
		
		public void paintComponent(Graphics g) {
			super.paintComponent(g);
			if (bgImg!=null)
				g.drawImage(bgImg, imgX, imgY, null);
			g.drawImage(image, imgX, imgY, null);
		}
		
		public String getToolTipText(MouseEvent evt) {
			int x = evt.getX()- imgX;
			int y = evt.getY() -imgY;
			if (x>=0 && x<mask.getWidth() && y>=0 && y<mask.getHeight()) {
				if (mask.getRGB(x, y)==0)
					return "Transparent Area. Here the tootip can be set to null!";
				else
					return "Image Area";
			}
			return null;
		}
		
		private void createAlphaMask() {
			int w = image.getWidth(null);
			int h = image.getHeight(null);
			mask = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
			Graphics2D g = (Graphics2D)mask.getGraphics();
			g.drawImage(image, 0, 0, null);
			g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP));
			g.setColor(Color.BLACK);
			g.fillRect(0, 0, w, h);
			g.dispose();
		}
	}
	
	public ImageToolTipDemo() {
		add(new ImageHoverPanel(createAlphaImage(200, 200), null));
	}
	
	private BufferedImage createAlphaImage(int w, int h) {
		BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
		Graphics2D g2 = image.createGraphics();
		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
		g2.setColor(Color.RED);
		g2.fillOval(10, 10, w-50, h-50);
		g2.setColor(Color.BLUE);
		g2.fillRect(15, 5, 20, h-10);
		Stroke stroke = new BasicStroke(5);
		g2.setStroke(stroke);
		g2.setColor(Color.GREEN);
		g2.drawPolygon(new int[] {5, w/2-5, w-10, w/2+15, w-2, w/2+15}, new int[] {h/2, h/2-5, 2, h/2, h/2, h-20}, 6);
		g2.dispose();
		return image;
	}
	
	public static void main(String[] args) {
		JFrame frame = new ImageToolTipDemo();
		frame.setBounds(0, 0, 500, 300);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B ImageIcon auf JPanel austauschen AWT, Swing, JavaFX & SWT 3
C Swing ImageIcon erstellen, skalieren und verwenden AWT, Swing, JavaFX & SWT 3
N imageIcon zeigt kein Bild an AWT, Swing, JavaFX & SWT 5
P Swing Mehrere JLabels mit ImageIcon in JPanel lesen AWT, Swing, JavaFX & SWT 1
F JLabel mit ImageIcon per Button bewegen AWT, Swing, JavaFX & SWT 4
CptK Swing Button: ImageIcon unter den Text AWT, Swing, JavaFX & SWT 4
cool_brivk24 Swing ImageIcon lädt kein Bild AWT, Swing, JavaFX & SWT 12
P Kein Bild wird angezeigt bei ImageIcon AWT, Swing, JavaFX & SWT 16
S Bild mit ImageIcon auf GUI verkleinern AWT, Swing, JavaFX & SWT 3
K Swing JTable mit ImageIcon und Text in einer Zelle AWT, Swing, JavaFX & SWT 1
L ImageIcon auf JPanel wird nicht angezeigt(keiner Fehlermeldung) AWT, Swing, JavaFX & SWT 11
stylegangsta JButton Fehelr javax.swing.ImageIcon.<init>(Unknown Source) AWT, Swing, JavaFX & SWT 24
L JButton mit ImageIcon/Fehlermeldung AWT, Swing, JavaFX & SWT 1
Tausendsassa ImageIcon?! Hilfe! AWT, Swing, JavaFX & SWT 10
S JLabel mit ImageIcon, komischer Rahmen? AWT, Swing, JavaFX & SWT 2
O ImageIcon lädt nicht AWT, Swing, JavaFX & SWT 2
kaoZ Swing JToolBar, ImageIcon werden teilweise verdeckt AWT, Swing, JavaFX & SWT 0
R ImageIcon - Über Socket AWT, Swing, JavaFX & SWT 1
P ImageIcon lade schlägt fehl AWT, Swing, JavaFX & SWT 5
B Repaint auf JFrame, JLabel und ImageIcon AWT, Swing, JavaFX & SWT 4
S JLabel zeigt ImageIcon nicht AWT, Swing, JavaFX & SWT 13
B ImageIcon - Probleme mit dem Dateipfad AWT, Swing, JavaFX & SWT 5
C Swing ImageIcon mit Bild aus Temp-Verzeichniss füllen AWT, Swing, JavaFX & SWT 15
P ImageIcon auf Rectangle AWT, Swing, JavaFX & SWT 3
C ImageIcon eines Labels auf einem Panel in neuem Fenster anzeigen AWT, Swing, JavaFX & SWT 2
M ImageIcon Bild wird beim verkleinern des Fensters nicht verkleinert AWT, Swing, JavaFX & SWT 3
B Swing ImageIcon Resizing AWT, Swing, JavaFX & SWT 15
S ImageIcon von Label entfernen AWT, Swing, JavaFX & SWT 9
B Warten bis neues ImageIcon zugewiesen ist AWT, Swing, JavaFX & SWT 3
Zettelkasten imageIcon-Rand wegmachen AWT, Swing, JavaFX & SWT 5
S Abspeichern aus einem ImageIcon ins korrekte Format AWT, Swing, JavaFX & SWT 2
J ImageIcon: ZipException bei ungültiger PNG-Datei AWT, Swing, JavaFX & SWT 2
S ImageIcon Grösse anpassen AWT, Swing, JavaFX & SWT 2
J Geladene Grafik in ImageIcon auf Panel fest positionern. AWT, Swing, JavaFX & SWT 8
badfish Swing ImageIcon auf JLabel, Fenster Maximieren verbieten und Icon oben links austauschen? AWT, Swing, JavaFX & SWT 5
B Problem mit imageIO und ImageIcon AWT, Swing, JavaFX & SWT 5
M Swing ImageIcon über JFileChooser einbinden AWT, Swing, JavaFX & SWT 4
C Swing JComboBox - Problem bei Darstellen von ImageIcon AWT, Swing, JavaFX & SWT 4
G ImageIcon viel zu groß AWT, Swing, JavaFX & SWT 2
G IMageIcon Bildgröße ändern AWT, Swing, JavaFX & SWT 7
isowiz Leeres ImageIcon einer bes timmten Größe erzeugen AWT, Swing, JavaFX & SWT 2
W ImageIcon im JLabel mit autosize? AWT, Swing, JavaFX & SWT 3
B ImageIcon JFrame AWT, Swing, JavaFX & SWT 3
M ImageIcon auf AbstractButton links-/rechtbündig AWT, Swing, JavaFX & SWT 2
D jButton mit ImageIcon & MouseListener AWT, Swing, JavaFX & SWT 5
M ImageIcon in JLabel verkleinern AWT, Swing, JavaFX & SWT 8
S n-e-w JLabel(n-e-w ImageIcon(i)) funkt. nicht im JScrollPane AWT, Swing, JavaFX & SWT 2
M Problem, an ImageIcon in JPanels zu kommen. AWT, Swing, JavaFX & SWT 2
J Bildfilterung und Ausgabe in ein ImageIcon AWT, Swing, JavaFX & SWT 2
X ImageIcon für JButton AWT, Swing, JavaFX & SWT 4
X JButton "effect" für ImageIcon AWT, Swing, JavaFX & SWT 6
F ImageIcon -> BufferedImage AWT, Swing, JavaFX & SWT 2
T ImageIcon als Seperator im Jmenu AWT, Swing, JavaFX & SWT 8
G JLabel und ImageIcon AWT, Swing, JavaFX & SWT 16
padde479 ImageIcon laden AWT, Swing, JavaFX & SWT 6
L Anzeigen von fotos: ImageIcon oder BufferedImage + paint() ? AWT, Swing, JavaFX & SWT 5
J ImageIcon, Image - 100% CPU Auslastung . AWT, Swing, JavaFX & SWT 3
B imageicon relativer Pfad AWT, Swing, JavaFX & SWT 5
F ImageIcon Größe ändern AWT, Swing, JavaFX & SWT 29
M ImageIcon / .paintIcon() AWT, Swing, JavaFX & SWT 2
M Problem mit ImageIcon in einer JTable AWT, Swing, JavaFX & SWT 2
D JButton einen neuen ImageIcon setzen? AWT, Swing, JavaFX & SWT 2
R resize ImageIcon AWT, Swing, JavaFX & SWT 7
B Problem mit ImageIcon/Swing in Linux AWT, Swing, JavaFX & SWT 6
K ImageIcon fehler ? AWT, Swing, JavaFX & SWT 4
M ImageIcon laden? AWT, Swing, JavaFX & SWT 2
I JavaFX Hover-Effekt bei Button AWT, Swing, JavaFX & SWT 11
dereki2000 Welcher Methodenaufruf bei Hover, click,... AWT, Swing, JavaFX & SWT 5
I JavaFX: "Hover" und "Transition"-Effekt onEntered/onExited AWT, Swing, JavaFX & SWT 0
W SWT hover-background-problem with first column in TreeViewer AWT, Swing, JavaFX & SWT 0
L JavaFX Hover Effekt über das Parent Element AWT, Swing, JavaFX & SWT 4
L JavaFX Custom control mit Hover Effekt AWT, Swing, JavaFX & SWT 2
M Hover-Farbe über Hintergrundfarbe legen AWT, Swing, JavaFX & SWT 3
G JList hover möglich? AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben