ich lerne gerade AWT/Swing. Ich möchte in meiner GUI zwei Fenster haben die ich separat bemalen kann. Wie geht das? Ich kann ja immer nur eine paint-Methode manipulieren. Ich bräuchte aber für jedes Fenster eine separate paint-Funktion.
Man kann in jedes Fenster ein JPanel legen, in dem man die paintComponent-Methode passend überschrieben hat. Vielleicht zielt deine Frage darauf ab, dass es ggf. unterschiedliche Klassen sein müssen?
Ja und Nein. Du zeichnest nicht direkt, indem du dir ein Graphics-Objekt holst, sondern indem du die paintComponent() Methode eines JPanels (oder einer von JComponent erbenden Klasse) überschreibst.
Wenn du wirklich zwei "echte" Fenster, also mit Schließen-Funktion, Minimieren, etc. willst, dann empfiehlt es sich zwei JInternalFrames zu erstellen, und deren ContentPane jeweils ein JPanel zuweisen, in welchem du wie oben beschrieben, zeichnest.
Falls du allerdings einfach nur 2 Zeichenbereiche meinst, reicht es auch aus 2 JPanel direkt auf dein Hauptframe zu adden und in diesem zu zeichen.
Für deinen Fall empfiehlt imo das Zeichen aus KEIN Swing-Tutorial , der Teil mit dem Interface Paintable.
Hi ich habe mich mal daran versucht, aber ich kriege das irgendwie nicht hin. Das hier habe ich programmiert (bin Anfänger) und habe mir vieles abgeguckt von anderen Codes.
Java:
publicclassAWTFrame{publicAWTFrame(){PanelBsp p1 =newPanelBsp();PanelBsp p2 =newPanelBsp();
p1.setSize(100,100);JFrame f =newJFrame("Fenster");
f.setSize(300,300);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
p1.setPreferredSize(newDimension(300,300));
f.setLayout(newBorderLayout());
f.add(p1);
f.add(p2);//Wie kann ich hier die Position festlegen?
f.setBackground(Color.yellow);
f.pack();
f.setVisible(true);}}
Ich hätte das gerne so, dass Links ein Panel mit Hallo steht und rechts davon auch nochmal ein Panel ist. Anschließend soll man beide Panel getrennt voneinander manipulieren.
und in der Hauptklasse dann eben
OtherPanelBsp p2 = new OtherPanelBsp();
Wenn es nur um einen anderen String ginge (oder überhaupt, irgendwas "ähnliches") könnte man sich natürlich tausende von "weniger getrennten" Abstufungen vorstellen...
Ich jetzt zwar nicht genau inwiefern du was manipulieren möchtest, aber ich glaube ganau hierfür bietet sich der Link an, dem ich dir bereits geben habe, mit einem Interface Paintable zu arbeiten. Ich wollte mal nicht so sein und hab es auf deine Code mal angewand:
Java:
importjavax.swing.JFrame;importjava.awt.Dimension;importjava.awt.GridLayout;importjava.awt.Color;importjava.awt.Graphics2D;publicclassAWTFrame{publicAWTFrame(){PanelBsp p1 =newPanelBsp();
p1.setPreferredSize(newDimension(300,300));PanelBsp p2 =newPanelBsp();
p2.setPreferredSize(newDimension(300,300));JFrame f =newJFrame("Fenster");//f.setSize(300,300); // Fällt weg, da die ContentPane die Größe 600x300 // erhält, und pack() augerufen wird
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().setLayout(newGridLayout());// GridLayout anstatt BorderLayout
f.getContentPane().add(p1);
f.getContentPane().add(p2);
f.getContentPane().setBackground(Color.yellow);
f.pack();
f.setVisible(true);
p2.getPaintables().add(newPaintable(){publicvoidpaintObject(Graphics2D g2){// Hier der dynamisch hinzugefügte Zeichncode, bsbw.:
g2.setColor(Color.GRAY);
g2.fillRect(10,10,50,50);}});// +Aufruf zum Neuzeichnen:
p2.repaint();}}