Swing-Komponenten während der Laufzeit hinzufügen

enrix

Mitglied
Hallo, ich habe noch einmal ein Problem. Meine Übungsaufgaben werden nun schwerer. Ich soll ein Formular erzeugen und wenn ich während der Laufzeit auf einen Button klicke soll sich eine Tabelle zeigen.

ich habe mir das so gedacht, dass ich eine methode (setAbakus) in der Formular-klasse schreibe in der einfach ein JTable erzeugt wird und die entsprechenden GridBagConstraints.
Nun sollte man während der Laufzeit auf den Button klicken. der wiederum löst die actionPerformed-methode im FormListener aus. Und in dieser Methode greife ich mithilfe des Formularobjektes auf die setAbakus-Methode zu

So sieht meine Formular-Klasse aus
wie man sieht ist die setAbakus-methode für nachträgliche Ergänzungen im Formular gedacht.
Code:
public Form() {

    }
    
    public void init(){
         
        setBackground(Color.MAGENTA);

        setLayout(L);

        c = build_c(0,0,1,3,100,0);
        c.fill = GridBagConstraints.BOTH;
        L.setConstraints(Edit1, c);
        add(Edit1);

        //Zwei AusgabeFelder
        c = build_c(1,0,1,1,0,0);
        c.fill=GridBagConstraints.NONE;
        JLabel l_dez = new JLabel("Dezimal");
        L.setConstraints(l_dez, c);
        add(l_dez);

        c = build_c(1,1,1,1,0,0);
        c.fill=GridBagConstraints.NONE;
        JLabel l_bin = new JLabel("Binary");
        L.setConstraints(l_bin, c);
        add(l_bin);

        //zwei Textfelder
         c = build_c(2,0,1,1,100,0);
        c.fill=GridBagConstraints.HORIZONTAL;
        L.setConstraints(Edit2, c);
        add(Edit2);

        c = build_c(2,1,1,1,100,0);
        c.fill=GridBagConstraints.HORIZONTAL;
        L.setConstraints(Edit3, c);
        add(Edit3);

        //Button
        But.addActionListener(new FormListener());
        c = build_c(0,4,1,1,20,0);
        c.fill=GridBagConstraints.LINE_START;
        L.setConstraints(But, c);
        add(But);

        //abakuslayout efinieren
       
       


      


        pack();
    }

    public void setAbakus(){
         //abakuslayout efinieren
        JTable abakus = new JTable(4, 8);



     abakus.setSelectionBackground(Color.black);
     abakus.setSelectionForeground(Color.GREEN);
     abakus.setForeground(Color.blue);
     abakus.setBackground(Color.GREEN);
     abakus.setGridColor(Color.YELLOW);




        c = build_c(1,12,1,1,0,0);
        c.fill=GridBagConstraints.NONE;
        L.setConstraints(abakus,c);
        add(abakus);

        pack();

    }

Hier sieht man die Klasse FormListener, welche zu gleich ein Objekt des Formulars erzeugt. Und die Methide setAbakus aufrufen soll fall Button geklickt wurde

Code:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package binaryconverter;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
 *
 * @author Henry
 */
public class FormListener implements ActionListener {

    private Form Form1;
    
   

    public void createForm(){
        Form1 = new Form();
        Form1.init();

        Form1.setVisible(true);
        Form1.setLocation(100, 100);
        Form1.setSize(500,700);
    }


    public void actionPerformed(ActionEvent arg0) {
          System.out.println(arg0.getSource().getClass());
        System.out.println(arg0.getSource());
        
                
        
        
        if(arg0.getActionCommand().equals("Einlesen")){
           
            
            Form1.setAbakus();            
           ;
        }else{
            System.out.println("das hat nicht geklappt");
        }
    }



  


}

Leider geht die Sache total gegen den Baum.
Bekomme folgende Exceptions:
Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at binaryconverter.FormListener.actionPerformed(FormListener.java:41)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1882)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2202)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:5602)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3135)
        at java.awt.Component.processEvent(Component.java:5367)
        at java.awt.Container.processEvent(Container.java:2010)
        at java.awt.Component.dispatchEventImpl(Component.java:4068)
        at java.awt.Container.dispatchEventImpl(Container.java:2068)
        at java.awt.Component.dispatchEvent(Component.java:3903)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4256)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3936)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3866)
        at java.awt.Container.dispatchEventImpl(Container.java:2054)
        at java.awt.Window.dispatchEventImpl(Window.java:1801)
        at java.awt.Component.dispatchEvent(Component.java:3903)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:176)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)


Hat vielleicht jemand einen Tipp wieso meine Überlegung falsch ist?

MFG Enrix
 
Folgende Vermutung:
beim aufruf von actionperformed willst du forml.setabakus aufrufen, hast aber forml noch nicht initialisiert. Versuch mal als erstes in actionPerformed system.out.println(forml)... Wenn das null gibt, weisst du wo das Problem liegt.

Gruss
.bile
 
Zurück