AWT Horizontale Linie in einem Panel

Cedist

Mitglied
Hallo, Ich würde gerne eine horinzontale Linie in einem meiner Panels zeichen, nur weiss ich nicht wie ich das hin kriegen soll, da ich:
Java:
public void paint(Graphics g) {
   g.drawLine();
}

nicht in meiner Methode, in der das Panel erstellt wird, verwenden kann.

Danke!

Gruss
Cedist
 
Möchstest Du die Linie wirklich selbst zeichnen?
1. bei Swing Komponenten überschreibt die
Code:
paintComponent(Graphics)
2. sollte der erste Aufruf darin
Code:
super.paintComponents(...)
sein
3. gibt es keine Methode
Code:
drawLine()
, nur
Code:
drawLine(int, int, int, int)
in der man die Start- und Zielkoordinaten übergibt.


###Edit### sehe gerade Panel und AWT ==> streiche Component in paint[STRIKE]Component[/STRIKE] , empfehle aber Swing und JPanel
 
Zuletzt bearbeitet:
Ja und nun? Warum kannst du denn nun nicht die Linie in der paintComponent()-Methode zeichnen?
Hat sich das Thema erledigt, oder brauchst du noch Hilfe?
 
SO ich habe jetzt das
Java:
public void paintComponent( Graphics g ){
			super.paintComponents(g);
			g.drawLine(10, 10, 100, 10);
	     
	      }

Aber eclipse sagt mir jetzt :"void is an invalide type for the variable paintComponent"
 
2. sollte der erste Aufruf darin
Code:
super.paintComponents(...)
sein
Der erste Aufruf in
Code:
paintComponent
sollte
Code:
super.paintComponent
sein, nicht
Code:
super.paintComponent[b]s[/b]
. Das "s" ist ein kleiner aber wichtiger Unterschied ;-)

@Cedist: zeig mal deine ganze Klasse, nicht nur diese eine Methode. Meine trübe Glaskugel vermutet, dass du diese Fehlermeldung aufgrund falsch gesetzter Klammern erhälst.
 
Zuletzt bearbeitet von einem Moderator:
Der erste Aufruf in
Code:
paintComponent
sollte
Code:
super.paintComponent
sein, nicht
Code:
super.paintComponent[b]s[/b]
. Das "s" ist ein kleiner aber wichtiger Unterschied ;-)
Sorry, na klar paintComponent ohne s, keine Ahnung wie das s da hin gekommen ist?
 
Java:
public JPanel initUI_sitz() {
		
		public void paintComponent( Graphics g ){
			super.paintComponent(g);
			g.drawLine(10, 10, 100, 10);
	     
	      }
	
		JPanel panel_sitz = new JPanel();
		panel_sitz.setLayout(null);
		panel_sitz.setSize(610, 430);
		panel_sitz.setLocation(30, 300);
		
		//Labels
		JLabel wandlabel = new JLabel("Leinwand");
		wandlabel.setBounds(305, 10, 80, 20);
		
		JLabel r1label = new JLabel("Reihe 1");
		r1label.setBounds(10, 60, 80, 20);
		
		JLabel r2label = new JLabel("Reihe 2");
		r2label.setBounds(10, 95, 80, 20);
		
		JLabel r3label = new JLabel("Reihe 3");
		r3label.setBounds(10, 130, 80, 20);
		
		JLabel r4label = new JLabel("Reihe 4");
		r4label.setBounds(10, 165, 80, 20);
		
		JLabel r5label = new JLabel("Reihe 5");
		r5label.setBounds(10, 200, 80, 20);
		
		JLabel r6label = new JLabel("Reihe 6");
		r6label.setBounds(10, 235, 80, 20);
		
		JLabel r7label = new JLabel("Reihe 7");
		r7label.setBounds(10, 270, 80, 20);
		
		JLabel r8label = new JLabel("Reihe 8");
		r8label.setBounds(10, 305, 80, 20);
		
		JLabel r9label = new JLabel("Reihe 9");
		r9label.setBounds(10, 340, 80, 20);
		
		JLabel r10label = new JLabel("Reihe 10");
		r10label.setBounds(10, 375, 80, 20);
		

                //Panel Add's
		panel_sitz.add(wandlabel);
		panel_sitz.add(r1label);
		panel_sitz.add(r2label);
		panel_sitz.add(r3label);
		panel_sitz.add(r4label);
		panel_sitz.add(r5label);
		panel_sitz.add(r6label);
		panel_sitz.add(r7label);
		panel_sitz.add(r8label);
		panel_sitz.add(r9label);
		panel_sitz.add(r10label);


                panel_sitz.setBorder(BorderFactory.createTitledBorder("Sitzplatz Auswahl"));

		return panel_sitz;
	}
 
Java:
public JPanel initUI_sitz() {
		
		public void paintComponent( Graphics g ){
Du definierst hier eine Methode
Code:
paintComponent
innerhalb einer Methode
Code:
initUI_sitz
das geht nicht. Du musst eine eigene oder evtl. auch anonyme Klasse schreiben die von z.B. JPanel erbt und darin dessen paintComponent überschreiben.
Java:
class MyDrawingPanel extends JPanel {
    public void paintComponent(Graphics g) {
        super.paint...
    }
}

ABER: Willst Du wirklich eine Linie selbst zeichnen? Oder willst Du einfach nur das zwischen irgendwelchen Labels eine Linie angezeigt wird? Letzteres ging viel einfacher z.b. mittels einer Border.

Ausserdem solltest Du dich mal mit Schleifen, Arrays oder Listen z.B. ArrayList beschäftigen - würde Deinen Code um einiges verkürzen und übersichtlicher werden lassen.

###EDIT### Null Layout ist pfui: Schau Dir mal LayoutManager an.
 
ich weis das null-layout böse ist 😛 ich mags trozdem iwie 😉

Ich will einfach so ne Linie(siehe Anhang) wie ich da jetzt mit Paint eingezeichnet hab 😉
Wenns auch anderst geht bitte erklären wie 😉 Danke!
 

Anhänge

  • Capture.JPG
    Capture.JPG
    61,2 KB · Aufrufe: 46

Zurück
Oben