awt zusammen mit swing ?

Status
Nicht offen für weitere Antworten.

Lars

Neues Mitglied
Hallo zusammen,

erstmal muss ich sagen, daß ich noch ziemlicher newbee in sachen java bin ... das nur mal vorweg :roll:

Ich versuche gerade mit Hilfe von SWING und AWT ein Fenster (JFrame) mit Inhalt (paint())
und Menüleiste (JMenu) hinzubekommen.
Irgenwie geht aber immer nur eins von beiden, d.h.
lass ich paint(Graphics g) weg dann habe ich ein Fenster mit Menü,
füge ich nun paint(Graphics g) ein, so hab ich zwar das "gemalte" im Fenster aber das
Menü fehlt ...

Was mache ich falsch ?

hier mein Code ....

Code:
import javax.swing.*;
import java.awt.*;
	 
	  public class SwingTest extends JFrame
	  {
	    public SwingTest()
	    {
	      super("JMenu");
	  
	      JMenuBar menubar = new JMenuBar();
	      JMenu menu1 = new JMenu("Datei");
	      menubar.add(menu1);
	      JMenu menu2 = new JMenu("Bearbeiten");
	      menubar.add(menu2);
	  
	     JPanel panel = new JPanel();
	      panel.add(menubar);
	  
	      setContentPane(panel);
	    }
	    
		public void paint(Graphics g) {
				g.drawString("Hallo Fenster-Welt!",150,150);
			}

	  
	    public static void main(String[]args)
	    {
	      SwingTest mc = new SwingTest();
	      mc.setSize(300,300);
	      mc.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	      mc.setVisible(true);
	   }
	 }

Vielen Dank schonmal ....
War bestimmt nicht das letzte mal 🙂

PS: Soll ich solche "low level" Fragen in Zukunft lieber im Anfängerforum stellen ? ich war mir nicht sicher ...
 
Schau dir mal dieses Bildchen an:
1layers.gif

Image

Das Menü liegt auf dem Frame. Wenn du also das Frame etwas neues zeichnen lässt, bekommen die Componenten die auf dem Frame sind, keine Chance gezeichnet zu werden (die entsprechenden Methoden werden normalerweise aus dem Frame aufgerufen).

Du kannst aber ein JPanel nehmen, und dort die Methode paintComponent überschreiben. Dann kannst du zeichnen, ohne etwas zu verlieren.
Das JPanel fügst du danach einfach dem Frame hinzu.

mfg Beni
 
Wenn du das wirklich so machen willst, Swing und AWT Mischen sollte man eigentlich nicht machen :bloed: :
Du könntest diese Methode im Konstruktor aufrufen (mit false).

Vielleicht ist es aber besser, Swing und AWT nicht zu mischen :toll: , und das paint bzw. paintComponent in einer Subklasse von JComponent aufzurufen, und eine Instanz dieser Klasse hinzuzufügen, ich glaube, das klappt.

Edit: Oh, das hat Beni ja schon geschrieben.
Hätte ich den letzten Absatz wohl besser nicht überlesen 😀 .
 
Ich verwende für meine GUI´s den JBuilder9 vom Borland.
Auch wenn dieses Ding, gerade in Sachen Designer, so seine Macken hat, ist er recht hilfreich.

Aber generell würde ich dir raten, immer ein eigenes JPanel für die Hauptgeschehnisse in deinem Prog. zu verwenden.
... und eines ist klar, wenn du einem Panel ein Menu zuweist, dann weiß das Ding nicht was es tun soll
? Paint oder Menu ?

Noch besser wäre es natürlich, wenn du für ausgefallenere Dinge ein eigenes Panel (zB:
Code:
public class MyPanel extends JPanel{}
)
anlegst.
Du kannst diese Panel dann deinen eigenen Bedürfnissen anpassen und je nach belieben wie jede eigens erstellte Klasse verwenden.

You´ll see: "The Future is OOP" :wink:

Peace XL
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben