Welcher Methodenaufruf bei Hover, click,...

dereki2000

Mitglied
Hallo,
Wenn z. B. auf einen JButton geklickt wird oder die Maus drüber bewegt wird, ändert sich ja die Grafik, welche Methode wird da aufgerufen? Ist das bei Jcomponent genauso?
Ich habe schon die Methode doClick() in AbstractButton() gefunden, wo paintImmediately() aufgerufen wird. Dann hab ich im Konstruktor meines Buttons einen Mouse listener hinzugefügt und genau diese Methode bei mousePresses() aufgerufen. Hat leider nicht funktioniert

Mein Ziel ist ein eigener Button, der von Jcomponent erbt.
 
Zuletzt bearbeitet:

dereki2000

Mitglied
Was willst Du denn genau haben?

Nachtrag: damit meine ich, was Du als Ergebnis haben willst. Warum willst Du einen eigenen Button implementieren?
Ich finde Swing halt ziemlich hässlich :D. Und mir macht es Spaß Dinge selber zu schreiben bzw. auszuprobieren. Dadurch lerne ich halt auch Dinge dazu. Ich hätte hier auch mal meinen aktuellen Quellcode.
Java:
public class TabButton extends JComponent
   {
       private boolean drawDecoration = true;
       private String label;
       public TabButton(String label)
       {
           this.label = label;
           this.addMouseListener(new MouseAdapter() {
               public void mousePressed(MouseEvent e) {
                   pressed();
               }

               @Override
               public void mouseReleased(MouseEvent e) {
                   released();
               }
           });
          
       }
      
       public boolean isDrawDecoration() {
           return drawDecoration;
       }
      
       public void setDrawDecoration(boolean drawDecoration) {
           this.drawDecoration = drawDecoration;
       }

       public String getLabel() {
           return label;
       }

       public void setLabel(String label) {
           this.label = label;
       }

       protected void paintComponent(Graphics g)
       {
          
           Color mainColor;
           if(isEnabled())
               mainColor = new Color(0,255,255);
           else
               mainColor = Color.LIGHT_GRAY;
           Graphics2D g2 = (Graphics2D)g;
           int w = getWidth();
           int h = getHeight();
           g2.setColor(mainColor);
           int[] xPointsI = {6,   w-12-w/10 ,   w-12,        w-12,   w/10+6,     6};
           int[] yPointsI = {6,   6,           h/10+6,       h-12,   h-12,    h-12-h/10};
           g2.drawPolygon(new Polygon(xPointsI, yPointsI, 6));
           if(drawDecoration)
               g2.drawString("TestButton DerexUI", 10, 20);
           g2.setFont(new Font("Arial",Font.PLAIN, (w<h)?w/2:h/2));
           FontMetrics fm = g.getFontMetrics();
           Rectangle2D b = fm.getStringBounds(label, g2);
           g2.drawString(label, (int)(w-20-b.getWidth()), h-20);
       }
      
       public void pressed()
       {
           System.out.println("pressed");
           paintImmediately(new Rectangle(0,0, getWidth(), getHeight()));
       }
      
       public void released()
       {
           System.out.println("released");
           //kommt noch wenn pressed() funktioniert
       }
   }

Ich hoffe das ist einigermaßen verständlich, das ist bei mir immer sehr schwer.

EDIT: Und ich möchte mein Interface mit einem eigenen Design ausstatten.
 

mihe7

Top Contributor
Das sind verschiedene Dinge. Komponenten selber schreiben, um auszuprobieren und was dazu zu lernen auf der einen, Swing umstylen auf der anderen Seite.

Zu letzterem: Swing verwendet einen Plugin-Mechanismus für das Look & Feel. Du kannst entweder fertige nehmen, die Dir gefallen oder selbst welche schreiben bzw. umgestalten, s. dazu https://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/index.html

Jetzt zu Deinem Code und damit zum Schreiben von Komponenten: Deine pressed()-Methode zeichnet aktuell nur der Button neu, womit der aktuelle Zustand des Buttons am Bildschirm angezeigt wird. Damit Du eine Änderung feststellen kannst, musst Du den Zustand des Buttons auch ändern :)

Zum Beispiel ein boolean pressed einführen, das auf true setzen und in paintComponent entsprechend reagieren.
 

dereki2000

Mitglied
Jetzt zu Deinem Code und damit zum Schreiben von Komponenten: Deine pressed()-Methode zeichnet aktuell nur der Button neu, womit der aktuelle Zustand des Buttons am Bildschirm angezeigt wird. Damit Du eine Änderung feststellen kannst, musst Du den Zustand des Buttons auch ändern :)

Zum Beispiel ein boolean pressed einführen, das auf true setzen und in paintComponent entsprechend reagieren.

Das bedeutet, dass jedes Mal wenn ich paintImmediately() aufrufe, wird paintComponent() aufgerufen?

