tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
7222
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    tobitobsen82 tobitobsen82 ist offline Mitglied
    Registriert seit
    Apr 2007
    Beiträge
    13
    Tach Leude,

    komme irgendwie nich so ganz klar.

    Mein Programm besteht bislang aus 3 Klassen:
    FensterElemente mit Methoden zum Erstellen von JComponents
    Fenster mit Konstruktoren und darin der geaddeten Components und der Main-Methode
    Menu zum Erzeugen des JMenus

    In der Klasse Fenster soll nun aus einem JTextField (nameField) ein Text nach Klicken auf den OK-Button auf der Konsole ausgegeben werden.

    Bekomme von Eclipse keine Fehlermeldung angezeigt. Wenn ich das Programm ausführe kommt allerdings eine NullPointerException, die sich auf eine Zeile in meinem ActionPerformed bezieht, in der mit getText() das TextField ausgelesen werden soll.

    Ich hoffe Ihr könnt mir helfen.

    Hier nun mein bisheriger Stand.

    FensterElemente:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    
    package listener;
     
    import javax.swing.*;
     
    class FensterElemente extends JFrame{
        
        /**
         * Dateiname: FensterElemente.java
         * Compiler: Eclipse SDK 3.2.1
         * Autor: Tobias Fickinger
         * Erstellungsdatum: 17.04.07
         * Letzte Änderung: 23.04.07
         * Beschreibung des Moduls: Klasse mit Methoden zum Erstellen von Fensterkomponenten für ein GUI
         * Paket: fenster (zusammen mit: Fenster.java)
         */ 
        
        public JTextField createTextField(int size){
            /*
             * Methodenname: createTextField
             * Parameter: integer size (Festlegung der Länge des Textfields)
             * Return-Wert: panel auf das ein JTextField gelegt wurde
             * Beschreibung: Erzeugen eines leeren Textfeldes auf einem neuen Panel
             */
            JTextField elem = new JTextField("", size);
            return elem;
        }
     
        public JComponent createTextArea(int spalten, int zeilen){
            /*
             * Methodenname: createTextArea
             * Parameter: integer spalten (Festlegung der Spalten), integer zeilen (Festlegung der Zeilen der Textarea)
             * Return-Wert: panel auf das eine JTextArea gelegt wurde
             * Beschreibung: Erzeugen einer Textarea mit vorbestimmtem Inhalt und Scrollbalken auf einem neuen Panel
             */
            JTextArea elem = new JTextArea(spalten, zeilen);
            elem.append("Dieses hier ist eine Textarea. Hier lässt sich\n" +
                        "viel Kommentar einfügen\n" +
                        "\n" +
                        "");
            JPanel panel = new JPanel();
            panel.add(new JScrollPane(elem));
            return panel;
        }
     
        public JComponent createButton(String title){
            /*
             * Methodenname: createButton
             * Parameter: String title (Festlegung des Textes auf dem Button)
             * Return-Wert: panel auf das ein JButton gelegt wurde
             * Beschreibung: Erzeugen eines JButtons auf einem neuen Panel
             */
            JButton elem = new JButton(title);
            return elem;
        }
     
        public JComponent createRadioButtons(String[] title, boolean[] active)
        {
            /*
             * Methodenname: createRadioButtons
             * Parameter: String title1 (Titel des 1. RadioButton), boolean tb1 (Aktivierungsstatus des 1. Button), 
             *            String title2 (Titel des 2. RadioButton), boolean tb2 (Aktivierungsstatus des 2. Button)
             * Return-Wert: panel auf das mehrere JRadioButton gelegt werden
             * Beschreibung: Erzeugen einer Buttongroup inkl. Beschriftung und Aktivierungswert auf einem neuen Panel
             */
            JRadioButton[] rb = new JRadioButton[title.length];
              ButtonGroup group = new ButtonGroup();
                Box box = new Box(BoxLayout.Y_AXIS);
              
            for(int i = 0 ; i < title.length ; i++){
                rb[i] = new JRadioButton(title[i], active[i]);
                group.add(rb[i]);
                box.add(rb[i]);
            }
            return box;
        }
     
        public JComponent createCheckBox(String[] title, boolean[] active)
        {
            /*
             * Methodenname: createCheckBox
             * Parameter: String title1 (Titel der 1. CheckBox), boolean tb1 (Aktivierungsstatus der 1. CheckBox), 
             *            String title2 (Titel der 2. CheckBox), boolean tb2 (Aktivierungsstatus der 2. CheckBox)
             * Return-Wert: panel auf das mehrere JCheckBox gelegt werden
             * Beschreibung: Erzeugen mehrerer Checkboxen inkl. Beschriftung und Aktivierungswert auf einem neuen Panel
             */
            JCheckBox[] cb = new JCheckBox[title.length];
            Box box = new Box(BoxLayout.Y_AXIS);
              
            for(int i = 0 ; i < title.length ; i++){
                cb[i] = new JCheckBox(title[i], active[i]);
                box.add(cb[i]);
            }       
            return box;
        }
     
        public JComponent createComboBox(String[] title){
            /*
             * Methodenname: createComboBox
             * Parameter: String title1 (Titel der 1. Zeile der ComboBox), String title2 (Titel der 2. Zeile der ComboBox), 
             *            String title3 (Titel der 3. Zeile der ComboBox)
             * Return-Wert: panel auf das eine JComboBox gelegt wurde
             * Beschreibung: Erzeugen einer DropDownBox auf einem neuen Panel mit Parameterübergabe der Inhalte
             */
            JComboBox elem = new JComboBox(title);
            JPanel panel = new JPanel();
            panel.add(elem);
            return panel;
        }
        
        public JComponent createJLabel(String title){
            /*
             * Methodenname: createJLabel
             * Parameter: String title (Festlegung des Titels des JLabels)
             * Return-Wert: panel auf das ein JLabel gelegt wurde
             * Beschreibung: Erzeugen eines JLabels mit per Parameter übergebenem Inhalt auf einem neuen Panel
             */     
            JLabel label = new JLabel(title);
            JPanel panel = new JPanel();
            panel.add(label);
            return panel;
        }   
        
        public JComponent createEmptyJLabel(int anzahl)
        {
            /*
             * Methodenname: createEmptyJLabel
             * Parameter: integer anzahl (Festlegung der Anzahl an Leerzeichen zur "Verlängerung" des leeren JLabels
             * Return-Wert: panel auf das ein leeres JLabel gelegt wurde
             * Beschreibung: Erzeugen eines leeren JLabels mit per Parameter übergebener Anzahl an Leerzeichen auf einem neuen Panel
             */         
            String leerzeichen = "";
            for(int i = 0 ; i < anzahl ; i++){
                leerzeichen = leerzeichen + (" ");
            }
            JLabel label = new JLabel(leerzeichen);
            JPanel panel = new JPanel();
            panel.add(label);
            return panel;
        }   
    }

    Und hier Fenster.java:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    
    package listener;
     
    import java.awt.*;
    import java.awt.event.*;
     
    import javax.swing.*;
    import javax.swing.plaf.basic.BasicOptionPaneUI.ButtonActionListener;
    import javax.swing.text.JTextComponent;
     
    public class Fenster{
     
        /**
         * Dateiname: Fenster.java
         * Compiler: Eclipse SDK 3.2.1
         * Autor: Tobias Fickinger
         * Erstellungsdatum: 17.04.07
         * Letzte Änderung: 23.04.07
         * Beschreibung des Moduls: Hauptprogramm zur Anzeige eines simplen Fensters ohne Ereignisse. Methoden werden größtenteils aus der Klasse FensterElemente bezogen
         * Paket: fenster (zusammen mit: FensterElemente.java)
         */
        public static void main(String[] args) {
            // Instanzierung des Fensterobjekts
            ReservierungsFenster fensterobjekt = new ReservierungsFenster();
            // Sichtbarkeit festlegen
            Menu menu = new Menu();
            fensterobjekt.setJMenuBar(menu.setMenuBar());
            fensterobjekt.setVisible(true);
        }   
    }
     
    class ReservierungsFenster extends JFrame{
        private static final long serialVersionUID = 1L;
        String contentNameField;
        public JTextField nameField;
        
        // Konstruktoren
        
        public ReservierungsFenster(){
            // Konstruktoraufruf mit Parameter für Titelname des Fensters
            this("Platzreservierung");
        }
        
        public ReservierungsFenster( String titel ){
            super(titel);
            setSize(420,400);
            
            //Elemente holen
            FensterElemente element = new FensterElemente();
     
            // Gridbaglayout holen
            
            GridBagLayout gbl = new GridBagLayout();
            GridBagConstraints constr = new GridBagConstraints();
     
            // ContentPane holen
            
            Container cpane = this.getContentPane();
            cpane.setLayout (new BorderLayout());
            
            // Panels holen und mit GridBagLayout versehen
     
            JPanel topPanel = new JPanel();
            JPanel downPanel = new JPanel ();
            topPanel.setLayout(gbl);
            downPanel.setLayout(gbl);
            
            // Panel "oben" mit Elementen aus der Klasse FensterElemente füllen
            
            //JLabel erstellen
            constr.gridx = 1;   //Spalte
            constr.gridy = 0;   //Zeile
            constr.anchor = GridBagConstraints.CENTER;      
            topPanel.add(element.createJLabel("Sitzplatzreservierung"), constr);
            
            //JLabel erstellen
            constr.gridx = 0;
            constr.gridy = 1;
            constr.anchor = GridBagConstraints.EAST;
            topPanel.add(element.createJLabel("Name"), constr);
            
            //TextField erstellen
            constr.gridx = 1;
            constr.gridy = 1;
            constr.anchor = GridBagConstraints.EAST;
            JTextField nameField = element.createTextField(20);
            topPanel.add(nameField, constr);        
            
            //JLabel erstellen
            constr.gridx = 0;
            constr.gridy = 2;
            constr.anchor = GridBagConstraints.EAST;
            topPanel.add(element.createJLabel("Email"), constr);        
     
            //TextField erstellen
            constr.gridx = 1;
            constr.gridy = 2;
            constr.anchor = GridBagConstraints.EAST;
            topPanel.add(element.createTextField(20), constr);
            
            //Button erstellen
            constr.gridx = 2;
            constr.gridy = 3;
            constr.anchor = GridBagConstraints.WEST;
            JButton button = (JButton) element.createButton("OK");
            topPanel.add(button, constr);
            EventHandling bl = new EventHandling(); 
            button.addActionListener(bl);       
     
            //TextArea erstellen
            constr.gridx = 1;
            constr.gridy = 4;
            constr.anchor = GridBagConstraints.CENTER;
            topPanel.add(element.createTextArea(3,19), constr);  
     
            //Panel "unten" mit Elementen aus der Klasse FensterElemente füllen
     
            //RadioButtons erstellen
            constr.gridx = 0;
            constr.gridy = 1;
            constr.anchor = GridBagConstraints.WEST;
            String[] title = new String[]{"Raucher", "Nichtraucher"};
            boolean[] active = new boolean[]{ true, false};
            downPanel.add(element.createRadioButtons(title, active), constr);
     
            //ComboBox erstellen
            constr.gridx = 1;
            constr.gridy = 1;
            constr.anchor = GridBagConstraints.NORTHWEST;
            String[] content = new String[]{"Fensterplatz","Mittelgang","Loge","Schlafplatz"};
            downPanel.add(element.createComboBox(content), constr);
            
            //Leeres JLabel erstellen
            constr.gridx = 2;
            constr.gridy = 1;
            constr.anchor = GridBagConstraints.WEST;
            downPanel.add(element.createEmptyJLabel(30), constr);       
     
            //Checkboxen erstellen
            constr.gridx = 3;
            constr.gridy = 1;
            constr.anchor = GridBagConstraints.EAST;
            constr.gridwidth = GridBagConstraints.REMAINDER;
            String[] inhalt = new String[]{"Handgepäck","Koffer"};
            boolean[] status = new boolean[]{false,true};
            downPanel.add(element.createCheckBox(inhalt,status), constr);
            
            //Leeres JLabel erstellen
            constr.gridx = 0;
            constr.gridy = 2;
            constr.anchor = GridBagConstraints.WEST;
            downPanel.add(element.createEmptyJLabel(30), constr);
            
            //Leeres JLabel erstellen
            constr.gridx = 0;
            constr.gridy = 3;
            constr.anchor = GridBagConstraints.WEST;
            downPanel.add(element.createEmptyJLabel(30), constr);
            
            //Leeres JLabel erstellen
            constr.gridx = 0;
            constr.gridy = 4;
            constr.anchor = GridBagConstraints.WEST;        
            downPanel.add(element.createEmptyJLabel(30), constr);        
        
            
            // fertige topPanel und downPanel auf cpane legen
            cpane.add(topPanel, BorderLayout.NORTH);
            cpane.add(downPanel, BorderLayout.SOUTH); 
        }
        class EventHandling implements ActionListener{
            public void actionPerformed(ActionEvent event){ 
                contentNameField = nameField.getText();
                System.out.println("Inhalt NameField: " + contentNameField);
            }   
        }
    }//Ende der Klasse ReservierungsFenster
     

  2. #2
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Hallo,

    du legst das Textfeld einmal als Klassenvariable an, das ist ja schon mal richtig
    Code java:
    1
    2
    3
    4
    
    class ReservierungsFenster extends JFrame{
        private static final long serialVersionUID = 1L;
        String contentNameField;
        public JTextField nameField;

    und du legst es einmal bei hinzufügen zum Panel an
    Code java:
    1
    2
    3
    4
    5
    6
    
     //TextField erstellen
            constr.gridx = 1;
            constr.gridy = 1;
            constr.anchor = GridBagConstraints.EAST;
            JTextField nameField = element.createTextField(20);
            topPanel.add(nameField, constr);

    Damit hast du es ja in einer ganz anderen Variablen gespeichert als du in der actionPerformed nutzt. Hier solltest du es nicht neu anlegen.

    Code java:
    1
    2
    3
    4
    5
    6
    
     //TextField erstellen
            constr.gridx = 1;
            constr.gridy = 1;
            constr.anchor = GridBagConstraints.EAST;
            nameField = element.createTextField(20);
            topPanel.add(nameField, constr);

    So müsste es nun funktionieren.

    MFG

    zEriX
     

  3. #3
    tobitobsen82 tobitobsen82 ist offline Mitglied
    Registriert seit
    Apr 2007
    Beiträge
    13
    Vielen Dank. Genau das wars. Funktioniert wunderbar
     

Ähnliche Themen

  1. Button nach Klick schließen
    Von natze90 im Forum Flash Plattform
    Antworten: 1
    Letzter Beitrag: 02.01.10, 19:37
  2. Access Button nach klick deaktivieren
    Von Qwester im Forum Visual Basic 6.0
    Antworten: 4
    Letzter Beitrag: 22.10.07, 11:50
  3. Button soll nach den klick anders sein
    Von jasher im Forum Flash Plattform
    Antworten: 1
    Letzter Beitrag: 26.09.06, 07:04
  4. Antworten: 8
    Letzter Beitrag: 30.04.06, 16:46
  5. Antworten: 2
    Letzter Beitrag: 07.03.06, 14:55