Swing Eigene Komponente reagiert falsch auf mouseClicked()

Hutmacher

Bekanntes Mitglied
Dies hier ist ein kleines Beispiel einer eigenen Komponente, die von JComponent erbt. Sie soll nur ein Rechteck malen und wenn man diese auf der GUI anklickt, etwas ausprinten.

Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.JComponent;

public class Compo extends JComponent implements MouseListener
{
	public Compo()
	{
		setPreferredSize(new Dimension(123, 123));
		setSize(123, 123);
		addMouseListener(this);
	}
	
	@Override 
	public void paintComponent(Graphics graphics)
	{
		super.paintComponents(graphics);
		graphics.drawRect(0, 0, 122, 122);
	}

	@Override
	public void mouseClicked(MouseEvent e)
	{
		System.out.println("sdfk");
		
	}

           // ↓ Wayne ↓
	@Override
	public void mouseEntered(MouseEvent e)
	{
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseExited(MouseEvent e)
	{
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mousePressed(MouseEvent e)
	{
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseReleased(MouseEvent e)
	{
		// TODO Auto-generated method stub
		
	}
}

Dazu noch die GUI mit Main-Methode:
Java:
import javax.swing.*;

public class GUI extends JFrame
{
	
	public GUI()
	{
		super("Testing");
		setSize(740, 650);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		Compo rectangle = new Compo();
		getContentPane().add(rectangle);
	}
	
	public static void main(String[] args)
	{
		new GUI().setVisible(true);
	}
}

Das Ganze kann man also als „Kurzes kompilierbares Beispiel“ ansehen ;D

Wenn ich ich auf das Rechteck klicke, wird etwas ausgegeben – soweit, so gut. Das Problem ist nun, dass es auch ausgegeben wird, wenn ich danebe klicke – egal, wohin im Fenster ich klicke!

Woran liegt das, was habe ich vegessen/falsch gemacht?
 

r.w.

Bekanntes Mitglied
Hallo Hutmacher,

wenn Du Deiner JComponent z.b. mit ...
Java:
   setBorder(BorderFactory.createLineBorder(Color.black));
... einen Rahmen gibst, siehst Du was passiert.
Die Ursache hierfür ist das Standard-Layout des JFrame (BorderLayout).

Setze die folgende Zeile in den Konstruktor des JFrame ein und Du erhältst das von Dir gewünschte Ergebnis:
Java:
   setLayout(null);

Ich hoffe, ich konnte Dir damit helfen. :)

VG ROlf

(EDIT: Sorry, das Standard-Layout des JFrame ist natürlich das BorderLayout. Hab es soeben geändert.)
 
Zuletzt bearbeitet:

Hutmacher

Bekanntes Mitglied
Jep, das stimmt zwar, aber das Problem ist ja, dass diese Komponente in einer geordneten GUI mit Layout X auch funktionieren muss – zum Beispiel ein JButton funktioniert ja nicht auch nur mit dem Null-Layout =)
(hätte ich vielleicht dazuschreiben sollen ^^')
 

eRaaaa

Top Contributor
Wieso? Der Button wird doch dann genauso ans Layout angepasst. Wenn du dein Fenster vergrößerst/verkleinerst, veränderst du doch evtl., je nachdem welches Layout du hast auch die Größe des Buttons. Das gezeichnetete Rechteck hat dann damit nichts zu tun:
Java:
	public static void main(String[] args) throws Exception {
		JFrame frame = new JFrame();
		JButton btn = new JButton("Blub"){
			@Override
			protected void paintComponent(Graphics g) {
				super.paintComponent(g);
				g.drawRect(0, 0, 122, 122);
			}
		};
		btn.setPreferredSize(new Dimension(122, 122));
		btn.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
		        System.out.println("sdfk");
			}
		});
		frame.add(btn);
		frame.setSize(740, 650);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
	}

So gehts z.B. mit deiner Komponente auch:
Java:
	public static void main(String[] args) throws Exception {
		JFrame frame = new JFrame();
		JPanel panel = new JPanel();
		panel.add(new Compo());
		frame.add(panel);
		frame.setSize(740, 650);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
	}
 

r.w.

Bekanntes Mitglied
Stimmt, die JButton-Komponente verhält sich doch genauso, wie Deine "Compo". ;-)

Wenn Du Deine Komponente zuerst in ein JPanel packst und den dann
dem ContentPane des JFrame hinzufügst, dann sollte es funktionieren.

VG ROlf
 

Hutmacher

Bekanntes Mitglied
Dankeschön, die Lösung funktioniert gut.
Ich wollt mal wieder den Weg der puren Komponente, die „auch ohne“ funktioniert, gehen.

