paint/repaint problem mit awt/swing?

Status
Nicht offen für weitere Antworten.

Solour

Aktives Mitglied
hi,

bei mir ergibt sich ein kleiner aber feiner bug...
bin SEHR ungeübt was das GUI bauen unter java angeht also bitte nicht gleich lachen ;)
erst wenn ihr mir die lösung genannt habt :eek:

hier zwei screenshots mit meinem problem:



es läuft darauf hinaus, das die methode paint() der classe ConstructPanel seehr oft aufgerufen wird, währen der Bug sichtbar ist. wenn man das menü wieder in ruhe lässt sieht alles wieder normal aus.

und hier noch ein paar auszüge aus dem "wenigen" code den das programm bisher hat:
Die Main.java, hier wird das programm gestartet:
Code:
package main;

import javax.swing.UIManager;
import gui.main.MainFrame;

public class Main {

	public static void main(String[] args) {
		try {
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch (Exception e) {
			System.err.println("Exception: " + e.getMessage());
			e.printStackTrace();
		}
		java.awt.EventQueue.invokeLater(new Runnable() {
			public void run() {
				new MainFrame().setVisible(true);
			}
		});
	}
}

hier das hauptfenster der anwendung, welches erstmal hardgecoded ein construct panel erzeugt und im unterenbereich anzeigt (siehe den menu-action-listener ganz unten)
Code:
package gui.main;

import gui.construct.ConstructPanel;

import java.awt.*;
import javax.swing.*;

import main.Constants;

public class MainFrame extends JFrame {

	private JMenu item_file;
	private JMenuItem item_includeGUI;
	private JPanel lowerArea;
	private JMenuBar mainMenu;

	public MainFrame() {
		initComponents();
	}

	private void initComponents() {
		lowerArea = new JPanel();
		mainMenu = new JMenuBar();
		item_file = new JMenu();
		item_includeGUI = new JMenuItem();

		getContentPane().setLayout(new java.awt.GridLayout(1, 0));
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		setTitle(Constants.appName);
		lowerArea.setLayout(new GridLayout(1, 0));
		getContentPane().add(lowerArea);

		item_file.setText(Constants.getWord("file"));

		item_includeGUI.setText(Constants.getWord("include mode"));
		item_includeGUI.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent evt) {
				item_includeGUIActionPerformed(evt);
			}
		});
		item_file.add(item_includeGUI);
		mainMenu.add(item_file);

		setJMenuBar(mainMenu);

		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		setBounds((screenSize.width - Constants.windowWidth) / 2,
				(screenSize.height - Constants.windowHeight) / 2,
				Constants.windowWidth, Constants.windowHeight);
	}

	private void item_includeGUIActionPerformed(java.awt.event.ActionEvent evt) {
		//TODO: handle incude
		JPanel subPanel = new ConstructPanel(this);
		lowerArea.add(subPanel);
		lowerArea.validate();
	}
}

hier dann diese ConstructPanel welches im unteren Bereich des hauptfensters angezeigt wird, also direkt unter der menubar:
dieses erzeugt wie man sieht noch ein GraphPanel welches auf der rechten seite vom splitPane angezeigt werden soll:
Code:
package gui.construct;

import java.awt.*;
import javax.swing.*;

import main.Constants;

public class ConstructPanel extends JPanel {

	private JFrame mainFrame = null;
	private JSplitPane splitPane = new JSplitPane();
	private JPanel machineGraphic = new GraphPanel();
	private JList machineList = new JList();

	public ConstructPanel(JFrame f) {
		mainFrame = f;
		setLayout(new BorderLayout());
		splitPane.setDividerLocation(Constants.windowWidth / 5);
		machineList.setModel(new AbstractListModel() {
			String[] strings = {"a", "b", "bv", "bvf"};
			public int getSize() {
				return strings.length;
			}
			public Object getElementAt(int i) {
				return strings[i];
			}
		});
		splitPane.setLeftComponent(machineList);
		splitPane.setRightComponent(machineGraphic);
		add(splitPane, BorderLayout.CENTER);
	}

	public void paint(Graphics g) {
		System.out.println("consPain");
		splitPane.repaint();
	}
}

dieses GraphPanel soll erstmal blos etwas malen:

Code:
package gui.construct;

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JPanel;

public class GraphPanel extends JPanel {

	public void paint(Graphics g) {
		System.out.println("paint");
		g.drawOval(50, 50, 20, 30);
		g.setColor(Color.black);
		g.drawLine(50, 50, 20, 30);
	}

}

hat sicher (naja vielleicht auch nicht sicher) etwas damit zu tun, an welchen stellen wer paint/repaint/update/super.repaint o.ä. aufruft oder eben nicht aufruft, oder diese methoden nicht korrekt überschreibt oder auch für falsche areale aufruft?

wenn sich damit jemand auskennt :eek: bitte melden!

bye

ps: http://java.sun.com/products/jfc/tsc/articles/painting/index.html hier hab ich nachgelesen und hatte mich schon gefreut das es wenigstens alles anzeigte und so, aber diesen bug konnte ich jetzt nicht direkt dadurch lösen..:/
 
B

Beni

Gast
Ich würde den Fehler mal hier suchen:
Code:
   public void paint(Graphics g) {
      System.out.println("consPain");
      splitPane.repaint();
   }

Wieso repaint? Wieso überhaupt das ganze Überschreiben?

Du verhinderst hier, dass dieses Panel (und seine Kinder) neu gezeichnet werden.
Das repaint wird dann vielleicht irgendwann mal in Zukunft aufgerufen, sollte es nicht wegoptimiert werden (es würde ja eigentlich reichen, die paint des Panels aufzurufen, damit auch splitPane gezeichnet wird. So sähe es die Standardimplementation jedenfalls vor).

Wenn du weiterhin dieses paint benutzen möchtest, ruf anschliessned "paintComponents" auf.
 

Solour

Aktives Mitglied
yop scheint genau das gewesen zu sein!!

:applaus: :applaus: :toll:

kP warum das da drin war...

