paint(Graphics g) im BorderLayout einem JPanel zuordnen &amp

Status
Nicht offen für weitere Antworten.
J

jaggi12

Gast
Hallo!

ich hab eine Frage bezüglich der paint(Graphics g) Methode. Und zwar hab ich mir einen

Frame erstellt und diesem ein BorderLayout gemacht. In jedem bereich des BorderLayouts

(aslo Center, North, South....) befindet sich ein JPanel. Da ich den Frame ganz flexibel

gestallten will bzw. die einzelnen Elemente auch noch verschoben werden sollen. Möchte ich

die ELemente, die ich mir mit Paint erstellt habe in ein Panel setzen und nicht direkt in

den Frame rein.

In etwa soll es so ausschauen, ich geb mal ein Beispiel:
Code:
....

JComponent jc = (JComponent)getContentPane();
...


 void initLayout()
    {
	 jc.setLayout( new BorderLayout( ) );

         JPanel southPnl = new JPanel();
         JLabel label1 = new JLabel("Mal sehen");
         southPnl.add(label1);
         jc.add("South", southPanel);

         JPanel eastPnl = new JPanel();
         eastPnl.add(// hier soll nun das erste Element der Paintsachen geaddet werden,     

                 //  also g.drawString(bildeins,35,190));

  public void paint(Graphics g)
    {
        g.setColor(Color.blue);
        
        g.drawString(bildeins,35,190);
        g.drawString(bildzwei,115,190);
        g.drawString(labeldrei,195,190);
        g.drawString(stringvier,275,190);
        g.drawString(zahlfuenf,355,190);
    }

Wie bekomm ich das denn hin? Dass das so klappt?
 

dotlens

Top Contributor
warum arbeitest du mit drawString und fügst den Paneln nicht einfach JLabels hinzu??
Ansonsten verwende getGraphics() von JPanel, um das passende Graphics Objekt zu bekommen.
 
J

jaggi12

Gast
na gut ich geb zu, das Beispiel ist nicht so passend,
dann möcht ich halt das hier in das JPanel adden

Code:
...
g.setColor(Color.BLUE);            
    for(int i=0; i<10; i++)
     {
        g.fillRoundRect(50+110*i,60,80,80,11,11);
      }
...
 

dotlens

Top Contributor
dotlens hat gesagt.:
verwende getGraphics() von JPanel, um das passende Graphics Objekt zu bekommen.
Code:
JPanel panel1 = new JPanel();
Grahpics g1 = panel1.getGraphics();
for(int i=0; i<10; i++){
   g1.fillRoundRect(50+110*i,60,80,80,11,11);
}
 
J

jaggi12

Gast
Hi, und wie würde das dann genau aussehen, wenn getGraphics() von JPanel nehme?
Mach ich das dann so?

Code:
void initLayout() 
    { 
    jc.setLayout( new BorderLayout( ) ); 

         JPanel southPnl = new JPanel(); 
         JLabel label1 = new JLabel("Mal sehen"); 
         southPnl.add(label1); 
         jc.add("South", southPanel); 

         JPanel eastPnl = new JPanel(); 

}

 public void paint(Graphics g) 
    { 
        g.setColor(Color.blue); 
        
        for(int i=0; i<10; i++) 
     { 
        g.fillRoundRect(50+110*i,60,80,80,11,11); 
      } 

public Graphics getGraphics()
    {
	return ??? // wie greif ich da auf mein paint zu?
    }


    }
 

dotlens

Top Contributor
Eher so:
Code:
void initLayout() 
    { 
    jc.setLayout( new BorderLayout( ) ); 

         JPanel southPnl = new JPanel(); 
         JLabel label1 = new JLabel("Mal sehen"); 
         southPnl.add(label1); 
         jc.add("South", southPanel); 

         JPanel eastPnl = new JPanel(); 

         Graphics g = southPnl.getGraphics();
         g.setColor(Color.blue); 
        
         for(int i=0; i<10; i++) { 
             g.fillRoundRect(50+110*i,60,80,80,11,11); 
         } 
}
Jetzt zeichnet er alles in den southPanel, wenn du noch irgendwo ander zeichnen möchtest musst du das Graphics Objekt von diesem Panel auch verwenden...
 
J

jaggi12

Gast
...
JPanel panel1 = new JPanel();
Grahpics g1 = panel1.getGraphics();
for(int i=0; i<10; i++){
g1.fillRoundRect(50+110*i,60,80,80,11,11);
}

okay, ich hab es jetzt so gemacht,

somit schaut bei mir der code nun so aus:

Code:
.... 

JComponent jc = (JComponent)getContentPane(); 
... 


void initLayout() 
    { 
    jc.setLayout( new BorderLayout( ) ); 

         JPanel southPnl = new JPanel(); 
         JLabel label1 = new JLabel("Mal sehen"); 
         southPnl.add(label1); 
         jc.add("South", southPanel); 

         JPanel panel1 = new JPanel(); 
Grahpics g1 = panel1.getGraphics(); 
for(int i=0; i<10; i++)
{ 
   g1.fillRoundRect(50+110*i,60,80,80,11,11); 
}


jc.add("East", panel1);

}

public void paint(Graphics g)
    {
        g.setColor(Color.BLUE);           
        for(int i=0; i<5; i++)
        {
            g.fillRoundRect(35+80*i,305,60,60,7,7);
        }
}

// so sieht jetzt das gesamte gebilde aus, warum krieg ich jetzt noch ne NulPointerException? Hab ich was vergessen, oder falsch gemacht?
 
J

jaggi12

Gast
void initLayout()
{
jc.setLayout( new BorderLayout( ) );

JPanel southPnl = new JPanel();
JLabel label1 = new JLabel("Mal sehen");
southPnl.add(label1);
jc.add("South", southPanel);

JPanel eastPnl = new JPanel();

Graphics g = southPnl.getGraphics();
g.setColor(Color.blue);

for(int i=0; i<10; i++) {
g.fillRoundRect(50+110*i,60,80,80,11,11);
}
}


die Exception bleibt, muss ich noch irgendwas an der public paint (Graphics g) machen
 
J

jaggi12

Gast
okay, jetzt hier mal der ganze Beispielcode, lässt sich ausführen, habs auch schon ohne diese getGraphics versucht, woran liegt es denn dann jetzt?

Code:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class ab extends JFrame
{
	private JComponent jc = (JComponent)getContentPane();
	ab()
	{
	    super();
	        setTitle("Test");
	        setSize(800, 478);        
	        setForeground(Color.blue);
	        setBackground(Color.white);  
	        initLayout();
	        setLocationRelativeTo(null);
	        setVisible(true);
	        setResizable(true);        
	    }

void initLayout() 
{ 
jc.setLayout( new BorderLayout( ) ); 

     JPanel southPnl = new JPanel(); 
     JLabel label1 = new JLabel("Mal sehen"); 
     southPnl.add(label1); 
     jc.add("South", southPnl); 

     JPanel eastPnl = new JPanel(); 

     Graphics g = eastPnl.getGraphics(); 
     g.setColor(Color.blue); 
    
     for(int i=0; i<10; i++) { 
         g.fillRoundRect(50+110*i,60,80,80,11,11); 
     } 
     jc.add("East", eastPnl);
}



public static void main(String[] args) {
	ab frame = new ab();
	frame.setSize(800, 300);
	frame.setLocationRelativeTo(null);
	frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
	frame.setVisible(true);
}
}
 

dotlens

Top Contributor
erstmal: Klassen schreibt man gross

also ich verstehe gerade nicht wieso getGraphics() null zurück liefert. Steh heute aber so oser so aufm schlauch.
Kannst aber auch eigene Klassen schreiben, welche von JPanel erben, und in diesen die paintComponent(Graphics g) methode überschreiben. Dann kannst du das entsprechende Graphics Objekt verwenden.
 
J

jaggi12

Gast
okay, dann schreib ich die klasse mal lieber groß....

gut mhm, ich kann mir nicht wirklich vorstellen geschweige denn umsetzen was du meinst... ich soll also, mir nen JPanel erstellen davon ein neues erstellen und dann irgendwie paintComponent(Graphics g) überschreiben, oder ?
 

dotlens

Top Contributor
Klasse:
Code:
class meinPanel extends JPanel {

	protected void paintComponent(Graphics g) {
		g.setColor(Color.blue);

		for (int i = 0; i < 10; i++) {
			g.fillRoundRect(50 + 110 * i, 60, 80, 80, 11, 11);
		}
	}
}
instanzieren:
Code:
this.getContentPane().add(new meinPanel());
 
J

jaggi12

Gast
okay danke jetzt hab ich es so gemacht,

Code:
import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class Test extends JFrame
{
	private JComponent jc = (JComponent)getContentPane();
	Test()
	{
	    super();
	        setTitle("Test");
	        setSize(800, 478);        
	        setForeground(Color.blue);
	        setBackground(Color.white);  
	        initLayout();
	        setLocationRelativeTo(null);
	        setVisible(true);
	        setResizable(true);        
	    }

void initLayout() 
{ 
jc.setLayout( new BorderLayout( ) ); 

     JPanel northPnl = new JPanel(); 
     JLabel label1 = new JLabel("Mal sehen"); 
     southPnl.add(label1); 
     jc.add("North", northPnl); 

     JPanel eastPnl = new JPanel(); 
     
     jc.add("South", this.getContentPane().add(new myPanel()));
}

public static void main(String[] args) {
	Test frame = new test();
	frame.setSize(800, 300);
	frame.setLocationRelativeTo(null);
	frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
	frame.setVisible(true);
}
}

Code:
import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JPanel;

class myPanel extends JPanel {


	   protected void paintComponent(Graphics g) 
	   {   
        g.setColor(Color.blue);           
        for(int i=0; i<5; i++)
        {
            g.fillRoundRect(35+80*i,35,60,60,7,7);
        }
        
        g.setColor(Color.green);            
        for(int i=0; i<5; i++)
        {
            g.drawRoundRect(35+80*i,35,60,60,7,7);
        }

der malt da einfach nichts....
 
J

jaggi12

Gast
aber ich sag doch in der Testklasse, das es in den South gelegt werden soll, wieso macht er es denn dann nicht schon automatisch?

also soll ich im mypanel jetzt so etwas noch einfügen, ja?

mypanel.setSize(x,y);
 

Wildcard

Top Contributor
Wenn du einen Layoutmanager verwendest musst du über setPreferreredSize gehen.
Die ist bei MyPanel natürlich 0, da ja keine Komponenten eingefügt wurden.
Weil du in diesem Panel nur zeichnest überschreib am besten die getPreferredSize() Methode, und lass
sie den Wert zurückgeben den du möchtest.
 
J

jaggi12

Gast
also hier an der Stelle, ja?

Code:
import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JPanel;

public class myPanel extends JPanel {
	  void getPreferredSize()
	{
		return 200, 100; 
	}

	   protected void paintComponent(Graphics g) 
	   {
 
        
        g.setColor(Color.blue);            // Weiße Würfelflächen
        for(int i=0; i<5; i++)
        {
            g.fillRoundRect(35+80*i,35,60,60,7,7);
        }
        
        g.setColor(Color.green);            
        for(int i=0; i<5; i++)
        {
            g.drawRoundRect(35+80*i,35,60,60,7,7);
        }
   }
}

so oder wie?
 

Wildcard

Top Contributor
Wo ist egal, aber das ist Blödsinn:
Code:
     void getPreferredSize() 
   { 
      return 200, 100; 
   }
Code:
public Dimension getPreferredSize()
{
      return new Dimension(200,100);
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Furtano AWT paint braucht ein Graphics Objekt ? AWT, Swing, JavaFX & SWT 2
T Dialog ohne Frame, direktes paint in graphics AWT, Swing, JavaFX & SWT 5
J getFontMetrics außerhalb von paint(Graphics g) AWT, Swing, JavaFX & SWT 8
G 2x Graphics in einer paint() miteinander verbinden AWT, Swing, JavaFX & SWT 11
U paint(Graphics g) überschreiben? AWT, Swing, JavaFX & SWT 7
G JInternalFrame und paint(Graphics g) AWT, Swing, JavaFX & SWT 5
B paint( Graphics g) AWT, Swing, JavaFX & SWT 5
R JFrame und paint(Graphics g) AWT, Swing, JavaFX & SWT 5
H 2D-Grafik Problem mit Paint AWT, Swing, JavaFX & SWT 1
frager2345 Warum paintComponent hier und nicht paint AWT, Swing, JavaFX & SWT 2
U Was ist der Unterschied von paint und paincomponent? AWT, Swing, JavaFX & SWT 3
L 2D-Grafik Swing paint|paintComponent AWT, Swing, JavaFX & SWT 2
krgewb 2D-Grafik paint-Methode wird zu oft ausgeführt AWT, Swing, JavaFX & SWT 5
S Zeichen ohne paint-Methode AWT, Swing, JavaFX & SWT 2
J Swing Wann brauche ich @Override vor der paint()-Methode? AWT, Swing, JavaFX & SWT 1
G Eine paint-Methode, 2 Welten? AWT, Swing, JavaFX & SWT 3
H Swing + Paint: Mehrere Objekte zeichnen lassen AWT, Swing, JavaFX & SWT 3
A paint-Methode aufrufen AWT, Swing, JavaFX & SWT 13
Xanny 2D-Grafik Beginner! Probleme mit Swing, Gprahics class und paint AWT, Swing, JavaFX & SWT 13
L Berechnungen in paint AWT, Swing, JavaFX & SWT 8
S Grafik: Programm kommt nicht zur paint()-Methode AWT, Swing, JavaFX & SWT 6
W Paint-Methode in anderer Klasse funktioniert nicht AWT, Swing, JavaFX & SWT 7
S 2 Paint-Methoden in einer Klasse ? AWT, Swing, JavaFX & SWT 2
J zwei Paint methoden in einer Klasse AWT, Swing, JavaFX & SWT 3
P Paint und paintComponent AWT, Swing, JavaFX & SWT 12
F 2D-Grafik Was ruft die Paint - Methode auf ? AWT, Swing, JavaFX & SWT 2
S JButton u. Label auf paint-Methode AWT, Swing, JavaFX & SWT 1
S 2 paint-Methoden in einer Klasse ? AWT, Swing, JavaFX & SWT 2
S Paint Methode ohne implements JPanel AWT, Swing, JavaFX & SWT 1
S Farbe ändern bei der paint-Methode AWT, Swing, JavaFX & SWT 5
J ActionListener soll auf paint() Methode zugreifen AWT, Swing, JavaFX & SWT 1
J Problem mit der paint Methode AWT, Swing, JavaFX & SWT 0
Junb 2D-Grafik paint() Methode bugt? AWT, Swing, JavaFX & SWT 2
C JFrame paint ohne hintergrund nutzen AWT, Swing, JavaFX & SWT 6
I Paint-Methode von nicht statischen Objekten aufrufen AWT, Swing, JavaFX & SWT 3
A Swing Paint mit Button Clear den Hintergrund säubern um wieder zeichnen zu können AWT, Swing, JavaFX & SWT 2
K 2D-Grafik Paint - Wie binde ich repaint ein? AWT, Swing, JavaFX & SWT 8
D JSlider "laggt" nach überschreiben der paint methode AWT, Swing, JavaFX & SWT 2
S paint() verzögern AWT, Swing, JavaFX & SWT 9
K AWT begrenzte anzahl paint aufrufe AWT, Swing, JavaFX & SWT 6
B Infolabel Probleme mit Paint() ? AWT, Swing, JavaFX & SWT 8
L AWT paint mit ArrayList und Iterator AWT, Swing, JavaFX & SWT 3
L Swing 64bit Problem mit paint/paintComponent AWT, Swing, JavaFX & SWT 7
A Paint Methode externer auruf AWT, Swing, JavaFX & SWT 5
T JFrame und paint() AWT, Swing, JavaFX & SWT 5
B Ablauf der paint-Methoden von JComponents AWT, Swing, JavaFX & SWT 20
J AWT Methode paint() AWT, Swing, JavaFX & SWT 4
F 2D-Grafik Hostkomponentengröße in paint AWT, Swing, JavaFX & SWT 2
L JFrame an Paint-Inhalt anpassen AWT, Swing, JavaFX & SWT 6
E Warum übermalt paint das ganze Fenster? AWT, Swing, JavaFX & SWT 15
X Bild via FileChooser in paint-Methode laden AWT, Swing, JavaFX & SWT 2
T paint() wird nicht aufgerufen AWT, Swing, JavaFX & SWT 8
M JMenuBar im Applet und paint AWT, Swing, JavaFX & SWT 9
G paint-Methode kopiert GUI AWT, Swing, JavaFX & SWT 14
H paint überlappend AWT, Swing, JavaFX & SWT 5
E paint AWT, Swing, JavaFX & SWT 3
H Swing paint() von JPanel wird nicht aufgerufen AWT, Swing, JavaFX & SWT 10
L AWT Paint(g) im Listener aufrufen AWT, Swing, JavaFX & SWT 2
S JCheckBox Paint AWT, Swing, JavaFX & SWT 7
F AWT Probleme mit der paint() methode AWT, Swing, JavaFX & SWT 2
C Unterschiedlicher Aufruf der paint() Methode ? (AWT/Swing) AWT, Swing, JavaFX & SWT 2
L Problem mit paint Methode und Bild AWT, Swing, JavaFX & SWT 7
F Swing Paint mit Canvas Element AWT, Swing, JavaFX & SWT 35
K AWT paint wird nicht aufgerufen AWT, Swing, JavaFX & SWT 7
R LayoutManager Image Paint + Text Panel AWT, Swing, JavaFX & SWT 10
F paint-Methode des JComboboxEditorComponent AWT, Swing, JavaFX & SWT 2
S Threads in einen Frame zeichnen lassen (Paint()?!) AWT, Swing, JavaFX & SWT 5
radiac Swing JFrame - paint(g) - FrameObjects bei activeRendering AWT, Swing, JavaFX & SWT 3
I AWT paint() in MouseEvent aufrufen klappt nicht AWT, Swing, JavaFX & SWT 8
T paint() wird zweimal ausgeführt AWT, Swing, JavaFX & SWT 6
hdi Swing JLabel & paint-Methode gemixt - wie schlimm wirklich? AWT, Swing, JavaFX & SWT 5
N Paint methode anhalten und neustarten AWT, Swing, JavaFX & SWT 5
H AWT Wann ist paint() fertig? AWT, Swing, JavaFX & SWT 7
R [gelöst]Fenster schließen - trotz Endlosschleife in der Paint-Methode? AWT, Swing, JavaFX & SWT 3
W Steuerelemente und paint() in einem JPanel AWT, Swing, JavaFX & SWT 3
M Allgemeines zur paint Methode AWT, Swing, JavaFX & SWT 5
M AWT Component/Canvas erzeugt unerwünschten Rahmen bei paint AWT, Swing, JavaFX & SWT 3
G Probleme mit repaint / paint AWT, Swing, JavaFX & SWT 6
A paint()-Methode für Videoexport nutzen AWT, Swing, JavaFX & SWT 2
K repaint() ruft paint() nicht auf AWT, Swing, JavaFX & SWT 14
J Canvas / paint() AWT, Swing, JavaFX & SWT 2
bugmenot paint() verzögert ausgeführt? AWT, Swing, JavaFX & SWT 4
S paint() in anderen Methoden AWT, Swing, JavaFX & SWT 5
D Paint() Methode aus einer anderen Klasse aufrufen AWT, Swing, JavaFX & SWT 6
H paint verwenden AWT, Swing, JavaFX & SWT 3
S java.awt.Component und paint() AWT, Swing, JavaFX & SWT 4
A Paint funktioniert nicht richtig AWT, Swing, JavaFX & SWT 7
L Dynamisches Ändern der Größe in JPanel mit paint()-Methode AWT, Swing, JavaFX & SWT 8
G JScrollPane mit "paint" scrollt nicht AWT, Swing, JavaFX & SWT 2
C paint-Methode überschreiben AWT, Swing, JavaFX & SWT 19
hdi meine paint-methode macht faxen? AWT, Swing, JavaFX & SWT 21
T Variable Menge an Bildern außerhalb paint() zeichnen? AWT, Swing, JavaFX & SWT 2
G Paint und Buttons AWT, Swing, JavaFX & SWT 8
G JFrame JPanel und Paint(Image)? AWT, Swing, JavaFX & SWT 6
S Programm aufgrund von paint() zu langsam AWT, Swing, JavaFX & SWT 18
G paint() wird aufgerufen, aber nicht angezeigt AWT, Swing, JavaFX & SWT 10
M Probleme mit paint() aus JFrame AWT, Swing, JavaFX & SWT 2
G paint() Methode aus anderer klasse aufrufen? AWT, Swing, JavaFX & SWT 6
G Frage zum paint Prozess AWT, Swing, JavaFX & SWT 3
D JPanel und Paint AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen


Oben