@ r.w.:
Compo heißt das nur, weil das ein Test und ich zu faul für „TestComponent“ war … na ja, letzenendes habe ich es ja doch geschrieben ^^
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Swing Eigene Komponente (JPanel) soll ChangeEvents verteilen AWT, Swing, JavaFX & SWT 12
P Swing Eigene Komponente Entwickeln - erben von JComponent oder JPanel? AWT, Swing, JavaFX & SWT 5
H Swing Eigene Komponente wird nur halb oder komisch angezeigt AWT, Swing, JavaFX & SWT 3
D Swing Eigene Komponente mit JSpinner AWT, Swing, JavaFX & SWT 4
F eigene Swing-Komponente. Drehregler AWT, Swing, JavaFX & SWT 4
S SWT Für jede gui komponente eigene methode AWT, Swing, JavaFX & SWT 2
L eigene Komponente, ActionEvent senden? AWT, Swing, JavaFX & SWT 3
Y Eigene Komponente einfügen AWT, Swing, JavaFX & SWT 6
M eigene GUI Bibliothek erstellen. AWT, Swing, JavaFX & SWT 10
M Eigene Java Klasse für allgemeine Grafikelemente AWT, Swing, JavaFX & SWT 8
H MouseAdapter Klasse nutzen wenn eigene Klasse bereits von anderer erbt AWT, Swing, JavaFX & SWT 13
Jose05 JavaFX: eigene FXML-Datei für einen Button AWT, Swing, JavaFX & SWT 3
V Swing für jedes Kästchen eine eigene Farbe AWT, Swing, JavaFX & SWT 2
L JavaFX Eigene Font benutzen AWT, Swing, JavaFX & SWT 6
B Notepad++ in die eigene GUI einbinden AWT, Swing, JavaFX & SWT 7
B JavaFX Bild um die eigene Achse drehen lassen AWT, Swing, JavaFX & SWT 0
M Eigene Klasse mit Grafikobjekten schreiben AWT, Swing, JavaFX & SWT 4
S JavaFX Drehen um eigene Achse AWT, Swing, JavaFX & SWT 2
P X extends TreeView - eigene Methoden AWT, Swing, JavaFX & SWT 5
Java_RY AWT Frame in eine eigene klasse auslagern und aufrufen AWT, Swing, JavaFX & SWT 6
L Eigene Component anordnen AWT, Swing, JavaFX & SWT 7
L JavaFX Eigene JavaFX Controls anlegen AWT, Swing, JavaFX & SWT 1
L Swing Teile eines JPanel in eigene Klasse auslagern AWT, Swing, JavaFX & SWT 3
J Eigene Klasse auf Basis Textfield in SceneBuilder anzeigen AWT, Swing, JavaFX & SWT 4
stylegangsta Eigene Klasse für JButton aus dem JFrame abrufen AWT, Swing, JavaFX & SWT 29
L Eigene Component Layout AWT, Swing, JavaFX & SWT 4
S Swing Eigene JComboBox Problem! AWT, Swing, JavaFX & SWT 1
O JTabeddpane aber jedes JPanel als eigene Klasse anlegen AWT, Swing, JavaFX & SWT 7
G Event Handling Event Handling in eigene Klasse AWT, Swing, JavaFX & SWT 4
L Eigene JComponent in GridLayout AWT, Swing, JavaFX & SWT 9
A JavaFX Scene Builder eigene Klasse hinzufügen AWT, Swing, JavaFX & SWT 2
L Swing Wie programmiere ich eine eigene GUI? AWT, Swing, JavaFX & SWT 12
T Swing Eigene Konsole AWT, Swing, JavaFX & SWT 5
D Swing Eigene Tabelle AWT, Swing, JavaFX & SWT 18
M eigene horizontale Scrollbar AWT, Swing, JavaFX & SWT 1
M JavaFX Scenebuilder eigene Komponenten AWT, Swing, JavaFX & SWT 8
A JavaFX Eigene Komponenten im Scene Builder AWT, Swing, JavaFX & SWT 0
J JavaFX Eigene ListCell Problem(Objekte werden doppelt angezeigt) AWT, Swing, JavaFX & SWT 1
C Swing MenuBar als eigene Klasse AWT, Swing, JavaFX & SWT 4
A Swing Eigene JComponent Scrollable AWT, Swing, JavaFX & SWT 6
Kenan89 3D Models aus anderen Spielen in eigene einfügen AWT, Swing, JavaFX & SWT 3
R SWT Eigene Events erstellen und werfen AWT, Swing, JavaFX & SWT 59
P Eigene CMD GUI zum Starten von JAR AWT, Swing, JavaFX & SWT 10
M Swing eigene Dialoge, aber wie genau? AWT, Swing, JavaFX & SWT 5
S Eigene JComponent Image zeichnen AWT, Swing, JavaFX & SWT 3
P Swing Alle Zeilen einer Spalte (jTable) zusammen zählen und in eine eigene Zeile das Ergebnis schreiben. AWT, Swing, JavaFX & SWT 7
K 3D-Grafik Eigene "Kamera" AWT, Swing, JavaFX & SWT 2
T eigene Klasse für Panel AWT, Swing, JavaFX & SWT 9
E LookAndFeel Eigene Komponenten mit Synth L&F stylen AWT, Swing, JavaFX & SWT 2
alderwaran Swing XML editor plugin für eigene anwendung AWT, Swing, JavaFX & SWT 2
B Eigene Methoden in TABs einfügen AWT, Swing, JavaFX & SWT 8
R eigene Methoden für Buttons? AWT, Swing, JavaFX & SWT 11
T Eigene JComponent AWT, Swing, JavaFX & SWT 4
L Eigene Design Oberfläche erstellen AWT, Swing, JavaFX & SWT 3
1 Eigene Component in JScrollBar + fixe Linien??? AWT, Swing, JavaFX & SWT 2
T SWT eigene Komponenten AWT, Swing, JavaFX & SWT 2
Kr0e Allgemeine Frage zu Java2D (Eigene Impl.) AWT, Swing, JavaFX & SWT 18
A Eigene StatusBar AWT, Swing, JavaFX & SWT 2
1 Eigene JComponent mit MouseListener versehen AWT, Swing, JavaFX & SWT 10
S Eigene GUI Elemente erstellen AWT, Swing, JavaFX & SWT 6
D Eigene Methode soll Gerade zeichnen AWT, Swing, JavaFX & SWT 5
MrMilti eigene Klasse in JTable ablegen AWT, Swing, JavaFX & SWT 12
R Swing JTable: Eigene Zeichnung im Header AWT, Swing, JavaFX & SWT 11
A Eigene Border für Buttons AWT, Swing, JavaFX & SWT 19
A Eigene Buttons AWT, Swing, JavaFX & SWT 20
C JTextPane HTML und eigene Tags AWT, Swing, JavaFX & SWT 10
S Eigene GUI (evt. Toolkit) AWT, Swing, JavaFX & SWT 10
M SWT: eigene Events AWT, Swing, JavaFX & SWT 9
& eigene Schriftart in JEditorpane AWT, Swing, JavaFX & SWT 2
T Eigene Fenster kreieren?zb. wie bei Winamp? AWT, Swing, JavaFX & SWT 9
D Eigene Component erstellen? AWT, Swing, JavaFX & SWT 4
M Eigene Klasse für mehrer JSplitPanes AWT, Swing, JavaFX & SWT 3
M Eigene Komponenten basteln AWT, Swing, JavaFX & SWT 25
O Eigene GUI Objekte entwerfen? AWT, Swing, JavaFX & SWT 3
A Eigene, sich selbst zeichnende Component AWT, Swing, JavaFX & SWT 5
S Eigene Komponenten AWT, Swing, JavaFX & SWT 2
T Eigene erweiterte MouseEvents nutzen AWT, Swing, JavaFX & SWT 2
M In eigene JPanel Klasse zeichnen AWT, Swing, JavaFX & SWT 4
M CellEditor und CellRenderer für eigene Klasse AWT, Swing, JavaFX & SWT 4
M eigene ComponentUI und Serializable AWT, Swing, JavaFX & SWT 3
E Eigene Steuerelemente bauen AWT, Swing, JavaFX & SWT 3
H eigene paintComponent(Graphics) kommt mit rezise nicht klar AWT, Swing, JavaFX & SWT 6
G fullscreen GUI - eigene components? AWT, Swing, JavaFX & SWT 2
T 4 db tabellen in einem karteireiter eigene klasse für die me AWT, Swing, JavaFX & SWT 7
J Eigene Fehlermeldung in AWT erzeugen AWT, Swing, JavaFX & SWT 2
D eigene SwingKonsole. AWT, Swing, JavaFX & SWT 5
I Eigene JComboBox AWT, Swing, JavaFX & SWT 10
C UIDefaults für eigene Klasse anpassen AWT, Swing, JavaFX & SWT 3
C ISelectionProvider und eigene Selections AWT, Swing, JavaFX & SWT 2
M kann man auch eigene look and feels machen? AWT, Swing, JavaFX & SWT 2
E Beim Schließen des Fensters eigene Funktion aufrufen AWT, Swing, JavaFX & SWT 8
M JTable mit JCombobox eigene Auswahl pro Zeile ? AWT, Swing, JavaFX & SWT 3
T JFrame - eigene Titelleiste AWT, Swing, JavaFX & SWT 8
G Eigene Koponente erstellen AWT, Swing, JavaFX & SWT 3
G Eigene Componente in jScrollView einbetten AWT, Swing, JavaFX & SWT 6
T Eigene grafische Oberfläche AWT, Swing, JavaFX & SWT 7
Maxim6394 JavaFX Scene Builder - Crash bei eigener Komponente AWT, Swing, JavaFX & SWT 2
H JDialog in Größe ändern - Resize-Cursor bleibt betreten der Komponente AWT, Swing, JavaFX & SWT 1
temi JavaFX "Frames" in JavaFx - passende Komponente? AWT, Swing, JavaFX & SWT 13
J Swing Komponente wird unpassend angepasst in der Größe AWT, Swing, JavaFX & SWT 35

Ähnliche Java Themen

Neue Themen


Oben