Grafik Fehler

Seppel

Bekanntes Mitglied
Hallo habe folgenden Fehler im Programm:
Nach dem start kann man die Menüleiste aufmachen siehe Link1.
Aber wenn man in irgend ein JTextfield etwas schreibt geht es nicht mehr, siehe link 2

Hier die zwei Bilder:
Image - TinyPic - Free Image Hosting, Photo Sharing & Video Hosting

Image - TinyPic - Free Image Hosting, Photo Sharing & Video Hosting

wenn man über einen Button oder durch eine andere Funktion den Inhalt aller Textfelder aktualiesiert, geht es wieder.

Wie bekomme ich den Fehler im Griff?
 
das sieht nach einem typischen Layout-Fehler, oder/und nach der Kombination von AWT und Swing-Elementen aus...ohne Code wird man da nicht viel sagen können.
 
Gut hier ist er:
Java:
import javax.imageio.ImageIO;
import javax.swing.*;

import java.awt.*; 
import java.awt.event.*;
import java.awt.geom.AffineTransform;
import java.io.*;


import java.util.regex.*;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;

public class Cronik2 extends JFrame implements AdjustmentListener {
 private static final long serialVersionUID = 1L;
	
  //Bilddaten   
  int m_Xpos,m_Ypos; 
  Image   m_aktBild;
  JFrame m_fenster = new JFrame();
  String m_dateiname;
  int m_bild_x1,m_bild_y1;        // die aktuelle Begrenzung 
  int m_bild_x2,m_bild_y2;        // des Bildes
  int m_bildHoehe,m_bildBreite;
  
  //allgemeine Infos
  int akt_person;						//wer wird angezeigt
  int MAX_PERSONEN=1000;				//maximale anzahl an datensätze
  String Cronikname, OrdnerCronikname;	//verzeichniss struktur der geöffneten Datei
  int status_auswahl_ehepartner=0;		//Um Ehepartner auszuwählen

  //datenbank
  String[][] Datenbank=new String[MAX_PERSONEN][100];
  String[][][] Beruf=new String[MAX_PERSONEN][10][2];
  String[][][] Ehepartner=new String[MAX_PERSONEN][20][3];
  String[][]Eltern=new String[MAX_PERSONEN][3];
  String[][]Geschwister=new String[MAX_PERSONEN][20];
  String[][]Kinder=new String[MAX_PERSONEN][20];
  
  //Textfelder
  JTextField textfeld[] =new JTextField[22];
  JComboBox p_beruf =new JComboBox();
  JTextArea p_notiz =new JTextArea("",5,10);
  JTextArea p_notallg =new JTextArea("",5,10);
  JComboBox p_ehe =new JComboBox();

  JList list = new JList();
  JList list2 = new JList();
  JList list3 = new JList();
  JLabel p_num =new JLabel("Datennummer:");
  JLabel p_nummer =new JLabel("Keine Nummer");

  CBildLeinwand m_bildanzeige ;
  JScrollBar bildlaufleiste = new JScrollBar(SwingConstants.HORIZONTAL,1,1,1,11);
  ActionListener listener;

  //####################################################################################################################
  public JMenuItem addMenuItem(String itemLabel, JMenu menu){
      JMenuItem item = new JMenuItem(itemLabel);
      item.addActionListener(listener);
      return menu.add(item);
  }
  
  public static void main(String[] args) {
	Cronik2 fenster = new Cronik2 ("FamilienCronik2");	
    fenster.pack();
    fenster.setSize(1000,900);
    fenster.setResizable(false);
    fenster.setVisible(true); 
  }
  
  // Im Konstruktor werden die Canvas-Malfläche und 
  // Schaltflächen zur Auswahl der Funktionen angelegt
   Cronik2 (String titel) {
    super(titel);

    GridBagLayout gbl = new GridBagLayout();
    GridBagConstraints gbc = new GridBagConstraints();

    // Die Ereignisbehandlung für die Schaltflächen
    class CMeinActionLauscher implements ActionListener {
      public void actionPerformed(ActionEvent e) {
          String label;

          label = e.getActionCommand();

          if (label.equals("Cronik laden")) {dateiladen();}
          if (label.equals("Cronik speichern")) {}
          if (label.equals("Programm beenden")) {System.exit(0);}
          if (label.equals("Neue Person")) {}
          if (label.equals("Stammbaum anzeigen")) {}
          if (label.equals("Aktuelle Person bearbeiten")) {       	  
        	  System.out.println("job");
          }             
          if (label.equals("Ändern(Job)")) {
        	  System.out.println("job");
        	  jobbearbeitenfenster NeueCronik_person =new jobbearbeitenfenster ("Person bearbeiten"); 
        	  NeueCronik_person.pack();
        	  NeueCronik_person.setSize(200,180);
        	  NeueCronik_person.setResizable(false);
        	  NeueCronik_person.setVisible(true);
          }
          if (label.equals("Ändern(Ehe)")) {System.out.println("Ehe");}
          if (label.equals("Entwickler")) {
        	  entwicklerfenster NeueCronik_entwickler =new entwicklerfenster ("Entwickler"); 
        	  NeueCronik_entwickler.pack();
        	  NeueCronik_entwickler.setSize(400,80);
        	  NeueCronik_entwickler.setResizable(false);
        	  NeueCronik_entwickler.setVisible(true);          	  
          }
          if (label.equals("Person suchen")) {suchewahl();}    
          if (label.equals("Vater zeigen")) {suche(true,false,"");}    
          if (label.equals("Mutter zeigen")) {suche(false,true,"");}  
          if (label.equals("Neue Cronik")) {        
        	  neuecronikerstellenfenster NeueCronik =new neuecronikerstellenfenster ("FamilienCronik2"); 
        	  NeueCronik.pack();
        	  NeueCronik.setSize(200,100);
        	  NeueCronik.setResizable(false);
        	  NeueCronik.setVisible(true);
          }            
      }        
    }  
    //Für ehe combo
    
    class CMeinActionLauschercombo implements ItemListener {
        public void itemStateChanged(ItemEvent e) {
            status_auswahl_ehepartner=0;
        }
    }
    class Actioncombo extends MouseAdapter{
        JComboBox combo;
        public Actioncombo(JComboBox l){combo = l;}    
        public void mouseClicked(MouseEvent e){
        	status_auswahl_ehepartner++;
        	System.out.println(status_auswahl_ehepartner);
        	if (status_auswahl_ehepartner>=2) {
        		status_auswahl_ehepartner=0;
        		int index = combo.getSelectedIndex();
        		if (!(combo.getSelectedItem()).equals("Neu")){
        		akt_person=Integer.parseInt (Ehepartner[akt_person][index][0])-1;
        		eintragen();
        		}
        				
        	}
        	
        }
       }
    //Listen
    class ActionJList extends MouseAdapter{
      JList listen;
      public ActionJList(JList l){listen = l;}      

      public void mouseClicked(MouseEvent e){
       int index = listen.locationToIndex(e.getPoint());

       ListModel dlm = listen.getModel();

       Object item = dlm.getElementAt(index);
       
       String name=item + "";
       if (!(name.equals("null"))) suche(false,false,name);
       System.out.println(":" +name+":");
      }
     }
    
    //einfügend er Objekte ohne Schaltfläschen
    Panel panel1 = new Panel();
    panel1.setLayout(gbl);   
    gbc.fill =GridBagConstraints.BOTH;

    // Die Abständer der einzelnen GUI-Elemente zu den gedachten Gitterlinien festgelegen:
    gbc.insets = new Insets(2,2,2,2);  

    //Menü  #####################################################################################################
    listener= new CMeinActionLauscher();
    JMenuBar menueleiste =new JMenuBar();
    JMenu menu1 =new JMenu("Programm");
    JMenu menu2 =new JMenu("Datenbank");
    JMenu menu3 =new JMenu("Weiteres");
    
    JMenuItem[] items1 = {addMenuItem("Neue Cronik", menu1), 
    					addMenuItem("Cronik laden", menu1),
    					addMenuItem("Cronik speichern", menu1),
    					addMenuItem("Programm beenden", menu1)    					
    					};
    JMenuItem[] items2 = {addMenuItem("Neue Person", menu2), 
						addMenuItem("Aktuelle Person bearbeiten", menu2),
						addMenuItem("Vater zeigen", menu2),
						addMenuItem("Mutter zeigen", menu2),
						addMenuItem("Person suchen", menu2),
						addMenuItem("Person suchen", menu2)  						
						}; 
    JMenuItem[] items3 = {addMenuItem("Entwickler", menu3)}; 

    menueleiste.add(menu1);
    menueleiste.add(menu2);
    menueleiste.add(menu3);
    setJMenuBar(menueleiste);

    // Infos  #####################################################################################################
    JLabel text[] =new JLabel [23];
    text[0] =new JLabel("Name: ",JLabel.RIGHT);
    text[1] =new JLabel("Vorname: ",JLabel.RIGHT);
    text[2] =new JLabel("Geburtsname: ",JLabel.RIGHT);
    text[3] =new JLabel("w. Name: ",JLabel.RIGHT);
    text[4] =new JLabel("geboren am: ",JLabel.RIGHT);
    text[5] =new JLabel("geboren in: ",JLabel.RIGHT);
    text[6] =new JLabel("Geschlecht: ",JLabel.RIGHT);
    text[7] =new JLabel("getauft am: ",JLabel.RIGHT);
    text[8] =new JLabel("getauft in: ",JLabel.RIGHT);
    text[9] =new JLabel("Konfession: ",JLabel.RIGHT);
    text[10] =new JLabel("Beruf",JLabel.RIGHT);
    text[11] =new JLabel("Notiz: ",JLabel.RIGHT);
    text[12] =new JLabel(" ",JLabel.RIGHT);
    text[13] =new JLabel(" ",JLabel.RIGHT);
    text[14] =new JLabel(" ",JLabel.RIGHT);
    text[15] =new JLabel(" ",JLabel.RIGHT);
    text[16] =new JLabel("Ehepartner: ",JLabel.RIGHT);
    text[17] =new JLabel("Hochzeit am: ",JLabel.RIGHT);
    text[18] =new JLabel("Hochzeit in: ",JLabel.RIGHT);
    text[19] =new JLabel("gestorben am: ",JLabel.RIGHT);
    text[20] =new JLabel("gestorben in: ",JLabel.RIGHT);
    text[21] =new JLabel("beerdigt am: ",JLabel.RIGHT);
    text[22] =new JLabel("beerdigt in: ",JLabel.RIGHT);

    gbc.weighty=0;
    gbc.gridx = 0; 
    gbc.gridheight = 1; 
    gbc.gridwidth = 1;		
    gbc.gridy = 1;

    for(int i = 0; i < text.length; i++){
        gbl.setConstraints(text[i], gbc);
        panel1.add(text[i]);
        gbc.gridy = gbc.gridy  + 1;
        }        
    
    //Listen     #####################################################################################################
    JLabel p_gesch =new JLabel("Geschwister:");
    JLabel p_eltern =new JLabel("Eltern:");
    JLabel p_kinder =new JLabel("Kinder:");
    gbc.gridy = 1;
    gbc.gridx = 4; 
    gbc.gridheight = 1;
    gbl.setConstraints(p_gesch , gbc);
    panel1.add(p_gesch );
    gbc.gridy = 19;
    gbl.setConstraints(p_eltern , gbc);
    panel1.add(p_eltern );
    gbc.gridy = 10;
    gbl.setConstraints(p_kinder , gbc);
    panel1.add(p_kinder);

    gbc.gridy = 2;
    gbc.gridheight = 8;
    gbc.gridwidth = 1;	
    gbl.setConstraints(list, gbc);
    panel1.add(list);
    gbc.gridy = 11;
    gbc.gridheight = 8;
    gbl.setConstraints(list3, gbc);
    panel1.add(list3);
    gbc.gridy =20;
    gbc.gridheight = 3;
    gbl.setConstraints(list2, gbc);
    panel1.add(list2);
    list.addMouseListener(new ActionJList(list));
    list2.addMouseListener(new ActionJList(list2));
    list3.addMouseListener(new ActionJList(list3));
    list.setBorder(BorderFactory.createLineBorder(Color.BLACK));  
    list2.setBorder(BorderFactory.createLineBorder(Color.BLACK));  
    list3.setBorder(BorderFactory.createLineBorder(Color.BLACK));  
   
    //Eintrageflächen   #####################################################################################################
    gbc.gridx = 1; 
    gbc.gridheight = 1;  
    gbc.gridwidth = 2;		
    gbc.gridy = 1;
    
    for(int i = 0; i < textfeld.length; i++){
    	textfeld[i] =new JTextField(10);
        }     

    for(int i = 0; i < 10; i++){
        gbl.setConstraints(textfeld[i], gbc);
        panel1.add(textfeld[i]);
        gbc.gridy = gbc.gridy  + 1;
        }   
        
    gbc.gridy = 11;
    gbc.gridwidth = 1;		
    gbl.setConstraints(p_beruf, gbc);
    p_beruf.setPrototypeDisplayValue("XXXXXXXXXXXXXXXXXXXXXXXXX"); 
    panel1.add(p_beruf);
    gbc.gridx = 2;
    gbc.gridheight = 3;  
    JButton p_beruf_ändern = new JButton("Ändern(Job)");    
    p_beruf_ändern.addActionListener(new CMeinActionLauscher());
    p_beruf_ändern.setVerticalAlignment(SwingConstants.TOP);    
    Font drehen_von_schrift = p_beruf_ändern.getFont();
    AffineTransform at = new AffineTransform();		    
    at.rotate( 1.57d );	
    p_beruf_ändern.setFont(drehen_von_schrift.deriveFont( at ));         
    gbl.setConstraints(p_beruf_ändern , gbc);
    panel1.add(p_beruf_ändern);
    gbc.gridx = 1;
    gbc.gridwidth = 1;	
    gbc.gridy = 12;
    gbc.gridheight = 5;  
    p_notiz.setEditable(true);  
    gbl.setConstraints(p_notiz, gbc);
    p_notiz.setLineWrap(true);
    JScrollPane scroll_notiz =new JScrollPane();
    scroll_notiz.getViewport().add(p_notiz);
    scroll_notiz.getViewport().setView(p_notiz);    
    panel1.add(p_notiz);
    gbc.gridy = 17;
    gbc.gridheight = 1;  
    gbc.gridwidth = 1;	
    p_ehe.setPrototypeDisplayValue("XXXXXXXXXXXXXXXXXXXXXXXXX"); 
    gbl.setConstraints(p_ehe, gbc);
    panel1.add(p_ehe);
    p_ehe.addItemListener(new CMeinActionLauschercombo());
    p_ehe.addMouseListener(new Actioncombo(p_ehe));
    gbc.gridx = 2;    
    gbc.gridheight = 3;  
    JButton p_ehe_ändern = new JButton("Ändern(Ehe)"); 
    p_ehe_ändern.addActionListener(new CMeinActionLauscher());
    p_ehe_ändern.setVerticalAlignment(SwingConstants.TOP);
    drehen_von_schrift = p_ehe_ändern.getFont(); 
    p_ehe_ändern.setFont(drehen_von_schrift.deriveFont( at )); 
    gbl.setConstraints(p_ehe_ändern , gbc);
    panel1.add(p_ehe_ändern);
    gbc.gridheight = 1;  
    gbc.gridx = 1;
    gbc.gridwidth = 1;	
    gbc.gridy = 18;
        
    for(int i = 10; i < 16; i++){
        gbl.setConstraints(textfeld[i], gbc);
        panel1.add(textfeld[i]);
        gbc.gridy = gbc.gridy  + 1;
        if (i==11)  gbc.gridwidth = 2;	
        }       
    
    JLabel text21 =new JLabel("....................................................................................................................................................................................................................................................................................................................................................... ");
    gbc.gridy = 24;
    gbc.gridwidth = 6;	
    gbc.gridx=0; 
    gbl.setConstraints(text21 , gbc);
    panel1.add(text21 );

    //Bildfläsche    ##################################################################################################### 
    m_bildanzeige = new CBildLeinwand();
    m_dateiname = null;
    m_aktBild = null;
    gbc.gridx=3; 
    gbc.gridy=1; 
    gbc.gridwidth = 1;	
    gbc.gridheight = 22; 
    m_bildanzeige.setPreferredSize(new Dimension(50, 100));
    gbl.setConstraints(m_bildanzeige, gbc);
    panel1.add(m_bildanzeige);  

    gbc.gridx=3; 
    gbc.gridy=23; 
    gbc.gridheight = 1; 
    gbl.setConstraints(bildlaufleiste, gbc);
    bildlaufleiste.addAdjustmentListener(this);
    panel1.add(bildlaufleiste);

    //breite festlegen   #####################################################################################################   
    gbc.gridwidth = 1;	
    gbc.gridheight = 1;  
    JLabel breite1 =new JLabel(".............................................");
    gbc.gridy = 0;
    gbc.gridx=0; 
    gbl.setConstraints(breite1 , gbc);
    panel1.add(breite1);
    JLabel breite2 =new JLabel(".........................................................................................");
    gbc.gridy = 0;
    gbc.gridx=1; 
    gbc.gridwidth = 2;	
    gbl.setConstraints(breite2 , gbc);
    panel1.add(breite2 );
    JLabel breite3 =new JLabel("...........................................................................................................................................");
    gbc.gridy = 0;
    gbc.gridx=3; 
    gbc.gridwidth = 1;	
    gbl.setConstraints(breite3 , gbc);
    panel1.add(breite3 ); 
    JLabel breite4 =new JLabel("........................................................");
    gbc.gridy = 0;
    gbc.gridx=4; 
    gbl.setConstraints(breite4 , gbc);
    panel1.add(breite4 );
    JLabel breite5 =new JLabel("....");
    gbc.gridy = 0;
    gbc.gridx=5; 
    gbl.setConstraints(breite5 , gbc);
    panel1.add(breite5 );

    //allgemeinenotizen   ##################################################################################################### 
    gbc.gridy = 25;
    gbc.gridx = 0; 
    gbc.gridheight = 3;  
    gbc.gridwidth = 6;	
    gbc.weighty  =1;
    p_notallg.setEditable(true);
    p_notallg.setLineWrap(true);
    JScrollPane scroll_notiz2 =new JScrollPane();
    scroll_notiz2.getViewport().add(p_notallg);
    scroll_notiz2.getViewport().setView(p_notallg);  
    p_notallg.setBorder(BorderFactory.createLineBorder(Color.BLACK));  
    gbl.setConstraints(p_notallg, gbc);
    panel1.add(p_notallg);
                
    //Alles aufnehmen   ##################################################################################################### 
    setLayout(new BorderLayout());
    add(panel1, BorderLayout.CENTER);     
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
  }

  public void adjustmentValueChanged(AdjustmentEvent evt) {
...  }
   
  // Eine Bilddatei laden
  public void bildladen() {    
....     
  }

  public void eintragen(){
...  }

  public void suche(boolean vater,boolean mutter, String name){
...  }

  //Cronik laden
  void dateiladen() {
   ...  } // Ende von 'dateiLaden' 

  // Diese Klasse dient zum Anzeigen und Manipulieren des Bildes
  class CBildLeinwand extends JPanel {
...
  }
  
  //Weitere Fenster
  public class neuecronikerstellenfenster extends JFrame{
	...	  
  }  
  
  public class jobbearbeitenfenster extends JFrame{
	...	  
  } 
  
  public class entwicklerfenster extends JFrame{
		...	  	  
  } 
}
 
das ist dann natürlich kein Grafikfehler...sondern irgendein Listener -oder wer auch immer- blockiert etwas im EDT (wahrscheinlich)

anbei mal deine oberfläche...ohne irgendwelche Listener, da lässt sich das prob nicht nachvollziehen.
ich habe aus der überschrift deines Themas und dem Bild falsche Schlüsse gezogen, sry
 

Anhänge

Ist doch kein Problem, du hast doch das Problem gefunden.
die Listener sind aer nötig, wie kann man das Problem eventuell beheben?
 
alle rechenintensiven Operationen in einen eigenen Thread auslagern...also bspw. das laden von Bildern, oder Datenbankzugriffe.

Oder du lebst damit halt, dass deine Oberfläche einfriert...wieso du überhaupt soviele JFrames in deinem Programm hast, ist mir ein wenig schleierhaft. Ein Programm sollte imho einen Frame haben!

Aber grundsätzlich ist das -zumindest für mich- schwer nachvollziehbar, ob es tatsächlich daran liegt.
Das einfachste zur Fehleranalyse wäre ein KSKB zu posten, wo sich dieser Fehler reproduzieren lässt...dann kann man dir sicherlich weitaus besser helfen. Kann ja auch gut möglich sein, dass der eine Listener, einen anderen Listener aufruft und sich so eine Endlosschleife bildet...oder oder oder
 
Also damit leben will ich ne, das versaut ja das Programm.
Werde jetzt erstmal Methode für Methode durchgehen und den Fehler suchen.

Habe auch mal alle Listener zu Kommentaren gemacht, aber es wollte ne funktionieren, ich dachte du hast auch nur das gemacht?

JFrames: NA das Hauptfenster, und eventuell nebenfenster für bestimmte Eingaben, an dennen leigt es aber auch nicht, in einer vorherigen Version waren die noch ne da und es ging dennoch nicht
 
jo, alles erstmal auskommentiert...was ich nicht kannte, bzw. was du mir nicht geliefert hast..
evtl. kannst du dann anfangen reinzukommentieren...und immer prüfen, ab wann es nicht mehr funzt!
oder stelle das ganze Projekt mal online..?!
 
So hab mal alles gekürzt, der Fehler ist noch da:
Java:
import javax.swing.*;
import java.awt.*; 

public class Cronik2 extends JFrame  { //implements AdjustmentListener
	
  //Textfelder
  JTextField textfeld[] =new JTextField[1];  

  public static void main(String[] args) {
	Cronik2 fenster = new Cronik2 ("FamilienCronik2");	
    fenster.pack();
    fenster.setSize(1000,900);
    fenster.setResizable(false);
    fenster.setVisible(true); 
  }
  
  // Im Konstruktor werden die Canvas-Malfläche und 
  // Schaltflächen zur Auswahl der Funktionen angelegt
   Cronik2 (String titel) {
    super(titel);

    GridBagLayout gbl = new GridBagLayout();
    GridBagConstraints gbc = new GridBagConstraints();
   
    Panel panel1 = new Panel();
    panel1.setLayout(gbl);   
    gbc.fill =GridBagConstraints.BOTH;

    JMenuBar menueleiste =new JMenuBar();
    JMenu menu1 =new JMenu("Programm");
    
    JMenuItem item = new JMenuItem("Neue Cronik");
    menu1.add(item);
    menueleiste.add(menu1);
    setJMenuBar(menueleiste);
    
    textfeld[0] =new JTextField(10);
    gbl.setConstraints(textfeld[0], gbc);
    panel1.add(textfeld[0]); 
    add(panel1);
   }
}

An was kann es jetzt noch liegen? Jframes, Listener, alle Funktionen die viel resourcen brauchen sind weg? Hoffentlich hat hier jemand ne antwort darauf danke
 
evtl....am Code liegt es sicherlich nicht, oder hat irgendjemand anders (außer du^^) die gleichen Probleme?

edit:
jepp, das kann so vieles sein...vista ist natürlich für sowas sehr zuträglich^^
 
na ganz toll, mit c hatte ich schon ständig sollche Probleme, jetzt auch noch mit Java, ob es eher beim ausführen oder beim komplementiern probleme gibt?
beim zweiten kann ich ja auch mal auf einen anderen rechner gehen, Ausführen sollte dann ja eigentlich überall gehen, sonst wäre das Argument Plattform unabhänig ja blödsinn
 
Es liegt nur an den JTextfields, wenn ich in eine Liste oder in eine Combobox was nein schreib geht alles nur bei den TExtfeldern nicht, werd sie einfach disablen, und die bearbeitung über ein seperates fenster abwickeln, das wäre hoffentlih eine Lösung


edit: wie heißt der Befehl mit dem alle Komenten neu gezeichnet werden? (der Inhalt sollte aber stehen bleiben)
 
Zuletzt bearbeitet:
heute schon, ich dachte gestern hatte es funktioniert, kann aber sein das ig mich irre.

gut probier ich heite abend mal aus, danke
vileicht geht das dann

habe einen anderen gefunden, aber bei js, der auch so ein Problem hatte, bei ihm war die Menü Ebene hinter dem rest.
gibt es hier in java6 auch Ebenen?
 

Zurück
Oben