tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
20
ZUGRIFFE
1962
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Saban Saban ist offline Mitglied Gold
    Registriert seit
    Nov 2007
    Beiträge
    220
    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
     

  2. #2
    Saban Saban ist offline Mitglied Gold
    Registriert seit
    Nov 2007
    Beiträge
    220
    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
     

  3. #3
    Avatar von hammet
    hammet hammet ist offline himekishi
    Registriert seit
    Aug 2006
    Ort
    Bayern
    Beiträge
    334
    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!

  4. #4
    Saban Saban ist offline Mitglied Gold
    Registriert seit
    Nov 2007
    Beiträge
    220
    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
     

  5. #5
    Avatar von hammet
    hammet hammet ist offline himekishi
    Registriert seit
    Aug 2006
    Ort
    Bayern
    Beiträge
    334
    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!

  6. #6
    Saban Saban ist offline Mitglied Gold
    Registriert seit
    Nov 2007
    Beiträge
    220
    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
     

  7. #7
    Avatar von hammet
    hammet hammet ist offline himekishi
    Registriert seit
    Aug 2006
    Ort
    Bayern
    Beiträge
    334
    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!

  8. #8
    Avatar von takidoso
    takidoso takidoso ist offline Mitglied Brillant
    Registriert seit
    Aug 2004
    Ort
    Kömigstein
    Beiträge
    911
    Hi,
    überschreibe doch einfach mal die paintComponent-Methode, also einfach nur den Namen austauschen und alles wird gut
     

  9. #9
    Saban Saban ist offline Mitglied Gold
    Registriert seit
    Nov 2007
    Beiträge
    220
    Hi!

    Danke jetzt geht alles! Kann man den Strich auch irgendwie dicker zeichnen lassen?

    MfG
    Saban
     

  10. #10
    Avatar von hammet
    hammet hammet ist offline himekishi
    Registriert seit
    Aug 2006
    Ort
    Bayern
    Beiträge
    334
    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!

  11. #11
    Saban Saban ist offline Mitglied Gold
    Registriert seit
    Nov 2007
    Beiträge
    220
    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
     

  12. #12
    Avatar von hammet
    hammet hammet ist offline himekishi
    Registriert seit
    Aug 2006
    Ort
    Bayern
    Beiträge
    334
    Bei mir schaut es genau so aus.

    Was ist daran falsch?

    Achja und wozu dient dein boolean in der anzeigen-Methode?
    Miniaturansicht angehängter Grafiken Miniaturansicht angehängter Grafiken Linie Zeichnen-sudo.jpg  
     
    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!

  13. #13
    Saban Saban ist offline Mitglied Gold
    Registriert seit
    Nov 2007
    Beiträge
    220
    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
     

  14. #14
    Avatar von takidoso
    takidoso takidoso ist offline Mitglied Brillant
    Registriert seit
    Aug 2004
    Ort
    Kömigstein
    Beiträge
    911
    Hi,
    verwende für Linien die dicker sein sollen, oder ein Muster (z.B. gepunktet) aufweisen sollen, lieber Strokes.

    Takidoso
     

  15. #15
    Saban Saban ist offline Mitglied Gold
    Registriert seit
    Nov 2007
    Beiträge
    220
    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

  1. Linie zeichnen?
    Von Jacizzle im Forum .NET Windows Forms
    Antworten: 3
    Letzter Beitrag: 17.04.08, 23:06
  2. Linie zeichnen
    Von cytrics im Forum Flash Plattform
    Antworten: 2
    Letzter Beitrag: 09.05.07, 10:44
  3. Linie zeichnen?
    Von Christoph1972 im Forum .NET Grafik und Sound
    Antworten: 6
    Letzter Beitrag: 28.09.05, 13:27
  4. Linie zeichnen
    Von darko-micic im Forum C/C++
    Antworten: 9
    Letzter Beitrag: 13.04.05, 21:22
  5. Linie Zeichnen
    Von Danjal im Forum Flash Plattform
    Antworten: 7
    Letzter Beitrag: 30.03.05, 22:07