Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

paint(Graphics g) und JMenuBar für JFrame

Empfohlene Antworten

Veröffentlicht

Hi,

ich hab nen JFrame mit ner JMenuBar und wenn ich jetzt die Methode paint hinzufüge verschwindet die JMenuBar wie kann ich das verhindern damit ich die Zeichenfläche und die JMenuBar habe ????

Gruß Scratch

Moin,

reicht es wenn du in paint


super(g);

aufrufst?

Ansonsten könntest du ja ein gesonderes Panel auf ne Frame legen und dessen Paint - Methode überschreiben, damit sich das nicht ins Gehege kommt. Geht das?

gruß, Peter

  • Autor

werd ich mal probieren !

wird aber etwas dauern :-)

mache noch nicht lange Java und werd deshalb viel probieren müssen.

ich hab aber jetzt einfach mal neue Klasse angelegt mit extends JPanel und probier mal was ich damit anfangen kann !

Danköööö für den Tipp :-) !!!

Moin,

lass dir Zeit! ;-)

Also, mit super() rufst du innerhalb einer Klasse immer etwas aus der Basisklasse auf, jenachdem wo und in welchem Zusammenhang du es schreibst.

In deinem Fall (paint-Methode überschrieben) würdest du also die Paint-Methode von JFrame aufrufen und danach könntest du weitere Sachen hinzuzeichnen.

Oft sieht man auch, dass innerhalb eines Konstruktors super() aufgerufen wird, einfach um somit den Konstruktor der Basisklasse aufzurufen.

Das mit dem JPanel war nur so ne Idee. Das Panel kannst Du auf das ContentPane des Frames klatschen und kannst dann die Paint-Methode des Panels überschreiben, wodurch halt die Paint-Methode vom Frame nicht direkt verändert wird und der MenuBar erhalten bleibt.

Gruß, Peter

(Der nie weiß ob er überhaupt was richtiges erzält ^_^)

  • Autor

also ich hab jetzt einfach ein JPanel angelegt und übergebe dem die sachen die es malen soll ;-)

ich hab eigentlich nur noch Probleme mit dem anpassen der Fenstergröße des Frames .... die Funktion

Image.getWidth(this)

und

Image.getHeight(this)

liefern nachdem das Bild mit

map = Toolkit.getDefaultToolkit().getImage(myImage);

geladen wurde beide -1 statt de eigentlich größe, erst beim zweiten Klick auf meinen Button erkennt der die größe des Bildes :-(

Aha,

was wird den für ein Code ausgeführt wenn du auf den Button drückst?

  • Autor

Bei Klick auf den Button -->



paintPanel.setBackgroundImage(image);

System.out.println(paintPanel.getPaintAreaWidth()); // Beim ersten mal -1

System.out.println(paintPanel.getPaintAreaHeight()); // Beim ersten mal -1


setSize(paintPanel.getPaintAreaWidth(),paintPanel.getPaintAreaHeight());


// PaintPanel.class

public void setBackgroundImage(String image)

{

	map = Toolkit.getDefaultToolkit().getImage(image);

	repaint();

	mapWidth = map.getWidth(this);

	mapHeight = map.getHeight(this);

}


als Ergebnis wie schon erwähnt

Klick 1: -1 -1

Klick 2: 300 200

Mhh,

ich sehe so nix. "getPaintAreaWidth" ist eine von Dir geschriebene Methode? Vielleicht gibt sie falsch initialiserte Werte zurück?

Klappt das Zeichnen denn an sich?

  • Autor

Ja das Bild kommt.



public int getPaintAreaWidth()

{

	return image.getWidth();

}


das sollte richtig sein. aber ich glaub ich hab was gefunden ... in den google.de Newsgroups !!
Images take some time to load. They load in another thread and the main thread continues. So, when you try to get info. about the image the first time, the image is not ready so you do not get the information. To get around this, you can use a MediaTracker object to track the image and tell you when it is loaded.
Jetzt hab ichs abgeändert zu


	public void setBackgroundImage(String image)

	{

		MediaTracker tracker = new MediaTracker(this);

		map = Toolkit.getDefaultToolkit().getImage(image);

		tracker.addImage(map,0);

		try

		{

			tracker.waitForID(0);

		}

		catch (Exception e){}

		mapWidth = map.getWidth(this);

		mapHeight = map.getHeight(this);

	}

und es geht ... jetzt fehlt nur noch das er das Bild gleich aktualisiert !!!

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.