AWT JTextFields durch Array im JMenu erzeugen?

SteveT

Mitglied
Hallo,

ich programmiere mit dem Windowsbuilder in Eclipse und wollte fragen wie man JTextFields (und mit dem gleichen Prinzip dann auch JLabels und JMenuItems) in einem JMenu erzeugt. Es soll als erstes angegeben werden wie viele Felder gebraucht werden und diese dann im Menu erzeugen zum Beispiel durch ein Array, nur wie benenne ich die Variablen dann unterschiedlich in einer Schleife?

Danke schon mal für die Hilfe!
 
warum schreibst du dir deine GUI nicht selbst?
1. verstehst du deinen Code besser..
2. du erweiterst deine Fähigkeiten.....

zu frage 1:
Java:
JMenu menu = new JMenu("Menu");
JMenuItem item = new JMenuItem("Item");
// JLabel lb....
// JTextfield tf....
menu.add(item);
// etc

zu frage 2:
versteh ich nicht, was meinst du??
 
Anscheinend war das noch nicht klar genug.
Ich meinte das so:
Java:
int anz = Integer.parseInt(tfanz.getText());
for (int i = 0; i < anz; i++){                    
  textField_i = new JTextField();   //so wie bei dem "_i" muss man das TF bei jedem
  menu.add(textField_i);              //Durchgang halt anders benennen, damit immer ein
  textField_i.setColumns(10);       //neues Textfield entsteht          
}

Meine Frage ist nun wie ich das anstelle, damit bei jedem Durchgang ein TextField hinzu gefügt wird.
Ich hoffe ich habe mich jetzt klarer ausgedrückt.
 
Zuletzt bearbeitet von einem Moderator:
nur das wir uns richtig verstehen...

Java:
// forschleife
textfield /*+ i variable*/ = new JTextfield();

du meinst den bezeichner um eine ziffer
Code:
textfield1 ...2....3..
erweitern?!
 
hmmm...ich kann es zwar jetzt nicht testen, aber im link von Vfl_Freak steht sowas drinnen
Java:
// for(......){
fields[i] = new JTextField("Text: "+i);
panel.add(fields[i]);
 
Java:
private JTextField[] fieldname;
...   
for (int i = 0; i < 5; i++) {

                    fieldname[i] = new JTextField();
                    titelname.add(fieldname[i]);
                }
Ich bekomme hier immer die java.lang.NullPointerException raus, was mache ich falsch?
 
Zuletzt bearbeitet von einem Moderator:
Ich bekomme hier immer die java.lang.NullPointerException raus, was mache ich falsch?
Fehler Nr. 1: unvollständiger Code.
Fehler Nr. 1b: keine wirkliche Fehlerbeschreibung. Wann und wo fliegt die Exception? Beim Befüllen des array oder bei der Verwendung der JTextFields im array?

private JTextField[] fieldname;
fieldname = new JTextField();
sollte so gar nicht kompilieren. Du dürftest also gar nicht bis zu dem Punkt kommen, dass eine Exception fliegen kann.
 
Moin,
Fehler Nr. 1: unvollständiger Code.
Fehler Nr. 1b: keine wirkliche Fehlerbeschreibung. Wann und wo fliegt die Exception? Beim Befüllen des array oder bei der Verwendung der JTextFields im array?
private JTextField[] fieldname;
fieldname = new JTextField();
sollte so gar nicht kompilieren
Soweit korrekt 😎
Würde dann vermutlich auch keine NPe erzeugen ...

Du dürftest also gar nicht bis zu dem Punkt kommen, dass eine Exception fliegen kann.
Da aber scheinbar eine kommt, ist dieser Code vermutlich auch nicht der, der ausgeführt wird!

Also, poste bitte
  1. den relevanten/kompletten Code
  2. den kompletten Stacktrace, wenn die die NPE fliegt
Gruß Klaus
 
Java:
package surface;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.AbstractAction;

import java.awt.event.ActionEvent;

import javax.swing.Action;
import javax.swing.JMenu;
import javax.swing.JPopupMenu;

import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.Label;
import java.awt.GridLayout;
import java.awt.Window;

import javax.swing.BoxLayout;

import java.awt.event.ActionListener;

import javax.swing.JTabbedPane;

import java.awt.CardLayout;

import javax.swing.JPanel;

import java.awt.Color;

import javax.swing.SwingConstants;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.JLabel;

import java.awt.Font;

import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.JTable;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JScrollBar;
import javax.swing.table.DefaultTableModel;
import javax.swing.AbstractListModel;
import javax.swing.JComboBox;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JOptionPane;
import javax.swing.JRadioButton;

import java.awt.Button;
import javax.swing.JTree;
import javax.swing.JEditorPane;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;

public class Main {

    private JFrame frmCleanArtillery;
    private final Action action = new SwingAction();
    private final Action action_1 = new SwingAction_1();
    private JTextField tfname;
    int y = 0;
    private JTextField[] fieldname;
    private JButton btnSpeichern;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Main window = new Main();
                    window.frmCleanArtillery.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public Main() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frmCleanArtillery = new JFrame();
        frmCleanArtillery.setTitle("Clean Artillery");
        frmCleanArtillery.setBounds(100, 100, 690, 442);
        frmCleanArtillery.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frmCleanArtillery.getContentPane().setLayout(new CardLayout(0, 0));

        JPanel home = new JPanel();
        home.setBackground(new Color(153, 204, 255));
        frmCleanArtillery.getContentPane().add(home, "name_902001608085318");
        home.setLayout(null);

        JLabel lblCleanArtillary = new JLabel(
                "                    Clean Artillery");
        lblCleanArtillary.setBackground(Color.WHITE);
        lblCleanArtillary.setFont(new Font("Comic Sans MS", Font.BOLD
                | Font.ITALIC, 20));
        lblCleanArtillary.setForeground(Color.BLACK);
        lblCleanArtillary.setBounds(0, 11, 674, 50);
        home.add(lblCleanArtillary);

        JButton btnNeuesAlbum = new JButton("Neues Album");
        btnNeuesAlbum.setBackground(Color.LIGHT_GRAY);
        btnNeuesAlbum.setFont(new Font("Comic Sans MS",
                Font.BOLD | Font.ITALIC, 13));
        btnNeuesAlbum.setBounds(55, 89, 121, 23);
        home.add(btnNeuesAlbum);

        JButton btnBibliothek = new JButton("Bibliothek");
        btnBibliothek.setBackground(Color.LIGHT_GRAY);
        btnBibliothek.setFont(new Font("Comic Sans MS",
                Font.BOLD | Font.ITALIC, 13));
        btnBibliothek.setBounds(55, 123, 121, 23);
        home.add(btnBibliothek);
        home.setVisible(true);

        JPanel nalbum = new JPanel();
        nalbum.setBackground(new Color(0, 153, 255));
        frmCleanArtillery.getContentPane().add(nalbum, "name_901860942996594");
        nalbum.setLayout(null);

        JLabel lblName = new JLabel("Name:");
        lblName.setFont(new Font("Comic Sans MS", Font.BOLD | Font.ITALIC, 15));
        lblName.setBounds(10, 26, 64, 41);
        nalbum.add(lblName);

        JLabel lblNewLabel = new JLabel("Titelanzahl:");
        lblNewLabel.setFont(new Font("Comic Sans MS", Font.BOLD | Font.ITALIC,
                15));
        lblNewLabel.setBounds(10, 59, 94, 41);
        nalbum.add(lblNewLabel);

        tfname = new JTextField();
        tfname.setBounds(125, 26, 137, 35);
        nalbum.add(tfname);
        tfname.setColumns(10);

        Button btnhome = new Button("Home");
        btnhome.setFont(new Font("Comic Sans MS", Font.BOLD | Font.ITALIC, 14));
        btnhome.setBounds(0, 0, 70, 22);
        nalbum.add(btnhome);

        JButton btnNeuesAlbumErstellen = new JButton("Neues Album erstellen");
        btnNeuesAlbumErstellen.setFont(new Font("Comic Sans MS", Font.BOLD
                | Font.ITALIC, 15));
        btnNeuesAlbumErstellen.setBounds(10, 230, 214, 23);
        nalbum.add(btnNeuesAlbumErstellen);

        JMenu titelname = new JMenu("Titelname");
        titelname.setFont(new Font("Comic Sans MS", Font.BOLD | Font.ITALIC, 15));
        titelname.setBounds(0, 111, 104, 41);
        nalbum.add(titelname);
       
        JSpinner sptanz = new JSpinner();
        sptanz.setFont(new Font("Comic Sans MS", Font.BOLD | Font.ITALIC, 13));
        sptanz.setModel(new SpinnerNumberModel(new Integer(0), new Integer(0), null, new Integer(1)));
        sptanz.setBounds(125, 64, 49, 35);
        nalbum.add(sptanz);
       
        btnSpeichern = new JButton("speichern");
        btnSpeichern.setBounds(173, 70, 89, 23);
        nalbum.add(btnSpeichern);

        JPanel bib = new JPanel();
        bib.setBackground(new Color(153, 51, 51));
        frmCleanArtillery.getContentPane().add(bib, "name_901630806780487");
        bib.setLayout(null);

        Button btnhome2 = new Button("Home");
        btnhome2.setBackground(new Color(255, 255, 255));
        btnhome2.setFont(new Font("Comic Sans MS", Font.BOLD | Font.ITALIC, 14));
        btnhome2.setBounds(0, 0, 70, 22);
        bib.add(btnhome2);
        bib.setVisible(false);

        btnhome.addActionListener(new ActionListener() { // homebutton
            public void actionPerformed(ActionEvent e) {
                home.setVisible(true);
                bib.setVisible(false);
                nalbum.setVisible(false);
            }
        });

        btnhome2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                home.setVisible(true);
                bib.setVisible(false);
                nalbum.setVisible(false);
            }
        });
       
        btnSpeichern.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

                int anzt = (int)sptanz.getValue();
                System.out.println(anzt);
                for (int i = 0; i < 5; i++) {

                    fieldname[i] = new JTextField();
                    titelname.add(fieldname[i]);
                }
            }
        });


        btnNeuesAlbum.addActionListener(new ActionListener() { // neues album
                                                                // öffnen
                    public void actionPerformed(ActionEvent e) {
                        home.setVisible(false);
                        bib.setVisible(false);
                        nalbum.setVisible(true);

                    }
                });

        btnBibliothek.addActionListener(new ActionListener() { // bibliothek
                                                                // öffnen
                    public void actionPerformed(ActionEvent e) {
                        home.setVisible(false);
                        bib.setVisible(true);
                        nalbum.setVisible(false);
                    }
                });
    }

    private class SwingAction extends AbstractAction {
        public SwingAction() {
            putValue(NAME, "SwingAction");
            putValue(SHORT_DESCRIPTION, "Some short description");
        }

        public void actionPerformed(ActionEvent e) {
        }
    }

    private class SwingAction_1 extends AbstractAction {
        public SwingAction_1() {
            putValue(NAME, "SwingAction_1");
            putValue(SHORT_DESCRIPTION, "Some short description");
        }

        public void actionPerformed(ActionEvent e) {
        }
    }

    private static void addPopup(Component component, final JPopupMenu popup) {
        component.addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent e) {
                if (e.isPopupTrigger()) {
                    showMenu(e);
                }
            }

            public void mouseReleased(MouseEvent e) {
                if (e.isPopupTrigger()) {
                    showMenu(e);
                }
            }

            private void showMenu(MouseEvent e) {
                popup.show(e.getComponent(), e.getX(), e.getY());
            }
        });
    }
}

Java:
1
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at surface.Main$4.actionPerformed(Main.java:215)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$500(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
 
naja bin jetzt nicht der große experte ....aber es könnte die lokale variable titelname sein, mach doch mal aus deiner lokalen eine instazvar.
 
Moin,

dann können wir Dir zumindest sagen, dass die NPE hier fliget:
at surface.Main$4.actionPerformed(Main.java:215)

Allerdings habe ich jetzt keine Zeit und Lust, Deine Zeilen zu zählen ..... 🙄

Gruß Klaus
 
Habe jetzt mal aus der lokalen eine Instanzvar gemacht, hat sich aber nichts geändert.
Zeile 216 ist : " fieldname = new JTextField();" beim btnSpeichern.addActionListener in der for-Schleife.
 
ja und jetzt denk mal nach warum...(ich hoffe ich habs selbst nicht übersehen 😀)

wie initialisiert bzw gibst deinem Array eine Größe vor?

zb.
Java:
int [] numbers = new int[10];

wo machst du das??

edit:
habs gerade getestet (in der konsole ) und bei mir funkt alles...
denk mal nach....
 
Zuletzt bearbeitet:
dein code könnte leicht um die hälfte kürzer sein.... redundant²

ich an deiner Stelle würde das mit dem WindowBuilder lassen und deine GUI s selber schreiben.

teste das mal....
Java:
JTextField[] fields = new JTextField[5]; // <-- was ist das?? ...new JTextField[5];
for(int i = 0; i < fields.length;i++){
       fields[i] = new JTextField("Textfield "+(i+1));
       System.out.println(fields[i].getText());
     }

Computer aus...ab ins (lange) wochenende..... 😀
 
Habe eine Zeit lang mit Python programmiert und da muss man die Größe eines Arrays nicht zwangsläufig angeben, hab vergessen das es bei Java anders ist, sorry.
Danke für die Hilfe!

Edit:
Und Danke für den Tipp.
 

Zurück
Oben