EDIT: Habe jetzt einfach repaint() aufgerufen. Funktioniert super :)
 

mihe7

Top Contributor
Das bedeutet, dass jedes Mal wenn ich paintImmediately() aufrufe, wird paintComponent() aufgerufen?
Ja, indirekt. Tatsächlich wird paint() aufgerufen, das unter anderem paintComponent() aufruft.

repaint() legt ein "Neuzeichnen-Ereignis" in eine Warteschlange, die vom Event Dispatch-Thread abgearbeitet wird, paintImmediately() führt paint() praktisch sofort aus.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E LayoutManager Welcher Layout-Mix löst mein Problem? AWT, Swing, JavaFX & SWT 3
B JavaFX Von welcher Klasse und zu welchem Zeitpunkt werden Event-Objekte erstellt? AWT, Swing, JavaFX & SWT 3
J JavaFX von einem Array aus Buttons herausfinden auf welcher geklickt wurde aus dem Array. AWT, Swing, JavaFX & SWT 1
Z Swing Welcher Layoutmanager bei ScrollPane? AWT, Swing, JavaFX & SWT 4
N Welcher LayoutManager AWT, Swing, JavaFX & SWT 16
G Welcher Teil der Java Standard Edition API ist für das Zeichnen von einfachen Grafiken gedacht? AWT, Swing, JavaFX & SWT 3
SexyPenny90 Welcher LayoutManager erfüllt meine Bedingung AWT, Swing, JavaFX & SWT 7
S LayoutManager Welcher LayoutManager für dieses zweispaltige Layout? AWT, Swing, JavaFX & SWT 13
P LayoutManager welcher LM ist der richtige? AWT, Swing, JavaFX & SWT 3
A Welcher Layout Manager ist hier richtig? AWT, Swing, JavaFX & SWT 3
S LayoutManager Welcher Manager AWT, Swing, JavaFX & SWT 2
R KeyListener - welcher Komponente hinzufügen AWT, Swing, JavaFX & SWT 5
S Swing DnD: Wie finde ich heraus, von welcher Zelle aus im JTable der Drag gestartet wurde? AWT, Swing, JavaFX & SWT 3
M Swing Bild wird nie angezeigt, egal mit welcher Methode! AWT, Swing, JavaFX & SWT 10
C Abfragen welcher Tab aktiv ist? AWT, Swing, JavaFX & SWT 2
V Welcher Listener für JTable? AWT, Swing, JavaFX & SWT 3
A JToolBar: Welcher Button wurde gedrückt? AWT, Swing, JavaFX & SWT 5
G welcher Jtogglebutton geklickt? AWT, Swing, JavaFX & SWT 3
S Welcher Listener ? In JTable mehrere Zeilen markieren & AWT, Swing, JavaFX & SWT 2
J jTable, welcher listener für Änderung der Spaltenbreite AWT, Swing, JavaFX & SWT 2
M Welcher Listener für JLabel? AWT, Swing, JavaFX & SWT 4
M Welcher Layout Manager? AWT, Swing, JavaFX & SWT 5
M Ein Chatfenster mit Emoticons etc.mit welcher Komponente? AWT, Swing, JavaFX & SWT 10
T JTextArea, in welcher Zeile befindet sich der Cursor AWT, Swing, JavaFX & SWT 25
J Welcher Layoutmanager? AWT, Swing, JavaFX & SWT 20
R Update eines Labels bei Methodenaufruf einer anderen Klasse AWT, Swing, JavaFX & SWT 9
Q AWT Methodenaufruf aus actionPerformed-Methode AWT, Swing, JavaFX & SWT 4
Y Applet Javascript / Java Methodenaufruf in nicht mehr aktueller JavaVersion AWT, Swing, JavaFX & SWT 0
K Event Handling Methodenaufruf in GUI AWT, Swing, JavaFX & SWT 7
R Applet JavaScript Methodenaufruf AWT, Swing, JavaFX & SWT 2
El_Lobo Swing Problem bei Methodenaufruf in innerer Klasse bei Listener AWT, Swing, JavaFX & SWT 3
P Swing Methodenaufruf beeinflusst TextArea nicht. AWT, Swing, JavaFX & SWT 6
A AWT Methodenaufruf "AWT-EventQueue-0" java.lang.NullPointerException AWT, Swing, JavaFX & SWT 4
W Methodenaufruf aus einer anderen Klasse AWT, Swing, JavaFX & SWT 3
M [SOLVED]Automatischer Methodenaufruf? AWT, Swing, JavaFX & SWT 4
D Methodenaufruf bei schließen des Frames AWT, Swing, JavaFX & SWT 4
I JavaFX Hover-Effekt bei Button AWT, Swing, JavaFX & SWT 11
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
A Swing ImageIcon hover AWT, Swing, JavaFX & SWT 9
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