Linie auf spezielle Area zeichnen

Network

Top Contributor
Hi Community,

kann man eine Linie auf ein spezielles Objekt zeichnen lassen?

Mein Code sieht so aus:
Java:
	public void paint(Graphics g)
	{
		if(( backgroundArea.getGraphics() != null ))
		{
			super.paint(backgroundArea.getGraphics());
			LCX = 0;
			for( int c = 0; c < 60; c++ )
			{
				g.drawLine( LCX, LCPoints.get( c ), LCX+20, LCPoints.get( c+1 ) );
				LCX = LCX + 20;
			}
		}
	}

Nur irgendwie zeichnet der jetzt den ganzen Bereich, mit Hintergrund und allem drum und dran, und setzt ihn genau vor das ursprüngliche Objekt.

Ich möchte aber eig. nur, dass die Linie Auf genau dieses Objekt gezeichnet wird.

Denn:
"backgroundArea" ist ein JPanel, in einem JLayeredPane. Die vorigen Schichten sind durchsichtig.
Hin und wieder mit Buttons versehen. Und wenn ich Beispielsweise einen Button, der gerade zufällig unter einer Linie liegt, mit der Maus anfahre, verschwindet die Linie an der Stelle.


Danke
 

Network

Top Contributor
Kurz: Hä? ???:L
Mittel: Auf einer Component "getGraphics" aufrufen ist fast immer falsch. :noe:
Lang: Morgen vielleicht ;)

Kurz: Linie soll nur auf ein Objekt im Frame gezeichnet werden.(Im Hintergrund, ohne andere sichtbare Objekte zu behindern.)
Mittel: Danke, wenigstens etwas ;)
Lang: gerne ;)

Überschreib doch die Methode paint(java.awt.Graphics) der Klasse der backgroundArea und zeichne die Linien dort.

Ja aber wie füge ich das JPanel dem JLayeredPane hinzu. Muss ich dafür dann auch eine neue Klasse definieren?
 

Network

Top Contributor
Poste am besten mal ein KSKB

Habs versucht, bekomme aber nicht den selben Effekt irgendwie hin, wenns nur einfach gemacht ist.

Ich versuchs aber nochmal zu erklären:

1. Linie wird gezeichnet von Punkt A nach Punkt B.
2. Zwischen Punkt A und Punkt B befindet sich ein Button.
3. Die Linie wird "ÜBER" den button gezeichnet.
4. Sobald man jedoch mit der Maus über den Button drüberfährt, (Der Button leuchtet auf), verschwindet die Linie die vorher auf dem Button drauf war.
5. Jetzt ist eine Lücke in der Linie

Das soll aber nicht so sein, die Linie soll weiterhin bestehen, auch wenn man mit der Maus über den Button fährt!!!

Ende ;)

Und dafür suche ich eine Lösung.
Immernoch verzweifelt.


[Ich hab ja jetzt gelesen, das man bei SwingComponenten "paintComponent()" benutzen soll. jedoch erkennt der Compiler den Befehl "super.paintcomponent(g)" nicht.
Und außerdem hab ich dort "System.out.println("Registered")" geschrieben. Jedoch wird dieser Text nie ausgestrahlt... also wurde paintcomponent NIE ausgeführt]

Danke
 

Marco13

Top Contributor
Ahja... paintComponent mit großem Zeh.
Warum willst du eigentlich unbedingt in das background-Graphics reinzeichnen? Zeichne doch in das, das dort bei paint (bzw. jetzt dann paintComponent) übergeben wird :bahnhof:
 

Network

Top Contributor
Ahja... paintComponent mit großem Zeh.
Warum willst du eigentlich unbedingt in das background-Graphics reinzeichnen? Zeichne doch in das, das dort bei paint (bzw. jetzt dann paintComponent) übergeben wird :bahnhof:

Ja das steht da auch mit großem C.
Kommt trotzdem dauernd: "cannot find method: super.paintComponent(g)"

Und wie schon geschrieben wird "paintComponent(Graphics g)" eh irgendwie nicht aufgerufen.


