4Danke
ERLEDIGT
JA
JA
ANTWORTEN
7
7
ZUGRIFFE
386
386
EMPFEHLEN
-
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
-
Hi,
füge mal unter dem f.add(neu) ein f.pack() ein und führe das Programm dann aus.
Gruß
Der Wolf
-
29.08.10 14:32 #3
- Registriert seit
- Apr 2010
- Beiträge
- 22
es langt auch, wenn du dein
als letzes aufrufst...also erst nachdem du den JButton geaddet hast!Code :1
f.setVisible(true);
-
29.08.10 14:34 #4
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.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 ;)
-
Vielen Dank, das war es.
@Akeshihiro ist ja eigentlich auch logisch. Vielen Dank
Gruß schieseGeändert von schiese (29.08.10 um 14:54 Uhr)
-
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
-
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
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 WolfGeändert von Der Wolf (30.08.10 um 09:10 Uhr) Grund: Typo
-
Hi,
habe es auch gerade hinbekommen. Habe es ohne this. Beide Varianten funktionieren aber.
Vielen Dank, schiese
Ähnliche Themen
-
Fokusmanagement bei mehreren JFrames bzw. JWindows
Von barsiq im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 0Letzter Beitrag: 31.05.10, 11:29 -
Oberklasse für gleiche JFrames
Von -Tom-Tom- im Forum Java GrundlagenAntworten: 4Letzter Beitrag: 10.05.09, 16:33 -
JFrames transparent machen
Von moemaster im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 9Letzter Beitrag: 17.11.08, 07:26 -
SwingWorker mit JFrames
Von UnkiDunki im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 0Letzter Beitrag: 06.04.08, 23:30 -
Maximieren eines JFrames->Layoutproblem
Von AKST im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 8Letzter Beitrag: 23.09.04, 20:13





Zitieren
Login