THX!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K 2D-Grafik Paint - Wie binde ich repaint ein? AWT, Swing, JavaFX & SWT 8
G Probleme mit repaint / paint AWT, Swing, JavaFX & SWT 6
K repaint() ruft paint() nicht auf AWT, Swing, JavaFX & SWT 14
H 2D-Grafik Problem mit Paint AWT, Swing, JavaFX & SWT 1
frager2345 Warum paintComponent hier und nicht paint AWT, Swing, JavaFX & SWT 2
U Was ist der Unterschied von paint und paincomponent? AWT, Swing, JavaFX & SWT 3
L 2D-Grafik Swing paint|paintComponent AWT, Swing, JavaFX & SWT 2
krgewb 2D-Grafik paint-Methode wird zu oft ausgeführt AWT, Swing, JavaFX & SWT 5
S Zeichen ohne paint-Methode AWT, Swing, JavaFX & SWT 2
J Swing Wann brauche ich @Override vor der paint()-Methode? AWT, Swing, JavaFX & SWT 1
G Eine paint-Methode, 2 Welten? AWT, Swing, JavaFX & SWT 3
H Swing + Paint: Mehrere Objekte zeichnen lassen AWT, Swing, JavaFX & SWT 3
A paint-Methode aufrufen AWT, Swing, JavaFX & SWT 13
Xanny 2D-Grafik Beginner! Probleme mit Swing, Gprahics class und paint AWT, Swing, JavaFX & SWT 13
L Berechnungen in paint AWT, Swing, JavaFX & SWT 8
S Grafik: Programm kommt nicht zur paint()-Methode AWT, Swing, JavaFX & SWT 6
W Paint-Methode in anderer Klasse funktioniert nicht AWT, Swing, JavaFX & SWT 7
S 2 Paint-Methoden in einer Klasse ? AWT, Swing, JavaFX & SWT 2
J zwei Paint methoden in einer Klasse AWT, Swing, JavaFX & SWT 3
P Paint und paintComponent AWT, Swing, JavaFX & SWT 12
F 2D-Grafik Was ruft die Paint - Methode auf ? AWT, Swing, JavaFX & SWT 2
S JButton u. Label auf paint-Methode AWT, Swing, JavaFX & SWT 1
S 2 paint-Methoden in einer Klasse ? AWT, Swing, JavaFX & SWT 2
S Paint Methode ohne implements JPanel AWT, Swing, JavaFX & SWT 1
S Farbe ändern bei der paint-Methode AWT, Swing, JavaFX & SWT 5
J ActionListener soll auf paint() Methode zugreifen AWT, Swing, JavaFX & SWT 1
J Problem mit der paint Methode AWT, Swing, JavaFX & SWT 0
Junb 2D-Grafik paint() Methode bugt? AWT, Swing, JavaFX & SWT 2
C JFrame paint ohne hintergrund nutzen AWT, Swing, JavaFX & SWT 6
I Paint-Methode von nicht statischen Objekten aufrufen AWT, Swing, JavaFX & SWT 3
A Swing Paint mit Button Clear den Hintergrund säubern um wieder zeichnen zu können AWT, Swing, JavaFX & SWT 2
D JSlider "laggt" nach überschreiben der paint methode AWT, Swing, JavaFX & SWT 2
S paint() verzögern AWT, Swing, JavaFX & SWT 9
K AWT begrenzte anzahl paint aufrufe AWT, Swing, JavaFX & SWT 6
B Infolabel Probleme mit Paint() ? AWT, Swing, JavaFX & SWT 8
L AWT paint mit ArrayList und Iterator AWT, Swing, JavaFX & SWT 3
Furtano AWT paint braucht ein Graphics Objekt ? AWT, Swing, JavaFX & SWT 2
L Swing 64bit Problem mit paint/paintComponent AWT, Swing, JavaFX & SWT 7
A Paint Methode externer auruf AWT, Swing, JavaFX & SWT 5
T JFrame und paint() AWT, Swing, JavaFX & SWT 5
B Ablauf der paint-Methoden von JComponents AWT, Swing, JavaFX & SWT 20
J AWT Methode paint() AWT, Swing, JavaFX & SWT 4
F 2D-Grafik Hostkomponentengröße in paint AWT, Swing, JavaFX & SWT 2
L JFrame an Paint-Inhalt anpassen AWT, Swing, JavaFX & SWT 6
E Warum übermalt paint das ganze Fenster? AWT, Swing, JavaFX & SWT 15
X Bild via FileChooser in paint-Methode laden AWT, Swing, JavaFX & SWT 2
T paint() wird nicht aufgerufen AWT, Swing, JavaFX & SWT 8
M JMenuBar im Applet und paint AWT, Swing, JavaFX & SWT 9
G paint-Methode kopiert GUI AWT, Swing, JavaFX & SWT 14
H paint überlappend AWT, Swing, JavaFX & SWT 5
E paint AWT, Swing, JavaFX & SWT 3
H Swing paint() von JPanel wird nicht aufgerufen AWT, Swing, JavaFX & SWT 10
L AWT Paint(g) im Listener aufrufen AWT, Swing, JavaFX & SWT 2
S JCheckBox Paint AWT, Swing, JavaFX & SWT 7
F AWT Probleme mit der paint() methode AWT, Swing, JavaFX & SWT 2
C Unterschiedlicher Aufruf der paint() Methode ? (AWT/Swing) AWT, Swing, JavaFX & SWT 2
L Problem mit paint Methode und Bild AWT, Swing, JavaFX & SWT 7
F Swing Paint mit Canvas Element AWT, Swing, JavaFX & SWT 35
K AWT paint wird nicht aufgerufen AWT, Swing, JavaFX & SWT 7
R LayoutManager Image Paint + Text Panel AWT, Swing, JavaFX & SWT 10
F paint-Methode des JComboboxEditorComponent AWT, Swing, JavaFX & SWT 2
S Threads in einen Frame zeichnen lassen (Paint()?!) AWT, Swing, JavaFX & SWT 5
radiac Swing JFrame - paint(g) - FrameObjects bei activeRendering AWT, Swing, JavaFX & SWT 3
I AWT paint() in MouseEvent aufrufen klappt nicht AWT, Swing, JavaFX & SWT 8
T paint() wird zweimal ausgeführt AWT, Swing, JavaFX & SWT 6
hdi Swing JLabel & paint-Methode gemixt - wie schlimm wirklich? AWT, Swing, JavaFX & SWT 5
N Paint methode anhalten und neustarten AWT, Swing, JavaFX & SWT 5
H AWT Wann ist paint() fertig? AWT, Swing, JavaFX & SWT 7
R [gelöst]Fenster schließen - trotz Endlosschleife in der Paint-Methode? AWT, Swing, JavaFX & SWT 3
W Steuerelemente und paint() in einem JPanel AWT, Swing, JavaFX & SWT 3
M Allgemeines zur paint Methode AWT, Swing, JavaFX & SWT 5
M AWT Component/Canvas erzeugt unerwünschten Rahmen bei paint AWT, Swing, JavaFX & SWT 3
T Dialog ohne Frame, direktes paint in graphics AWT, Swing, JavaFX & SWT 5
A paint()-Methode für Videoexport nutzen AWT, Swing, JavaFX & SWT 2
J Canvas / paint() AWT, Swing, JavaFX & SWT 2
bugmenot paint() verzögert ausgeführt? AWT, Swing, JavaFX & SWT 4
S paint() in anderen Methoden AWT, Swing, JavaFX & SWT 5
J getFontMetrics außerhalb von paint(Graphics g) AWT, Swing, JavaFX & SWT 8
D Paint() Methode aus einer anderen Klasse aufrufen AWT, Swing, JavaFX & SWT 6
H paint verwenden AWT, Swing, JavaFX & SWT 3
S java.awt.Component und paint() AWT, Swing, JavaFX & SWT 4
A Paint funktioniert nicht richtig AWT, Swing, JavaFX & SWT 7
L Dynamisches Ändern der Größe in JPanel mit paint()-Methode AWT, Swing, JavaFX & SWT 8
G JScrollPane mit "paint" scrollt nicht AWT, Swing, JavaFX & SWT 2
C paint-Methode überschreiben AWT, Swing, JavaFX & SWT 19
hdi meine paint-methode macht faxen? AWT, Swing, JavaFX & SWT 21
T Variable Menge an Bildern außerhalb paint() zeichnen? AWT, Swing, JavaFX & SWT 2
G Paint und Buttons AWT, Swing, JavaFX & SWT 8
G JFrame JPanel und Paint(Image)? AWT, Swing, JavaFX & SWT 6
S Programm aufgrund von paint() zu langsam AWT, Swing, JavaFX & SWT 18
G paint() wird aufgerufen, aber nicht angezeigt AWT, Swing, JavaFX & SWT 10
G 2x Graphics in einer paint() miteinander verbinden AWT, Swing, JavaFX & SWT 11
M Probleme mit paint() aus JFrame AWT, Swing, JavaFX & SWT 2
G paint() Methode aus anderer klasse aufrufen? AWT, Swing, JavaFX & SWT 6
G Frage zum paint Prozess AWT, Swing, JavaFX & SWT 3
D JPanel und Paint AWT, Swing, JavaFX & SWT 2
B Gui und Zeichnen (paint ? ) AWT, Swing, JavaFX & SWT 4
L Anzeigen von fotos: ImageIcon oder BufferedImage + paint() ? AWT, Swing, JavaFX & SWT 5
G Frage zur paint-Methode (AWT) AWT, Swing, JavaFX & SWT 9
B Button anzeigen bei überschrieber paint() AWT, Swing, JavaFX & SWT 12

Ähnliche Java Themen

Neue Themen


Oben