Nur darauf zu zeichnen versuch ich auch. Nur klappts irgendwie nicht... oder ich weiss es nicht. Was soll ich denn als "Graphics g" mitgeben?
 

Marco13

Top Contributor
*seufz* In welcher Klasse steht denn diese Methode? Schreib' mal ein
Code:
[b]@Override[/b]
public void paintComponent(Graphics g) { ... }
davor....
 

slawaweis

Bekanntes Mitglied
Ich versuchs aber nochmal zu erklären:

1. Linie wird gezeichnet von Punkt A nach Punkt B.
2. Zwischen Punkt A und Punkt B befindet sich ein Button.
3. Die Linie wird "ÜBER" den button gezeichnet.
4. Sobald man jedoch mit der Maus über den Button drüberfährt, (Der Button leuchtet auf), verschwindet die Linie die vorher auf dem Button drauf war.
5. Jetzt ist eine Lücke in der Linie

Das soll aber nicht so sein, die Linie soll weiterhin bestehen, auch wenn man mit der Maus über den Button fährt!!!

ich habe aus Experimentierfreude mir selber ein Beispiel für dieses Szenario erstellt und es geht alles. Wo jetzt dein Problem liegt, kann ich leider nicht direkt erkennen.

Java:
package layer_line;

import java.awt.*;

import javax.swing.*;
import javax.swing.border.*;

public class LayerLine
{
 public static void main(String [] args)
  {
  JFrame frame = new JFrame("Layer Line");
  frame.setBounds(20, 20, 300, 300);
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  JLayeredPane layers = new JLayeredPane();

  JPanel button_layer = new JPanel(new FlowLayout(FlowLayout.CENTER));
  button_layer.add(new JButton("Click Me!"));
  button_layer.setBorder(new EmptyBorder(130, 0, 0, 0));
  button_layer.setBounds(0, 0, 300, 300);

  JPanel line_layer = new LinePanel();
  line_layer.setBounds(0, 0, 300, 300);

  layers.add(button_layer, JLayeredPane.DEFAULT_LAYER);
  layers.add(line_layer, JLayeredPane.PALETTE_LAYER);

  frame.add(layers);

  frame.setVisible(true);
  }

 public static class LinePanel extends JPanel
 {
  public LinePanel()
   {
   super(null);
   this.setOpaque(false);
   }

  @Override
  protected void paintComponent(Graphics g)
   {
   super.paintComponent(g);

   Dimension size = getSize();

   g.setColor(Color.black);
   g.drawLine(0, 0, size.width, size.height);
   g.drawLine(size.width, 0, 0, size.height);
   }
 }
}

Solche Sachen wie:

Java:
super.paint(backgroundArea.getGraphics());

sollte man auf keinen Fall machen. Da bringt man die gesamte Java2D Rendering-Pipeline durcheinanderhehr. Auch:

Java:
if(( backgroundArea.getGraphics() != null ))

ist gefährlich, weil bei jedem Aufruf von getGraphics() auf einer Komponente ein neues Graphics-Objekt erstellt wird, abhängig vom aktuellen Zustand des Grafiksystems. So hat man keine Garantie, dass bei dem zweiten Aufruf von getGraphics() man keine Null zurück bekommt.

