Hey,
ich habe da ein kleines Problem und bin für jede Art von Hilfe dankbar, da ich seit gut einem Tag nicht daraus schlau werde und davor hocke ...
Ich habe eine Zeichnung über void paint(Graphics g) erstellt und möchte je nachdem ob ich das Fenster von der Ursprungsgröße her verkleinere, oder vergrößere, dass sich besagte Zeichnung immer in der Mitte des Fensters befindet. (Momentan klebt die immer links in der Ecke und reagiert auch nicht auf Veränderungen vom Fenster)
Ich weiß nur nicht, wie ich void paint(Graphics g) auf das Panel übertragen muss, damit was im Panel gezeichnet wird, falls das der richtige Lösungsansatz ist? Denn sobald ich das Graphics in ein Panel packe und dieses dann wiederum in einen Panel mit einem LayoutManager stecke kann ich es doch zentrieren?
Hier mal etwas Code, einmal ohne Panels, da funkt zumindest die Zeichnung an sich, ohne zentrierung und einmal mit Panels, da funktioniert gar nichts mehr.
Die Zeichnung an sich ist irrelevant, es geht mir um das Prinzip wie ich die permanent zentriere, wenn ich mit meinem Fenster herumspiele.
Schon mal vielen Dank für jeden Tipp!
Ich hoffe ich mach mich hier nicht zum Affen, aber die Idee das durch Panels zu zentrieren ist richtig oder bin ich hier die Sache schon falsch angegangen als ich meine extra public paint Methode quasi "aufgelöst" habe?
ich habe da ein kleines Problem und bin für jede Art von Hilfe dankbar, da ich seit gut einem Tag nicht daraus schlau werde und davor hocke ...
Ich habe eine Zeichnung über void paint(Graphics g) erstellt und möchte je nachdem ob ich das Fenster von der Ursprungsgröße her verkleinere, oder vergrößere, dass sich besagte Zeichnung immer in der Mitte des Fensters befindet. (Momentan klebt die immer links in der Ecke und reagiert auch nicht auf Veränderungen vom Fenster)
Ich weiß nur nicht, wie ich void paint(Graphics g) auf das Panel übertragen muss, damit was im Panel gezeichnet wird, falls das der richtige Lösungsansatz ist? Denn sobald ich das Graphics in ein Panel packe und dieses dann wiederum in einen Panel mit einem LayoutManager stecke kann ich es doch zentrieren?
Hier mal etwas Code, einmal ohne Panels, da funkt zumindest die Zeichnung an sich, ohne zentrierung und einmal mit Panels, da funktioniert gar nichts mehr.
Die Zeichnung an sich ist irrelevant, es geht mir um das Prinzip wie ich die permanent zentriere, wenn ich mit meinem Fenster herumspiele.
Schon mal vielen Dank für jeden Tipp!
Ich hoffe ich mach mich hier nicht zum Affen, aber die Idee das durch Panels zu zentrieren ist richtig oder bin ich hier die Sache schon falsch angegangen als ich meine extra public paint Methode quasi "aufgelöst" habe?
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GraphicFrame extends JFrame {
private int n = 0;
public GraphicFrame(){
init();
}
private void init(){
this.setSize(new Dimension(400,300));
this.setTitle("Graphics Frame");
}
protected void processWindowEvent(WindowEvent e){
super.processWindowEvent(e);
if (e.getID()==WindowEvent.WINDOW_CLOSING){
System.exit(0);
}
}
public void paint(Graphics graphics){
n++;
graphics.clearRect(0, 0, 2047, 2047);
graphics.fillOval(50, 50, 30, 30);
graphics.drawOval(100, 60, 30, 10);
graphics.fillRect(60, 120, 60, 10);
graphics.drawLine(90, 70, 90, 100);
graphics.drawString(n+". mal neu gezeichnet", 40, 160);
}
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
//ab hier selbe Klasse mit Panel versuch, um es in ein Layout zu packen und zu zentrieren
public class GraphicFrame extends JFrame {
private int n = 0;
public GraphicFrame(){
init();
}
private void init(){
this.setSize(new Dimension(400,300));
this.setTitle("Graphics Frame");
JPanel panel2 = new JPanel();
Graphics g1 = panel2.getGraphics();
g1.clearRect(0, 0, 2047, 2047);
g1.fillOval(50, 50, 30, 30);
g1.drawOval(100, 60, 30, 10);
g1.fillRect(60, 120, 60, 10);
g1.drawLine(90, 70, 90, 100);
g1.drawString(n+". mal neu gezeichnet", 40, 160);
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(panel2, BorderLayout.CENTER);
this.setContentPane(panel);
}
protected void processWindowEvent(WindowEvent e){
super.processWindowEvent(e);
if (e.getID()==WindowEvent.WINDOW_CLOSING){
System.exit(0);
}
}
}
Zuletzt bearbeitet: