ERLEDIGT
JA
JA
ANTWORTEN
20
20
ZUGRIFFE
1962
1962
EMPFEHLEN
-
Hallo!
ich will auf meinem Frame eine Linie ziehen. Das klappt eigentlich auch das problem ist nur das die Linie kurz gezeichnet wird und dann irgendwie verschwindet...
hier mein Code:
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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
package UnserSudoku; import java.awt.Container; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Line2D; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JTextField; public class SudoFrame extends JFrame{ public int feldlänge = 9; public int[][] array = new int[feldlänge][feldlänge]; public JTextField tf[][] = new JTextField[feldlänge][feldlänge]; public JButton bt_start = new JButton("Start"); public Font font = new Font("SansSerif", Font.BOLD, 14); public SudoFrame(){ Container GUI = getContentPane(); GUI.setLayout(null); for(int zeilen = 0; zeilen < feldlänge; zeilen++){ for(int spalten = 0; spalten < feldlänge; spalten++){ tf[zeilen][spalten] = new JTextField(); tf[zeilen][spalten].setDocument(new Sudo_TextFeld_Begrenzung(1)); tf[zeilen][spalten].setHorizontalAlignment(JTextField.CENTER); add(tf[zeilen][spalten]); } } int pos_x = 10; int pos_y = 10; int hoehe = 25; int breite = 25; int zähler = 0; for(int zeilen = 0; zeilen < feldlänge; zeilen++){ for(int spalten = 0; spalten < feldlänge; spalten++){ tf[zeilen][spalten].setBounds(pos_x, pos_y, hoehe, breite); pos_x = pos_x + 35; zähler++; if(zähler == 9){ pos_x = 10; pos_y = pos_y + 35; zähler = 0; } } } } public int[][] getGet2DimArray(){ for(int zeilen = 0; zeilen < feldlänge; zeilen++){ for(int spalten = 0; spalten < feldlänge; spalten++){ array[zeilen][spalten] = Integer.parseInt(tf[zeilen][spalten].getText()); } } return array; } public void anzeigen(boolean bool){ setResizable(false); setTitle("Sudoku Löser"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(330, 350); setVisible(bool); Graphics ga = getRootPane().getGraphics(); drawLine(ga); setVisible(bool); } public void drawLine(Graphics g){ Graphics2D g2D = (Graphics2D)g; g2D.draw(new double+java.sun.com&btnI=I%27m%20Feeling%20Lucky">Line2D.Double(10, 10, 100, 2)); } }
Hab ihr mir vllt nen Tip?
MfG
Saban
-
Die Linie wird gezeichnet aber dann verschwindet sie plötzlich... Also beim Aufbau des Frames sieht man den Strich doch der ist dann sofort wieder weg (wird nicht mal ne Sekunde lang angezeigt!)
MfG
Saban
-
Ich glaube (bin mir nicht ganz sicher), dass es daran liegt dass du die Linie in einer eigenen Methode zeichnest und diese dann bei einem repaint() nicht aufgerufen wird. Deswegen solltest du die paint()-Methode deines Panels überschreiben.
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13
... this.setContentPane(new JPanel() { public void paint(Graphics g) { super.paint(g); Graphics2D g2D = (Graphics2D)g; g2D.draw(new double+java.sun.com&btnI=I%27m%20Feeling%20Lucky">Line2D.Double(10, 10, 100, 2)); } }); ...
Allerdings ungetestet.Handlanger des Dr. Ex1tus
Ich kenne Matzes dunkles Geheimnis ! oO
o
L_/
OL
This is Schäuble. Copy Schäuble into your signature to help him on his way to Überwachungsstaat.
Hallo Nuray!
-
Hi Hammet!
danke für deinen Tip! Ich habs ausprobiert das zeichnen klappt jetzt nur jetzt werden die TextFelder nicht mehr angezeigt nur noch der Strich
MfG
Saban
-
Was genau hast du denn geändert?
Hast du meinen Code einfach nur am Ende deines Codes eingefügt?
Du musst darauf achten, dass du dein ContentPane nicht überschreibst. Ein bisschen Code wäre nicht schlecht.
Handlanger des Dr. Ex1tus
Ich kenne Matzes dunkles Geheimnis ! oO
o
L_/
OL
This is Schäuble. Copy Schäuble into your signature to help him on his way to Überwachungsstaat.
Hallo Nuray!
-
Sorry! Bitte:
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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
package UnserSudoku; import java.awt.Container; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Line2D; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; public class Sudo_Frame extends JFrame{ public int feldlänge = 9; public int[][] array = new int[feldlänge][feldlänge]; public JTextField tf[][] = new JTextField[feldlänge][feldlänge]; public JButton bt_start = new JButton("Start"); public Font font = new Font("SansSerif", Font.BOLD, 14); public JPanel panel = new JPanel(); public Sudo_Frame(){ panel.setLayout(null); for(int zeilen = 0; zeilen < feldlänge; zeilen++){ for(int spalten = 0; spalten < feldlänge; spalten++){ tf[zeilen][spalten] = new JTextField(); tf[zeilen][spalten].setDocument(new Sudo_TextFeld_Begrenzung(1)); tf[zeilen][spalten].setHorizontalAlignment(JTextField.CENTER); panel.add(tf[zeilen][spalten]); } } add(panel); int pos_x = 10; int pos_y = 10; int hoehe = 25; int breite = 25; int zähler = 0; for(int zeilen = 0; zeilen < feldlänge; zeilen++){ for(int spalten = 0; spalten < feldlänge; spalten++){ tf[zeilen][spalten].setBounds(pos_x, pos_y, hoehe, breite); pos_x = pos_x + 35; zähler++; if(zähler == 9){ pos_x = 10; pos_y = pos_y + 35; zähler = 0; } } } } public int[][] getGet2DimArray(){ for(int zeilen = 0; zeilen < feldlänge; zeilen++){ for(int spalten = 0; spalten < feldlänge; spalten++){ array[zeilen][spalten] = Integer.parseInt(tf[zeilen][spalten].getText()); } } return array; } public void anzeigen(boolean bool){ setResizable(false); setTitle("Sudoku Löser"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(330, 350); setVisible(bool); this.setContentPane(new JPanel() { public void paint(Graphics g) { super.paint(g); Graphics2D g2D = (Graphics2D)g; g2D.draw(new double+java.sun.com&btnI=I%27m%20Feeling%20Lucky">Line2D.Double(10, 10, 100, 2)); } }); setVisible(true); } }
MfG
Saban
-
Wie vermutet, du addest in deinem Konstruktor deine Texfelder auf dein ContentPane und dann überschreibst du dieses mit einem neuen JPanel in deiner anzeigen-Methode.
Du musst die paint_methode überschreiben, bevor du Komponenten auf das Panel legst.
Zudem, solltest du den Code aus der Paint-Methode (bis auf das super) in eine eigenen Methode packen und diese in der Paint-methode aufrufen, allein der Übersichtlichkeit und Wartbarkeit halber.Handlanger des Dr. Ex1tus
Ich kenne Matzes dunkles Geheimnis ! oO
o
L_/
OL
This is Schäuble. Copy Schäuble into your signature to help him on his way to Überwachungsstaat.
Hallo Nuray!
-
Hi,
überschreibe doch einfach mal die paintComponent-Methode, also einfach nur den Namen austauschen und alles wird gut
-
Hi!
Danke jetzt geht alles! Kann man den Strich auch irgendwie dicker zeichnen lassen?
MfG
Saban
-
Benutz doch einfach fillRect(), damit solltest du beliebig dicke "Linien" zeichnen können

Und denk dran, wenn das Problem gelöst ist, den Thread als erledigt markieren und gegebenenfalls die Hilfe bewerten
Handlanger des Dr. Ex1tus
Ich kenne Matzes dunkles Geheimnis ! oO
o
L_/
OL
This is Schäuble. Copy Schäuble into your signature to help him on his way to Überwachungsstaat.
Hallo Nuray!
-
Also der Strich ist jetzt zwar dicker aber die Anzeige der TextFelder ist jetzt völlig chaotisch und falsch...

Mein Code:
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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
package UnserSudoku; import java.awt.Container; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Line2D; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; import com.sun.org.apache.bcel.internal.generic.NEW; import sun.reflect.ReflectionFactory.GetReflectionFactoryAction; public class Sudo_Frame extends JFrame{ public int feldlänge = 9; public int[][] array = new int[feldlänge][feldlänge]; public JTextField tf[][] = new JTextField[feldlänge][feldlänge]; public JButton bt_start = new JButton("Start"); public Font font = new Font("SansSerif", Font.BOLD, 14); public JPanel panel = new JPanel(); public Sudo_Frame(){ panel.setLayout(null); for(int zeilen = 0; zeilen < feldlänge; zeilen++){ for(int spalten = 0; spalten < feldlänge; spalten++){ tf[zeilen][spalten] = new JTextField(); tf[zeilen][spalten].setDocument(new Sudo_TextFeld_Begrenzung(1)); tf[zeilen][spalten].setHorizontalAlignment(JTextField.CENTER); panel.add(tf[zeilen][spalten]); } } add(panel); int pos_x = 10; int pos_y = 10; int hoehe = 25; int breite = 25; int zähler = 0; for(int zeilen = 0; zeilen < feldlänge; zeilen++){ for(int spalten = 0; spalten < feldlänge; spalten++){ tf[zeilen][spalten].setBounds(pos_x, pos_y, hoehe, breite); pos_x = pos_x + 35; zähler++; if(zähler == 9){ pos_x = 10; pos_y = pos_y + 35; zähler = 0; } } } } public int[][] getGet2DimArray(){ for(int zeilen = 0; zeilen < feldlänge; zeilen++){ for(int spalten = 0; spalten < feldlänge; spalten++){ array[zeilen][spalten] = Integer.parseInt(tf[zeilen][spalten].getText()); } } return array; } public void anzeigen(boolean bool){ setResizable(false); setTitle("Sudoku Löser"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(330, 350); setVisible(bool); Graphics ga = panel.getGraphics(); paint(ga); setVisible(true); } public void paint(Graphics g) { super.paint(g); g.fillRect(10,135,315,2); } }
MfG
Saban
-
Bei mir schaut es genau so aus.
Was ist daran falsch?
Achja und wozu dient dein boolean in der anzeigen-Methode?
Handlanger des Dr. Ex1tus
Ich kenne Matzes dunkles Geheimnis ! oO
o
L_/
OL
This is Schäuble. Copy Schäuble into your signature to help him on his way to Überwachungsstaat.
Hallo Nuray!
-
Also das anzeigen war mal ne Methode zum ein und ausbleden des Frames dann hab ich einfach mal alles da rein geschmissen zum Testen

Und bei mir kommt mal keine Fehlermeldung dann wird aber auch kein Strich gezeichnet und dann kommt doch mal eine und zwar
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at javax.swing.BufferStrategyPaintManager.flushAccumulatedRegion(Unknown Source) at javax.swing.BufferStrategyPaintManager.endPaint(Unknown Source) at javax.swing.RepaintManager.endPaint(Unknown Source) at javax.swing.JComponent.paint(Unknown Source) at java.awt.GraphicsCallback$PaintCallback.run(Unknown Source) at sun.awt.SunGraphicsCallback.runOneComponent(Unknown Source) at sun.awt.SunGraphicsCallback.runComponents(Unknown Source) at java.awt.Container.paint(Unknown Source) at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source) at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source) at javax.swing.RepaintManager.seqPaintDirtyRegions(Unknown Source) at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source) at java.awt.event.InvocationEvent.dispatch(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source)
wenn ich aber hinter des zweite setVisible(bool) nochmal eins setze wird nie ein Strich gezeichnet aber der Fehler kommt nicht mehr.
Deine Anzeige will ich ja eigentlich erreichen...
MfG
Saban
-
Hi,
verwende für Linien die dicker sein sollen, oder ein Muster (z.B. gepunktet) aufweisen sollen, lieber Strokes.
Takidoso
-
Es geht immer noch nicht des gibts doch garnicht



Mein Code:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14
public void anzeigen(boolean bool){ setVisible(bool); Graphics ga = panel.getGraphics(); zeichnen(ga); setVisible(bool); } public void zeichnen(Graphics g) { super.paint(g); Graphics2D g2 = (Graphics2D) g; g2.setStroke( new BasicStroke( 19)); }
hier nochmal mein Problem als Bild
http://img23.imageshack.us/img23/6246/sudoku.th.png
MfG
Saban
Ähnliche Themen
-
Linie zeichnen?
Von Jacizzle im Forum .NET Windows FormsAntworten: 3Letzter Beitrag: 17.04.08, 23:06 -
Linie zeichnen
Von cytrics im Forum Flash PlattformAntworten: 2Letzter Beitrag: 09.05.07, 10:44 -
Linie zeichnen?
Von Christoph1972 im Forum .NET Grafik und SoundAntworten: 6Letzter Beitrag: 28.09.05, 13:27 -
Linie zeichnen
Von darko-micic im Forum C/C++Antworten: 9Letzter Beitrag: 13.04.05, 21:22 -
Linie Zeichnen
Von Danjal im Forum Flash PlattformAntworten: 7Letzter Beitrag: 30.03.05, 22:07





Zitieren
Login