Slawa
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Beim Start des Programms zB. eine Linie in JPanel ausgeben Java Basics - Anfänger-Themen 4
J Linie wird zu lang gezeichnet Java Basics - Anfänger-Themen 4
C JFreeChart Linie nicht korrekt dargestellt Java Basics - Anfänger-Themen 1
L Anfängerin möchte Linie zeichnen Java Basics - Anfänger-Themen 8
P Überprüfen ob Mausklick auf Linie ist? Java Basics - Anfänger-Themen 6
W drawLine(...) - Linie soll nur begrenzt lang sein Java Basics - Anfänger-Themen 9
snipesss Linie zeichnen ohne extra Klasse? Java Basics - Anfänger-Themen 3
H Linie zeichnen... Java Basics - Anfänger-Themen 16
H Erste Schritte Linie/Raster mit Magnetfunktion Java Basics - Anfänger-Themen 1
X Kreis/Linie Programmieren Java Basics - Anfänger-Themen 1
B Konsoleninput eingegebene linie nach Eingabe löschen Java Basics - Anfänger-Themen 5
A Linie Zeichnen Applet mit Double Wert Java Basics - Anfänger-Themen 3
H gezeichnete Linie Eventhandling Java Basics - Anfänger-Themen 2
G Frage wegen Applet( Linie) Java Basics - Anfänger-Themen 2
G Linie zeichen mit JLabel Java Basics - Anfänger-Themen 7
M Linie Java Basics - Anfänger-Themen 4
A Linie zeichnen Java Basics - Anfänger-Themen 4
S Linie ausgeben, die sich auf Knopfdruck verlängert Java Basics - Anfänger-Themen 2
S Linie ausgeben, die sich periodisch verlängert Java Basics - Anfänger-Themen 10
S Fette Linie zeichnen Java Basics - Anfänger-Themen 3
V Linie beginnt nich bei 0,0 Java Basics - Anfänger-Themen 2
G Linie innerhalb Rechteck Java Basics - Anfänger-Themen 2
G dicke linie zeichnen bzw schräges rechteck füllen Java Basics - Anfänger-Themen 2
M AWT -eigene DrawLine Methode mit Farbverlauf in der Linie ? Java Basics - Anfänger-Themen 2
G Linie/Gitter in GridBagLayout Java Basics - Anfänger-Themen 4
A Linie zeichnen per Knopfdruck --> Fehler Java Basics - Anfänger-Themen 7
B Eine Linie zeichnenmit Java, ich verstehe das einfach nicht Java Basics - Anfänger-Themen 4
N Spezielle frage zum Comparator Java Basics - Anfänger-Themen 6
TimoN11 Java spezielle Suchprobleme - Aufgabe Java Basics - Anfänger-Themen 5
S spezielle Wörter aus Liste entfernen Java Basics - Anfänger-Themen 2
T Spezielle Aufgabe zu Schleifen Java Basics - Anfänger-Themen 3
J Spezielle Ausgabe Formatierung Java Basics - Anfänger-Themen 4
X Einfache Frage; wie soll ich die spezielle float var speichern? Java Basics - Anfänger-Themen 2
P Methoden Erklärung wie ich eine spezielle Methode richtig anwende Java Basics - Anfänger-Themen 9
J Spezielle Matrix ausgeben ! Java Basics - Anfänger-Themen 8
C Spezielle Array-Abfrage Java Basics - Anfänger-Themen 11
U Spezielle if-Schleife erstellen Java Basics - Anfänger-Themen 6
L String darf nur spezielle Zeichen enthalten Java Basics - Anfänger-Themen 6
R Mega NewbieFragen + eine spezielle^^ Java Basics - Anfänger-Themen 2
L Spezielle Operation Java Basics - Anfänger-Themen 8
G Area mit Teil-Image füllen Java Basics - Anfänger-Themen 0
O Java Text Area Zeilenausgabe Java Basics - Anfänger-Themen 7
E Belebeste Area im Game of Life suchen Java Basics - Anfänger-Themen 0
G SMA Signal Magnitude Area of an accelerometer Java Basics - Anfänger-Themen 1
P Eingabe aus JTextField/Area an eine andere Klasse übergeben. Java Basics - Anfänger-Themen 2
I Problem mit Java Text Area Java Basics - Anfänger-Themen 14
N Koordinaten aus Area bekommen? Java Basics - Anfänger-Themen 3
J Funktion Copy Area Java Basics - Anfänger-Themen 13
G Es wird immer nur der Eintrag in der Text Area angezeit Java Basics - Anfänger-Themen 6
J Morgen Java-Klausur. Stack, Heap, Method-Area Java Basics - Anfänger-Themen 2
F Area anlegen Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben