Problem mit 2 Panels in einem Applet
-
Hi Leute,
ich hab mal wieder ein problem und ich hoffe ihr könnt mir helfen.
ich will ein applet schreiben das aus 2 panels besteht. das obere panel soll 300 auf 300 pixel groß sein und direkt darunter eins mit 300 breit aber nur 100 pixel höhe.
im oberen soll gezeichnet werden mit der paint methode und im unteren panel sollen dann nur buttons zur programmsteuerung sein.
die buttons hab ich mal rein gemacht und auch den panels einen unterschiedliche hintergrundfarbe gegeben, damit man sieht wo das eine anfängt und so, das geht wunderbar.
jetzt aber mein problem, wenn ich eine paint methode reinmach um im oberen panel zu zeichnen, dann sind die panels wieder weg und die paint methode zeichnet im ganzen applet. jetzt wollte ich fragen wie ich die paint methode nur für das obere applet aufrufe?gruß zeke
-
Nur Panels? Also vermutlich erst mal awt verwendet?
Diese Panels dienen hauptsächlich zum Aufnehmen von anderen Components - zum Zeichnen würde ich eher ein Canvas benutzen bzw. eine eigene Klasse, die davon erbt - dann die einfach die Methode paint() passend überschreiben.
paint() sollte zudem nicht direkt aufgerufen werden, sondern stattdessen repaint().
-
also folgendes hab ich bisher:
import java.awt.*; import java.awt.event.*; import java.applet.Applet; import javax.swing.*; public class Hanoi2 extends Applet implements Runnable { JButton reset = new JButton("Reset"); JButton go = new JButton("Go"); JButton back = new JButton("Back"); JButton animation = new JButton("Animation"); JButton stop = new JButton("Stop"); Choice choice1 = new Choice(); Label label1 = new Label("Anzahl der Scheiben:"); JPanel p1 = new JPanel(); JPanel p2 = new JPanel(); BorderLayout b = new BorderLayout(); Thread runner; public void init() { setLayout(b); p1.setBounds(0,0,400,300); p2.setBounds(0,301,400,100); p1.setBackground(Color.blue); p2.setBackground(Color.yellow); reset.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("depp"); } }); go.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { } }); back.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { } }); animation.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { } }); stop.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { } }); p2.add(reset); p2.add(go); p2.add(back); p2.add(animation); p2.add(stop); choice1.add("1"); choice1.add("2"); choice1.add("3"); choice1.add("4"); choice1.add("5"); choice1.select(2); p2.add(label1); p2.add(choice1); add("Center",p1); add("South",p2); } public void start() { } public void stop() { } public void run() { } public void destroy() { } }
hab mal die hintergrundfarbe geändert damit man die beiden panels sieht.
jetzt will ich mit der paint methode nur im p1 (panel 1) zeichnen.
wie mach ich das?
denn wenn ich da jetzt eine public void paint(Graphics g) rein mach,
dann sind die beiden panels weg...gruß zeke
-
Du musst dir eine Klasse von JPanel ableiten und dann dort die paint() überschreiben.
Dann wird auch nur im Bereich dieses JPanels gezeichnet. Du kannst natürlich, wie schon gesagt wurde, Canvas nehmen.p1 = new JPanel();
p2 = new MeinEigenesPanelMitDerUeberschriebenenPaint();
add(p1);
add(p2);
-
cool danke, funktioniert!