ERLEDIGT
NEIN
NEIN
ANTWORTEN
2
2
ZUGRIFFE
7222
7222
EMPFEHLEN
-
26.04.07 16:41 #1
- 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
-
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
-
26.04.07 23:20 #3
- Registriert seit
- Apr 2007
- Beiträge
- 13
Vielen Dank. Genau das wars. Funktioniert wunderbar
Ähnliche Themen
-
Button nach Klick schließen
Von natze90 im Forum Flash PlattformAntworten: 1Letzter Beitrag: 02.01.10, 19:37 -
Access Button nach klick deaktivieren
Von Qwester im Forum Visual Basic 6.0Antworten: 4Letzter Beitrag: 22.10.07, 11:50 -
Button soll nach den klick anders sein
Von jasher im Forum Flash PlattformAntworten: 1Letzter Beitrag: 26.09.06, 07:04 -
Submit-Button nach Klick auf Radio-Button aktivieren
Von altox-de im Forum PHPAntworten: 8Letzter Beitrag: 30.04.06, 16:46 -
Win-API Schriftzug vom Button nach jedem Klick ändern?
Von FBIagent im Forum C/C++Antworten: 2Letzter Beitrag: 07.03.06, 14:55





Zitieren

Login





