Hallo,
Mein Projekt wird immer Komplizierter und nun habe ich einen Fehler den ich nicht Lösen kann.
Ich möchte euch zuviel Code ersparen und Poste hier mal nur die stellen die es betrifft:
Ich habe ein UI welches auf Knopfdruck verschiedene Dialoge öffnet in denen man in Textfeldern etwas reinschreiben kann.
Hier ist eine Klasse welche lediglich mitzählt wieviele JTextFields in diesem Dialog erzeugt wurden und das jeweilige JTextField an eine Methode weitergibt in der Klasse Dialog.
Da man vorher nicht weiss wieviele Textfelder der Benutzer braucht habe ich es so gemacht das der User beliebig viele erzeugen kann mit Knopfdruck. Die erzeugten werden gezählt und zur folgenden Methode weitergegeben:
Diese Methode erstellt ein Array welches mitwächst und die JTextFields enthält, damit ich später eine Adresse habe an die ich mich richten kann, wenn ich wissen will was nun reingeschrieben wurde.
Am Ende sollen die JTextFields die im Array sind, wenn ich auf den okay Button klicke, die eingegebenen Texte in ein das stringArray übertragen. Mit folgender Methode:
Im ActionListener des betreffenden "Okay"-Buttons steht diese Methode drin.
Da es sich noch immer um den selben Dialog handelt müsste das doch klappen. Jedoch habe ich mit der Debugging-Funktion von Eclipse herrausgefunden das der "array" am ende zwar korrekt alle JTextFields endhält jedoch die stringArray = array.getText(); Methode nicht tut was sie tun soll.
Ich weiss nicht weiter. Eclipse zeigt keine Fehler an es müsste Theoretisch funktionieren.
Für den fall das ich relevante Teile vergessen habe zu Posten, poste ich hier nocheinmal alle meine Dialog Klasse.
Vielen Dank für eure Hilfe =) ....
Mein Projekt wird immer Komplizierter und nun habe ich einen Fehler den ich nicht Lösen kann.
Ich möchte euch zuviel Code ersparen und Poste hier mal nur die stellen die es betrifft:
Ich habe ein UI welches auf Knopfdruck verschiedene Dialoge öffnet in denen man in Textfeldern etwas reinschreiben kann.
Hier ist eine Klasse welche lediglich mitzählt wieviele JTextFields in diesem Dialog erzeugt wurden und das jeweilige JTextField an eine Methode weitergibt in der Klasse Dialog.
Java:
package Benutzeroberfläche;
import javax.swing.JTextField;
import javax.swing.text.Document;
public class Textfeld extends JTextField{
/**
*
*/
private static final long serialVersionUID = 1L;
private JTextField textfeld;
private static int textfelder;
public Textfeld() {
// TODO Automatisch generierter Konstruktorstub
}
public Textfeld(String text) {
super(text);
// TODO Automatisch generierter Konstruktorstub
}
public Textfeld(int columns) {
super(columns);
textfeld = new JTextField(columns);
textfelder = textfelder+1;
Dialog.textfeldArray(textfeld);
}
public JTextField getTextfeld() {
return textfeld;
}
public static int getTextfelder() {
return textfelder;
}
public Textfeld(String text, int columns) {
super(text, columns);
// TODO Automatisch generierter Konstruktorstub
}
public Textfeld(Document doc, String text, int columns) {
super(doc, text, columns);
// TODO Automatisch generierter Konstruktorstub
}
public static void textfelderZurücksetzen(){
textfelder = 0;
}
}
Da man vorher nicht weiss wieviele Textfelder der Benutzer braucht habe ich es so gemacht das der User beliebig viele erzeugen kann mit Knopfdruck. Die erzeugten werden gezählt und zur folgenden Methode weitergegeben:
Java:
private static JTextField array[];
private String stringArray[];
....
viel Code
....
public static void textfeldArray(JTextField y){
if (array == null){
array = new JTextField[1];
array[0] = y;
}
JTextField[] hilfsarray = new JTextField[Textfeld.getTextfelder()];
for(int i = 0; i < array.length; i++){
hilfsarray[i] = array[i];
}
hilfsarray[Textfeld.getTextfelder()-1] = y;
array = new JTextField[Textfeld.getTextfelder()];
for(int i = 0; i < hilfsarray.length; i++){
array[i] = hilfsarray[i];
}
}
Diese Methode erstellt ein Array welches mitwächst und die JTextFields enthält, damit ich später eine Adresse habe an die ich mich richten kann, wenn ich wissen will was nun reingeschrieben wurde.
Am Ende sollen die JTextFields die im Array sind, wenn ich auf den okay Button klicke, die eingegebenen Texte in ein das stringArray übertragen. Mit folgender Methode:
Java:
public void stringArray(){
stringArray = new String[array.length];
for(int i = 0; i < array.length; i++){
stringArray[i] = array[i].getText();
System.out.println(stringArray[i]);
}
}
Im ActionListener des betreffenden "Okay"-Buttons steht diese Methode drin.
Da es sich noch immer um den selben Dialog handelt müsste das doch klappen. Jedoch habe ich mit der Debugging-Funktion von Eclipse herrausgefunden das der "array" am ende zwar korrekt alle JTextFields endhält jedoch die stringArray = array.getText(); Methode nicht tut was sie tun soll.
Ich weiss nicht weiter. Eclipse zeigt keine Fehler an es müsste Theoretisch funktionieren.
Für den fall das ich relevante Teile vergessen habe zu Posten, poste ich hier nocheinmal alle meine Dialog Klasse.
Vielen Dank für eure Hilfe =) ....
Java:
package Benutzeroberfläche;
import java.awt.Dialog.ModalityType;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;
import Funktionalität.Verzeichnis;
public class Dialog implements ActionListener, WindowListener{
private JDialog dialog;
private JPanel hauptPanel;
private JPanel contentPanel;
private JPanel buttonPanel;
private JTextField neueSammlungTF;
private JLabel labelSammlung;
private JLabel labelErsteEigenschaft;
private JButton okay;
private JButton okayEintrag;
private JButton abbrechen;
private JButton neueEigenschaft;
private GridBagLayout gbl_hauptpanel;
private GridBagLayout gbl_contentPanel;
private GridBagLayout gbl_buttonPanel;
private Textfeld textfeld0;
private static JTextField array[];
private String stringArray[];
Dialog(JFrame f,String s) {
dialog = new JDialog(f);
hauptPanel = new JPanel();
contentPanel = new JPanel();
buttonPanel = new JPanel();
neueSammlungTF = new JTextField();
labelSammlung = new JLabel("Sammlung");
labelErsteEigenschaft = new JLabel("1. Eigenschaft");
okay = new JButton("Okay");
okayEintrag = new JButton("Okay");
abbrechen = new JButton("Abbrechen");
neueEigenschaft = new JButton("Neue Eigenschaft");
gbl_hauptpanel = new GridBagLayout();
gbl_contentPanel = new GridBagLayout();
gbl_buttonPanel = new GridBagLayout();
textfeld0 = new Textfeld(20);
settings(f,s);
}
public void settings(JFrame f,String s) {
if(s == "neueSammlung"){
dialog.setTitle("Neue Sammlung");
dialog.setModalityType(ModalityType.APPLICATION_MODAL);
dialog.setSize(new Dimension(500, 170));
dialog.setResizable(false);
dialog.setLocationRelativeTo(f);
dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
dialog.addWindowListener(this);
dialog.add(hauptPanel);
hauptPanel.setLayout(gbl_hauptpanel);
MasterFrame.setConstraints(contentPanel,gbl_hauptpanel,0,0,1,1,0,0,1.0,0.0,5,5,5,5,GridBagConstraints.BOTH,GridBagConstraints.CENTER);
hauptPanel.add(contentPanel);
contentPanel.setLayout(gbl_contentPanel);
MasterFrame.setConstraints(buttonPanel,gbl_hauptpanel,0,1,1,1,0,0,1.0,0.0,5,5,5,5,GridBagConstraints.BOTH,GridBagConstraints.CENTER);
hauptPanel.add(buttonPanel);
buttonPanel.setLayout(gbl_buttonPanel);
MasterFrame.setConstraints(abbrechen,gbl_buttonPanel,1,1,1,1,0,0,0.0,0.0,5,5,5,5,GridBagConstraints.HORIZONTAL,GridBagConstraints.EAST);
buttonPanel.add(abbrechen);
abbrechen.setActionCommand("abbrechen");
abbrechen.addActionListener(this);
MasterFrame.setConstraints(okay,gbl_buttonPanel,0,1,1,1,0,0,0.0,0.0,5,5,5,5,GridBagConstraints.HORIZONTAL,GridBagConstraints.EAST);
buttonPanel.add(okay);
okay.setActionCommand("okay");
okay.addActionListener(this);
MasterFrame.setConstraints(neueSammlungTF,gbl_contentPanel,0,0,1,1,0,0,0.0,0.0,5,5,5,5,GridBagConstraints.HORIZONTAL,GridBagConstraints.WEST);
contentPanel.add(neueSammlungTF);
MasterFrame.setConstraints(labelSammlung,gbl_contentPanel,1,0,1,1,0,0,0.0,0.0,5,5,5,5,GridBagConstraints.HORIZONTAL,GridBagConstraints.WEST);
contentPanel.add(labelSammlung);
MasterFrame.setConstraints(textfeld0,gbl_contentPanel,0,1,1,1,0,0,0.0,0.0,5,5,5,5,GridBagConstraints.HORIZONTAL,GridBagConstraints.WEST);
contentPanel.add(textfeld0);
MasterFrame.setConstraints(labelErsteEigenschaft,gbl_contentPanel,1,1,1,1,0,0,0.0,0.0,5,5,5,5,GridBagConstraints.HORIZONTAL,GridBagConstraints.WEST);
contentPanel.add(labelErsteEigenschaft);
MasterFrame.setConstraints(neueEigenschaft,gbl_contentPanel,2,1,1,1,0,0,0.0,0.0,5,5,5,5,GridBagConstraints.HORIZONTAL,GridBagConstraints.WEST);
contentPanel.add(neueEigenschaft);
neueEigenschaft.setActionCommand("neueEigenschaft");
neueEigenschaft.addActionListener(this);
dialog.setVisible(true);
}else if(s == "neuerEintrag"){
dialog.setTitle("Neuer Eintrag");
dialog.setModalityType(ModalityType.APPLICATION_MODAL);
dialog.setSize(new Dimension(500, 170));
dialog.setResizable(false);
dialog.setLocationRelativeTo(f);
dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
dialog.addWindowListener(this);
dialog.add(hauptPanel);
hauptPanel.setLayout(gbl_hauptpanel);
MasterFrame.setConstraints(contentPanel,gbl_hauptpanel,0,0,1,1,0,0,1.0,0.0,5,5,5,5,GridBagConstraints.BOTH,GridBagConstraints.CENTER);
hauptPanel.add(contentPanel);
contentPanel.setLayout(gbl_contentPanel);
MasterFrame.setConstraints(buttonPanel,gbl_hauptpanel,0,1,1,1,0,0,1.0,0.0,5,5,5,5,GridBagConstraints.BOTH,GridBagConstraints.CENTER);
hauptPanel.add(buttonPanel);
buttonPanel.setLayout(gbl_buttonPanel);
MasterFrame.setConstraints(abbrechen,gbl_buttonPanel,1,1,1,1,0,0,0.0,0.0,5,5,5,5,GridBagConstraints.HORIZONTAL,GridBagConstraints.EAST);
buttonPanel.add(abbrechen);
abbrechen.setActionCommand("abbrechen");
abbrechen.addActionListener(this);
MasterFrame.setConstraints(okayEintrag,gbl_buttonPanel,0,1,1,1,0,0,0.0,0.0,5,5,5,5,GridBagConstraints.HORIZONTAL,GridBagConstraints.EAST);
buttonPanel.add(okayEintrag);
okayEintrag.setActionCommand("okayEintrag");
okayEintrag.addActionListener(this);
TreePath tp = Verzeichnisstruktur.getTree().getSelectionPath();
DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode)tp.getLastPathComponent();
Object userObject = selectedNode.getUserObject();
Verzeichnis a = (Verzeichnis)userObject;
String[] array = a.getArray();
for(int i = 0; i < array.length; i++){
Textfeld neuestextfeld = new Textfeld(20);
MasterFrame.setConstraints(neuestextfeld,gbl_contentPanel,0,i,1,1,0,0,0.0,0.0,5,5,5,5,GridBagConstraints.HORIZONTAL,GridBagConstraints.WEST);
contentPanel.add(neuestextfeld);
JLabel label = new JLabel(array[i]);
MasterFrame.setConstraints(label,gbl_contentPanel,1,i,1,1,0,0,0.0,0.0,5,5,5,5,GridBagConstraints.HORIZONTAL,GridBagConstraints.WEST);
contentPanel.add(label);
if(Textfeld.getTextfelder() > 2){
dialog.setSize(new Dimension(500, dialog.getSize().height+30));
}
}
dialog.setVisible(true);
}
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals("neueEigenschaft")){
JLabel text = new JLabel(Textfeld.getTextfelder()+1+". Eigenschaft");
Textfeld neuestextfeld = new Textfeld(20);
MasterFrame.setConstraints(neuestextfeld,gbl_contentPanel,0,1+Textfeld.getTextfelder(),1,1,0,0,0.0,0.0,5,5,5,5,GridBagConstraints.HORIZONTAL,GridBagConstraints.CENTER);
MasterFrame.setConstraints(text,gbl_contentPanel,1,1+Textfeld.getTextfelder(),1,1,0,0,0.0,0.0,5,5,5,5,GridBagConstraints.HORIZONTAL,GridBagConstraints.CENTER);
contentPanel.add(neuestextfeld);
contentPanel.add(text);
MasterFrame.setConstraints(neueEigenschaft,gbl_contentPanel,2,1+Textfeld.getTextfelder(),2,1,0,0,0.0,0.0,0,0,0,0,GridBagConstraints.HORIZONTAL,GridBagConstraints.CENTER);
dialog.validate();
dialog.repaint();
if(Textfeld.getTextfelder() > 2){
dialog.setSize(new Dimension(500, dialog.getSize().height+30));
dialog.validate();
dialog.repaint();
}
}else if(e.getActionCommand().equals("textfeldNeuerEintrag")){
String text = neueSammlungTF.getText();
Main.master.getBaum().eintrag(text);
}else if(e.getActionCommand().equals("okay")){
String text = neueSammlungTF.getText();
stringArray();
Main.master.getBaum().verzeichnis(text,stringArray);
array = null;
stringArray = null;
dialog.dispose();
}else if(e.getActionCommand().equals("abbrechen")){
array = null;
stringArray = null;
dialog.dispose();
}else if(e.getActionCommand().equals("okayEintrag")){
String text = neueSammlungTF.getText();
Main.master.getBaum().eintrag(text);
dialog.dispose();
}
}
public static void textfeldArray(JTextField y){
if (array == null){
array = new JTextField[1];
array[0] = y;
}
JTextField[] hilfsarray = new JTextField[Textfeld.getTextfelder()];
for(int i = 0; i < array.length; i++){
hilfsarray[i] = array[i];
}
hilfsarray[Textfeld.getTextfelder()-1] = y;
array = new JTextField[Textfeld.getTextfelder()];
for(int i = 0; i < hilfsarray.length; i++){
array[i] = hilfsarray[i];
}
}
public void stringArray(){
stringArray = new String[array.length];
for(int i = 0; i < array.length; i++){
stringArray[i] = array[i].getText();
System.out.println(stringArray[i]);
}
}
@Override
public void windowActivated(WindowEvent arg0) {
// TODO Automatisch generierter Methodenstub
}
@Override
public void windowClosed(WindowEvent arg0) {
Textfeld.textfelderZurücksetzen();
}
@Override
public void windowClosing(WindowEvent arg0) {
Textfeld.textfelderZurücksetzen();
}
@Override
public void windowDeactivated(WindowEvent arg0) {
// TODO Automatisch generierter Methodenstub
}
@Override
public void windowDeiconified(WindowEvent arg0) {
// TODO Automatisch generierter Methodenstub
}
@Override
public void windowIconified(WindowEvent arg0) {
// TODO Automatisch generierter Methodenstub
}
@Override
public void windowOpened(WindowEvent arg0) {
// TODO Automatisch generierter Methodenstub
}
}