Zu den Aufzeichnungen der tutorials.de-Live-Workshops
Like Tree4Danke
  • 1 Beitrag von Der Wolf
  • 1 Beitrag von BloodyNewbie
  • 1 Beitrag von Akeshihiro
  • 1 Beitrag von Der Wolf
ERLEDIGT
JA
ANTWORTEN
7
ZUGRIFFE
386
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Registriert seit
    Oct 2005
    Beiträge
    277
    Hallo,
    ich wollte eine Art Schachbrettmuster zeichnen, was auch klappt. Nur wenn ich jetzt über das Muster einen JButton fügen möchte (nur zu Übungszwecken) zeigt er mir den Button erst an, wenn ich mit der Maus rüberfahre. Kann es sein, dass er unter dem JPanel liegt und deshalb erst von ihm verdeckt wird?


    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    
    import java.awt.Graphics;
     
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JButton;
     
    //import java.awt.*;
     
     
    public class QuadratZeichnen extends JPanel {
        
        private static final int breite = 500;
        private static final int hoehe = 400;
        
        public QuadratZeichnen() {
        }
        
        public void paint(Graphics g) {
            int m = 2;
            int n = 3;
            for(int i = (int)getHeight()/(m+1);i <= getHeight(); i = (int)i + getHeight()/(m+1)) {
            g.drawLine(0,Math.round(i),getWidth(),Math.round(i));
            }
            for(int j = (int)getWidth()/(n+1); j <= getWidth(); j = (int) j + getWidth()/(n+1)) {
            g.drawLine(Math.round(j), 0, Math.round(j), getHeight());
            }
        }
        
        public static void main(String[] args) {
            
            JFrame f = new JFrame("Fenster");
            f.setSize(breite,hoehe);
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.setVisible(true);
            f.setResizable(false);
     
            QuadratZeichnen neu = new QuadratZeichnen();
            JButton button = new JButton();
            button.setText("Button");
            button.setEnabled(true);
            neu.add(button);
            f.add(neu);
        }
     
    }

    Gruß schiese
     

  2. #2
    Der Wolf Der Wolf ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Beiträge
    153
    Hi,

    füge mal unter dem f.add(neu) ein f.pack() ein und führe das Programm dann aus.

    Gruß
    Der Wolf
    schiese bedankt sich. 

  3. #3
    BloodyNewbie BloodyNewbie ist offline Mitglied
    Registriert seit
    Apr 2010
    Beiträge
    22
    es langt auch, wenn du dein
    Code :
    1
    
     f.setVisible(true);
    als letzes aufrufst...also erst nachdem du den JButton geaddet hast!
    schiese bedankt sich. 

  4. #4
    Avatar von Akeshihiro
    Akeshihiro Akeshihiro ist offline Mitglied Platin
    Registriert seit
    Aug 2008
    Ort
    Kirchlengern (NRW)
    Beiträge
    575
    1. Bei Swing-Komponenten sollte man statt paint eigentlich paintComponent benutzen.
    2. Entweder aktualisierst du dein JFrame mit SwingUtilites#updateComponentTreeUI oder du lässt dein JFrame erst zum Schluss sichtbar machen, sprich das setVisible(true) erst aufrufen, nachdem alle Komponenten eingefügt wurden.
    schiese bedankt sich. 
    Man sagt, das Schwert eines Samurai sei seine Seele ...

    Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.

    Das Schmieden ist eine Kunst; Das Schreiben auch ;)

  5. #5
    Registriert seit
    Oct 2005
    Beiträge
    277
    Vielen Dank, das war es.
    @Akeshihiro ist ja eigentlich auch logisch. Vielen Dank

    Gruß schiese
    Geändert von schiese (29.08.10 um 14:54 Uhr)
     

  6. #6
    Registriert seit
    Oct 2005
    Beiträge
    277
    Ich habe jetzt noch eine weitere Frage zu meinem Programm. Und zwar möchte ich den Aufruf des Frames in einen Konstruktor packen und die paint-Methode in eine andere Klasse auslagern. Das klappt auch alles wunderbar, nur wenn ich ein neues Objekt meines Spielbrettes erstelle, habe ich zwei JFrames statt eines (Wenn ich es richtig vertanden habe, wird die paint()-Methode aufgerufen, wenn es Veränderungen am JFrame gibt. Ich es z.B. vergrößer. Ich lasse mir ja zusätzlich Hallo in der paint()-Methode ausgeben. Es erscheint zweimal, also wird sie zweimal aufgerufen). Hängt das damit zusammen, dass ich im Konstruktor ein neues JFrame-Objekt erstelle?

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import java.awt.*;
        
    class MeinPanel extends JPanel {
        public void paint(Graphics g) {
            g.drawLine(10,10,150,150);
            System.out.println("Hallo");
        }
    }
     
    public class Spielbrett extends JFrame {    
        
        public int breiteSpielfeld;
        public int hoeheSpielfeld;
        
        
        public Spielbrett(int breite, int hoehe) {
            JFrame neu = new JFrame("Spielfeld");
            this.breiteSpielfeld = breite;
            this.hoeheSpielfeld = hoehe;
            neu.setSize(breite,hoehe);
            neu.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            neu.add(new MeinPanel());
            neu.setVisible(true);
        }
        
        
        public static void main(String[] args) {
            Spielbrett aufruf = new Spielbrett(700,500);
            //aufruf.add(new MeinPanel());
            //aufruf.setSize(700,500);
            //aufruf.setVisible(true);
        }
        
    }

    Gruß schiese
     

  7. #7
    Der Wolf Der Wolf ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Beiträge
    153
    Hi,

    deine Klasse Spielbrett erbt ja von JFrame, ist also schon selbst ein eigenes Frame. Wenn du also den Konstruktor der Klasse aufrufst, wird hier schonmal ein Frame erzeugt, da jede Instanz der Klasse Spielbrett ein Frame ist. Auf diesem Frame, setzt du dann auch die Höhe und die Breite. Zusätzlich erzeugst du im Konstruktor aber mit

    Code java:
    1
    2
    
    JFrame neu = new JFrame("Spielfeld");
    neu.setSize(...);

    ein weiteres Spielfeld, was du dann auch anzeigst.
    Eigentlich müsste es bei dir eher folgendermaßen aussehen.

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
     
    public class Spielbrett extends JFrame {
     
      public int breiteSpielfeld;
      public int hoeheSpielfeld;
     
      public Spielbrett(int breite, int hoehe) {
        this.setSize(new Dimension(breite, hoehe);
        this.setTitle("Spielbrett");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.getContentPane.add(new MeinPanel());
        this.pack();
      }
     
      public static void main(String[] args) {
         Spielbrett brett = new Spielbrett(700, 500);
      }
     
     
    }

    Das sollte eigentlich funktionieren. Ich hab den Code allerdings gerade per Hand ohne Testen aus dem Kopf geschrieben, also keine 100%ige Garantie und Geld zurück gibt es eh nicht

    Gruß
    Der Wolf
    Geändert von Der Wolf (30.08.10 um 09:10 Uhr) Grund: Typo
    schiese bedankt sich. 

  8. #8
    Registriert seit
    Oct 2005
    Beiträge
    277
    Hi,
    habe es auch gerade hinbekommen. Habe es ohne this. Beide Varianten funktionieren aber.

    Vielen Dank, schiese
     

Ähnliche Themen

  1. Fokusmanagement bei mehreren JFrames bzw. JWindows
    Von barsiq im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 0
    Letzter Beitrag: 31.05.10, 11:29
  2. Oberklasse für gleiche JFrames
    Von -Tom-Tom- im Forum Java Grundlagen
    Antworten: 4
    Letzter Beitrag: 10.05.09, 16:33
  3. JFrames transparent machen
    Von moemaster im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 9
    Letzter Beitrag: 17.11.08, 07:26
  4. SwingWorker mit JFrames
    Von UnkiDunki im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 0
    Letzter Beitrag: 06.04.08, 23:30
  5. Maximieren eines JFrames->Layoutproblem
    Von AKST im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 8
    Letzter Beitrag: 23.09.04, 20:13