Swing Problem beim "rezeichnen" -> Überzeichnen der Komponente

Status
Nicht offen für weitere Antworten.

Developer_X

Top Contributor
Hi, ich habe eine Klasse geschrieben, die von der Klasse JMenuBar erbt.
Ich habe mir geplant, etwas zu verändern:
im hintergrund ein paar sachen zu zeichnen.
So diese sachen sind abhängig von der größe der JMenuBar
also habe ich ihr einen MouseListener angehängt, immer beim betreten und verlassen, und klicken der maus, wird die JMenuBar neugemalt, damit sie sich den größen immer optimal anpassen, mein Problem:
beim neuzeichnen werden die komponente der JMenuBar unsichtbar, erst wenn ich mit der maus über die komponente fahre werden sie wieder sichtbar,

ich dachte ich könnte bei den implementierten "MouseListener"-Methoden einfach nach dem neuzeichnen alle Komponente neu "adden" dies funktioniert leider nicht, hat einer idee wie ich mein Problem lösen kann?

Wenn ihr den Quellcode zur beantwortung braucht, sagts mir und ich poste ihn euch.

PS:
Meine Vermutung liegt darin, dass die JMenuBar schon ein Layout hat, ein standardmäßiges, wenn dies so ist, muss ich beim neu "adden" das layout setzten?
wenn ja welches standard Layout hat den die JMenuBar?
etwa : BoxLayout->BoxLayout.X_AXIS ?
 

Ebenius

Top Contributor
Wenn ich Dich richtig verstanden habe, gehst Du schon falsch ran. Zum zeichnen einer beliebigen Swing-Komponente (alle die von JComponent erben) muss man nichts anderes tun als das:
Java:
public class AndersZeichnendeSwingKomponente extends IrgendeineSwingKomponente {

  @Override
  protected void paintComponent(Graphics g) {
    super.paintComponent(g);

    // Hier den eigenen Zeichenkram machen
  }
}
Dafür ist kein Listener und nichts notwendig. Wenn Du aus irgendeinem Grund Geschwindigkeitsoptimierungen machen musst, die von der Größe der Komponente abhängen, benötigst Du ebenfalls keinen Listener. Du kannst einfach die Methode [c]validate()[/c] überschreiben und dort Deine Berechnungen machen:
Java:
  @Override
  public void validate() {
    if (!isValid()) {
      synchronized (getTreeLock()) {
        if (!isValid()) {
          super.validate();

          // Hier die von der Größe abhängige Vorarbeit machen
        }
      }
    }
  }
Ebenius
 

André Uhres

Top Contributor
Hi, ich habe eine Klasse geschrieben, die von der Klasse JMenuBar erbt.
Ich habe mir geplant, etwas zu verändern:
im hintergrund ein paar sachen zu zeichnen.
So diese sachen sind abhängig von der größe der JMenuBar
Wenn wir erstmal den grundlegenden Malmechanismus von Swing verstanden haben: Malen in Swing Teil 1: der grundlegende Mechanismus - Byte-Welt Wiki , dann ist die vorliegende Aufgabe nur noch ein Kinderspiel:
Java:
/*
 * MenuBarDemo.java
 *
 */
import java.awt.*;
import javax.swing.*;
public class MenuBarDemo extends JFrame {
    private JMenu jMenu1;
    private JMenu jMenu2;
    private JMenuBar jMenuBar1;
    public MenuBarDemo() {
        super("MenuBarDemo");
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(400, 300);
        setLocationRelativeTo(null);
        jMenuBar1 = jMenuBar1 = new JMenuBar() {
            private Dimension size = new Dimension();
            @Override
            public Dimension getPreferredSize() {
                Dimension layoutSize = super.getPreferredSize();
                size.width = layoutSize.width;
                size.height = layoutSize.height + 10;
                return size;
            }
            @Override
            protected void paintComponent(final Graphics g) {
                super.paintComponent(g);
                g.setColor(Color.ORANGE);
                Dimension dim = getSize();
                for (int i = 2; i < dim.width; i += dim.height + 2) {
                    g.drawOval(i, 1, dim.height - 4, dim.height - 4);
                }
            }
        };
        jMenu1 = new JMenu("File");
        jMenu2 = new JMenu("Edit");
        jMenuBar1.add(jMenu1);
        jMenuBar1.add(jMenu2);
        setJMenuBar(jMenuBar1);
    }
    public static void main(final String[] args) {
        Runnable gui = new Runnable() {
            public void run() {
                new MenuBarDemo().setVisible(true);
            }
        };
        //GUI must start on EventDispatchThread:
        SwingUtilities.invokeLater(gui);
    }
}
 
Zuletzt bearbeitet:

Developer_X

Top Contributor
ich glaube bevor ich deinen Code genauer anschaue, lese ich erst mal den Text bei Byte Welt, danke euch beiden
 

Developer_X

Top Contributor
@Beide:
Danke für eure Lösungsansätzte, diesen Lösungsansatz konnte ich an dieser Stelle recht gut verwenden, wobei ich aber aucvh sagen muss dass bei einigen Componenten, die reagieren sollen wenn man mit der maus über sie fährt, eine etwas andere Art und weise verwendet werden kann, den ich herausgefunden habe mit dem MouseListener, danke euch noch mal, und danke für den Artikel, diese Methode werde ich für künftige dinge verwenden!
 

André Uhres

Top Contributor
Ein Codefragment mit MouseListener steht auch im verlinkten Artikel. Anstatt, wie dort im Beispiel, bei "mousePressed/mouseReleased" zu reagieren, würden wir in deinem Fall einfach nur bei "mouseEntered/mouseExited" reagieren.
 

Developer_X

Top Contributor
ich hab da noch 2 Problem(e), schau mal hier:
Java:
   @Override
     protected void paintComponent(final Graphics g) 
     {
         super.paintComponent(g);
         g.setFont(font);
         g.setColor(back);
         g.drawRect(0, 0, getSize().width, getSize().height);
         paints(g,back);
         g.setColor(Color.darkGray);    
         g.fillOval(0,0,getSize().height,getSize().height);
         g.setColor(new ColorCollection().createColor("Red20"));

		  i1 = Toolkit.getDefaultToolkit().getImage("Pics/ButOn.jpg");
		  i2 = Toolkit.getDefaultToolkit().getImage("Pics/ButOut.jpg");

         if(pressed==true)
         {
             g.drawImage(i1, 0,0, getSize().height,getSize().height, this);
         }
         else
         {
             g.drawImage(i2, 0,0, getSize().height,getSize().height, this);
         }
         g.setColor(fore);
         g.drawString(text,getSize().height/2,0);
     }
1. Der Text Unten wird nicht angezeigt, ich schwör dir der "text" enthält zeichenketten
2. das mit dem image zeichnen klappt nicht wieso?
 

André Uhres

Top Contributor
Achte auf die Farbe und auf die y Koordinate: mit 0 fliegt der Text oben raus! Versuch mal die Bilder mit ImageIO.read zu laden, etwa so:
i1 = ImageIO.read(getClass().getResourceAsStream(...));
Achja, die Bilder nicht in paintComponent laden! Das wird auch in dem verlinkten Artikel erklärt.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
TheWhiteShadow JavaFX ListView Problem beim Entfernen von Elementen AWT, Swing, JavaFX & SWT 1
K JavaFX Resizing-Problem beim BorderLayout (Center Component) beim Arbeiten mit mehreren FXMLs AWT, Swing, JavaFX & SWT 2
L JavaFX Problem beim Aufrufen einer Methode AWT, Swing, JavaFX & SWT 5
I 2D-Grafik Problem beim Ändern der Farbe eine 2d Objekts AWT, Swing, JavaFX & SWT 3
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
N Swing Problem beim Scrollen mit JScrollPane AWT, Swing, JavaFX & SWT 6
N Swing JTree Problem beim erstellen der Knoten AWT, Swing, JavaFX & SWT 0
N Swing CardLayout: Problem beim Wechsel zwischen den JPanels AWT, Swing, JavaFX & SWT 3
T Problem beim Zeichnen von Rechteck AWT, Swing, JavaFX & SWT 3
S Anordnung von GUI-Komponenten mit LayouManger (Problem beim anzeigen von JTextField) AWT, Swing, JavaFX & SWT 5
A Swing Problem beim Neuerstellen einer Node AWT, Swing, JavaFX & SWT 4
bluerob Problem beim Image zeichnen via andere Klasse AWT, Swing, JavaFX & SWT 7
B Swing Problem beim ActionListener AWT, Swing, JavaFX & SWT 5
K Swing Problem beim Zeichnen von Kreisen AWT, Swing, JavaFX & SWT 4
K JButton Problem beim Schriftfarbe Ändern AWT, Swing, JavaFX & SWT 2
P Problem beim erstellen eines JPanel in einem JFrame AWT, Swing, JavaFX & SWT 7
R Problem beim Anzeigen von Bildern auf JInternalFrame AWT, Swing, JavaFX & SWT 6
D 2D-Grafik Problem beim Drucken eines Grafik-Objekts AWT, Swing, JavaFX & SWT 2
M Problem beim Eventhandling AWT, Swing, JavaFX & SWT 5
B Problem beim laden von Bild mit getResource() AWT, Swing, JavaFX & SWT 3
T JSpinner in JTable: Problem beim Auslesen, funktioniert erst beim Zellwechsel AWT, Swing, JavaFX & SWT 7
H Thread-Problem mit der Darstellung beim Sperren des Fensters AWT, Swing, JavaFX & SWT 2
C Performance-Problem beim Überschreiben von paintComponent() AWT, Swing, JavaFX & SWT 2
M Problem beim Zeichnen mit Path2D AWT, Swing, JavaFX & SWT 4
F Swing JTable: Problem beim zeile löschen AWT, Swing, JavaFX & SWT 3
G Problem beim setzen des Fokus AWT, Swing, JavaFX & SWT 4
Z Problem beim JTextField AWT, Swing, JavaFX & SWT 5
C Swing Problem beim 2. Öffnen eines JFrames AWT, Swing, JavaFX & SWT 9
1 Java.awt.Robot Problem beim Shift-Druck AWT, Swing, JavaFX & SWT 5
B Swing Problem beim Elemente zu JList hinzufügen AWT, Swing, JavaFX & SWT 5
F Problem beim Positionieren von Icon und Text in Button AWT, Swing, JavaFX & SWT 2
N SWT Einfaches Problem beim Layout AWT, Swing, JavaFX & SWT 8
N Swing Problem beim Einlesen von Jtable in Array AWT, Swing, JavaFX & SWT 5
W Swing Problem beim Passwort Dialog AWT, Swing, JavaFX & SWT 4
C Problem mit Swing Application Framework - Projekt beim AWT, Swing, JavaFX & SWT 2
F kleines problem beim suchen in einem String AWT, Swing, JavaFX & SWT 15
A Problem beim Setzen von JPanels AWT, Swing, JavaFX & SWT 4
P Problem beim Linien ziehen! AWT, Swing, JavaFX & SWT 12
S Problem beim Anpassen vom GridBagLayout AWT, Swing, JavaFX & SWT 10
H Adressbuch - Problem beim Speichern der Eingabe AWT, Swing, JavaFX & SWT 5
A Problem mit der Seiteneinrichtung beim Drucken AWT, Swing, JavaFX & SWT 7
P Bug in Java? - Problem beim Ändern von Spaltentiteln AWT, Swing, JavaFX & SWT 2
I Layout Problem beim Skalieren AWT, Swing, JavaFX & SWT 3
S Problem beim implementerien von ActionListener AWT, Swing, JavaFX & SWT 4
Y Problem beim Drucken AWT, Swing, JavaFX & SWT 2
A Problem beim Import! AWT, Swing, JavaFX & SWT 2
M Problem beim Einsatz von ScrollPane (Fenster spielt verrückt AWT, Swing, JavaFX & SWT 2
H Problem beim zeichen eines TimeSeriesChart mit jfreechart AWT, Swing, JavaFX & SWT 5
Z Und schon wieder die Linien (Problem beim überzeichnen) AWT, Swing, JavaFX & SWT 4
W Problem beim neuzeichnen eines Rechteckes (SWT) AWT, Swing, JavaFX & SWT 2
J Problem beim Multi-Threading mit einem JDialog AWT, Swing, JavaFX & SWT 2
J Problem mit Alpha-Wert beim Button AWT, Swing, JavaFX & SWT 3
P Problem beim Zeichnen auf ein BufferedImage AWT, Swing, JavaFX & SWT 4
F Problem mit geänderten AttributSet beim StyledDocument AWT, Swing, JavaFX & SWT 4
B BorderLayout/JSplitPane Problem beim Ausrichten AWT, Swing, JavaFX & SWT 5
C Problem beim Ausführen von Thread per Button AWT, Swing, JavaFX & SWT 2
S Problem beim Image laden AWT, Swing, JavaFX & SWT 4
D Problem beim Erstellen eines GridBagLayouts AWT, Swing, JavaFX & SWT 3
A Problem beim Neuzeichnen AWT, Swing, JavaFX & SWT 2
V Problem beim drucken AWT, Swing, JavaFX & SWT 4
D Problem beim Update von unsichtbaren JComponents mit Timern AWT, Swing, JavaFX & SWT 5
S Problem beim Umbenennen von MP3s AWT, Swing, JavaFX & SWT 10
O Problem beim Umwandeln eines Applets in eine Applikation AWT, Swing, JavaFX & SWT 15
T Problem beim Laden von Bildern AWT, Swing, JavaFX & SWT 14
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
H 2D-Grafik Problem mit Paint AWT, Swing, JavaFX & SWT 1
S Layout - Problem AWT, Swing, JavaFX & SWT 1
Tassos JavaFX/Problem mit der Maussteuerung in Stackpane AWT, Swing, JavaFX & SWT 7
sserio Java Fx - Problem AWT, Swing, JavaFX & SWT 3
A Problem Spiel auf Panel der GUI zu bringen AWT, Swing, JavaFX & SWT 1
A JavaFX Controller Problem AWT, Swing, JavaFX & SWT 1
E LayoutManager Welcher Layout-Mix löst mein Problem? AWT, Swing, JavaFX & SWT 3
Umb3rus JavaFX Problem mit PropertyValueFactory: can not read from unreadable property AWT, Swing, JavaFX & SWT 1
T Problem mit paintComponent() AWT, Swing, JavaFX & SWT 17
AmsananKING Java Menü-Problem AWT, Swing, JavaFX & SWT 1
G Instance OF Problem AWT, Swing, JavaFX & SWT 9
FrittenFritze Ein Problem mit der CSSBox, die Größe wird nicht angepasst AWT, Swing, JavaFX & SWT 5
M Problem mit dem Anzeigen von Frames im Vordergrund AWT, Swing, JavaFX & SWT 5
Badebay Problem mit JButton AWT, Swing, JavaFX & SWT 2
newJavaGeek Grid-Layout problem AWT, Swing, JavaFX & SWT 7
J JavaFX Löschen im Tabelview macht Problem AWT, Swing, JavaFX & SWT 15
JavaTalksToMe JavaFx ExekutorService Problem AWT, Swing, JavaFX & SWT 2
Zrebna Problem bei Eventhandling (Value soll nach jedem erneutem Klick gelöscht werden) AWT, Swing, JavaFX & SWT 4
B Problem mit JavaFX AWT, Swing, JavaFX & SWT 5
J css Problem AWT, Swing, JavaFX & SWT 5
B JavaFX habe mein Problem fett markiert AWT, Swing, JavaFX & SWT 2
A Swing Filter-Problem AWT, Swing, JavaFX & SWT 1
temi JavaFX Problem mit IntelliJ und JavaFx 11 unter XUbuntu AWT, Swing, JavaFX & SWT 3
L Java FX Problem mit Ubuntu 18 und JavaFx AWT, Swing, JavaFX & SWT 27
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
kodela Swing Problem mit Warten-Dialog AWT, Swing, JavaFX & SWT 16
B JavaFx Scene Builder Problem AWT, Swing, JavaFX & SWT 2
B [Problem] Java öffnet Word-Datein nicht AWT, Swing, JavaFX & SWT 14
T DataBinding Problem AWT, Swing, JavaFX & SWT 5
Blender3D Problem mit € Symbol Font Gotham Windows 10 Swing AWT, Swing, JavaFX & SWT 11
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
J Problem mit Platfrom run later AWT, Swing, JavaFX & SWT 15
J Problem mit Platfrom run later AWT, Swing, JavaFX & SWT 0
D Swing SwingUtils / Thread Problem AWT, Swing, JavaFX & SWT 3
T Swing Problem mit Datum und FormattedTextField AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben