2D-Grafik Zeichenfläche auf JPanel

otdebo

Mitglied
Hallo an alle,

ich schreibe grade meine Facharbeit und muss dafür ein Programm erstellen, womit ich einen Graphen erstellen kann (sowas hier https://www.google.de/search?q=grap...9g6k6lO6A4AQ&ved=0CAgQ_AUoAQ&biw=1366&bih=624).
Jetzt schaffe ich es aber nicht einmal einfach den Weg der Maus nachzuzeichnen.
In einem leeren JFrame hat mein Code wunderbar funktioniert, wenn ich ihn jetzt allerdings in einem JPanel verwenden möchte funktioniert es nicht. ???:L

Danke schon mal im Voraus für eure Hilfe! 🙂

Hier der Code:
Java:
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Graphenprogramm extends JPanel implements MouseListener, MouseMotionListener{
	
	private int startX, startY, tempX, tempY;
	private Graphics2D g2;
	
	public Graphenprogramm() {
		this.addMouseListener(this);
		this.addMouseMotionListener(this);
	}
	
	protected void paintComponent(Graphics g) {
		g2 = (Graphics2D) g;
		g2.setPaintMode();
		g2.drawLine(startX, startY, tempX, tempY); 
        startX = tempX; 
        startY = tempY;
	}
	
	public static void main(String[] args) {
		final JFrame mainWindow = new JFrame("Graphendarstellung");
		mainWindow.setLayout(null);
		mainWindow.setSize(700, 450);
		mainWindow.setLocationRelativeTo(null);
		mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
			JPanel menu = new JPanel();
			menu.setBounds(0,0,100,401);

				JButton normal = new JButton("Zeiger");
				normal.addActionListener(new ActionListener() {
					  public void actionPerformed(ActionEvent event) {
						  mainWindow.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
					  }
				});
				JButton vertex = new JButton("Knoten");
				vertex.addActionListener(new ActionListener() {
					  public void actionPerformed(ActionEvent event) {
						  mainWindow.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
					  }
				});
				JButton edge = new JButton("Kante");
				edge.addActionListener(new ActionListener() {
					  public void actionPerformed(ActionEvent event) {
						  mainWindow.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
					  }
				});
				menu.add(normal);
				menu.add(vertex);
				menu.add(edge);
				
				mainWindow.add(menu);
				
			JPanel graph = new JPanel();
			graph.setBounds(100,5,578,401);
			graph.setBackground(Color.white);
			graph.add(new Graphenprogramm());
			
			mainWindow.add(graph);
			
		mainWindow.setVisible(true);
	}

	public void mouseClicked(MouseEvent e) {
	}

	public void mouseEntered(MouseEvent e) {
	}

	public void mouseExited(MouseEvent e) {
	}

	public void mousePressed(MouseEvent e) {
		startX = e.getX();
        startY = e.getY();
	}

	public void mouseReleased(MouseEvent e) {
	}

	public void mouseDragged(MouseEvent e) {
		tempX = e.getX(); 
        tempY = e.getY(); 
        repaint();
	}

	public void mouseMoved(MouseEvent e) {
	}
}
 
Warum erstellst du denn ein JPanel, zu dem du dein Graphenprogramm Objekt hinzufügst? Graphenprogramm erbt doch von JPanel, dass heißt du kannst ein Graphenprogramm zu deinem Fenster hinzufügen.
 
So hier kannst du das machen:

Java:
mainWindow.add(menu);

JPanel graph = new Graphenprogramm();
graph.setBounds(100, 5, 578, 401);

mainWindow.add(graph);

mainWindow.setVisible(true);

Und ja es gibt Probleme mit deinem neu zeichnen, da du ein null-Layout verwendest.
 
Vielen Dank!
Also das funktioniert, aber jetzt erscheinen die drei Knöpfe zusätzlich zu den normalen auch noch einmal auf meiner Zeichenfläche :/
 

Neue Themen


Zurück
Oben