jButton zur Laufzeit hinzufügen

K

Kekskekskeks

Gast
Hallo Leute,

also für ein Programm will ich, dass wenn ein Button gedrückt wird neue erzeugt werden (die Anzahl weiß ich vor Start des Programmes nicht).

Erzeugt bekomm ich sie schon:

Java:
javax.swing.JButton button[] = new javax.swing.JButton[3];

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
int anzahl = 3;

for (int i=0; i<anzahl ;i++)
{
    button[i] = new javax.swing.JButton("" +i);
}

}


Wie lasse ich sie anzeigen, während das Fenster noch offen ist?

lg Keks
 

L-ectron-X

Gesperrter Benutzer
...und rufst danach
Code:
validate();
auf dem Container auf.

BTW ist es IMO niemals schöner Stil. wenn man Objekte direkt auf einem JFrame/JDialog hinzufügt.
 

XHelp

Top Contributor
Nicht einfach aus irgendeinem Grund auch immer "JFrame" hinschrieben. Du hast ja irgendwo eine Instanz davon und auf dieser Instanz musst du die
Code:
add
aufrufen
 
K

Kekskekskeks

Gast
und was muss ich dann da hinschreiben?

sorry bin so ziehmlich Anfänger und weiß nur das, was uns der Lehrer in den paar Stunden die wir hatten beigebracht hat, und das ist so ziehmlich nichts xDD


hier ist der gesammte Code, falls das hilft:

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

/*
 * NewJFrame.java
 *
 * Created on 24.02.2011, 19:52:37
 */

package javaapplication7;

import javax.swing.JButton;




/**
 *
 * @author JeyPieh
 */
public class NewJFrame extends javax.swing.JFrame {

    /** Creates new form NewJFrame */
    public NewJFrame() {
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jButton1.setText("jButton1");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(381, 381, 381)
                .addComponent(jButton1)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(178, Short.MAX_VALUE)
                .addComponent(jButton1)
                .addGap(99, 99, 99))
        );

        pack();
    }// </editor-fold>

    javax.swing.JButton button[] = new javax.swing.JButton[3];

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         


    int anzahl = 3;

    for (int i=0; i<anzahl ;i++)
    {
        button[i] = new javax.swing.JButton("" +i);

    }





    // TODO add your handling code here:
    }                                        

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    // End of variables declaration

}

lg keks
 

TimeIsTheKey

Aktives Mitglied
warum? bzw wie meinst du das?

Im Normalfall werden Objekte auf ein JPanel geaddet ...

und was muss ich dann da hinschreiben?

sorry bin so ziehmlich Anfänger und weiß nur das, was uns der Lehrer in den paar Stunden die wir hatten beigebracht hat, und das ist so ziehmlich nichts xDD


hier ist der gesammte Code, falls das hilft:

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

/*
 * NewJFrame.java
 *
 * Created on 24.02.2011, 19:52:37
 */

package javaapplication7;

import javax.swing.JButton;




/**
 *
 * @author JeyPieh
 */
public class NewJFrame extends javax.swing.JFrame {

    /** Creates new form NewJFrame */
    public NewJFrame() {
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jButton1.setText("jButton1");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(381, 381, 381)
                .addComponent(jButton1)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(178, Short.MAX_VALUE)
                .addComponent(jButton1)
                .addGap(99, 99, 99))
        );

        pack();
    }// </editor-fold>

    javax.swing.JButton button[] = new javax.swing.JButton[3];

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         


    int anzahl = 3;

    for (int i=0; i<anzahl ;i++)
    {
        button[i] = new javax.swing.JButton("" +i);

    }





    // TODO add your handling code here:
    }                                        

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    // End of variables declaration

}

lg keks

Siehe da:
Code:
JFrame frame = new JFrame();
frame.add(button[i]);

Du hast versucht einem Typ/einer Klasse ein Button hinzuzufügen. Dabei musst du es dem Objekt hinzufügen.
 
K

Kekskekskeks

Gast
also müsste es jetzt so aussehen:

Java:
    int anzahl = 3;

    for (int i=0; i<anzahl ;i++)
    {
        button[i] = new javax.swing.JButton("" +i);
        this.add(button[i]);

    }

?

naja keine Fehlermeldung aber auch kein neuer Button im Fenster ;)
 
G

Gast2

Gast
Code:
pack()
oder
Code:
revalidate()
/
Code:
validate()
vergessen?
 

L-ectron-X

Gesperrter Benutzer
warum? bzw wie meinst du das?
Stimmt, da habe ich mich blöd ausgedrückt.
Ich meinte, dass es meiner Meinung nach nie schöner Stil ist, wenn man Objekte, die keine Container sind, damit sind speziell Buttons, Labels etc. gemeint, direkt auf einem Fenster verankert.
Man nimmt sich ein ganzes Stück Flexibilität. Einzelne Komponenten sollten auf Panels hinzugefügt werden, so kann man auch mal die gleiche Zusammenstellung in einem Teil einer anderen GUI einem anderen Fenster oder in einem Applet einbauen, ohne groß alles neu basteln zu müssen.
 
K

Kekskekskeks

Gast
Ich bekomme es einfahc nciht zum laufen... hab alles mögliche ausprobiert und mich durch alle möglichen artikel gelesen...

Kann mir einer von euch den gesammten Code geben?

Würe mir sehr helfen, danke :)
 
G

Gast2

Gast
Hier mal was schnell zusammengeschustertes:

Java:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Main {

	private static int counter = 0;
	
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new BorderLayout());
        
        final JPanel container = new JPanel();
        container.setLayout(new FlowLayout());
        container.setPreferredSize(new Dimension(300, 300));
        
        JButton addButton = new JButton("Button hinzufügen");
        addButton.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				JButton newButton = createButton();
				
				container.add(newButton);
				container.validate();
			}
		});
        
        frame.add(addButton, BorderLayout.SOUTH);
        frame.add(container, BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);
    }
    
    private static JButton createButton() {
    	JButton button = new JButton("Button" + counter);
    	button.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("Button " + counter + " wurde gedrückt");
			}
		});
    	counter++;
    	return button;
    }

}
 
Zuletzt bearbeitet von einem Moderator:
K

Kekskekskeks

Gast
Ahhhh sehr schön danke ;)

unter welchem Namen kann ich die Buttons jetzt ansprechen?

Wenn ein erzeugter Button angeklickt wird, soll sein Text um 1 erhöht werden (ich habe allen Buttons den Text 1 gegeben)
 
G

Gast2

Gast
die buttons haben noch keinen "namen".
du kannst aber eine ActionListener klasse schreiben und da dann mit getActionCommand bzw. mit getSource an den gedrückten button kommen.
 
K

Kekskekskeks

Gast
Ich stehe jetzt vor einem neuen Problem ;)

Der öffnet mir wuunderschön das Fenster zum Buttons erstellen.

Nur soll das Programm später noch größer werden, dh mehr Buttons, TextAreas usw.
Da ich das bisher immer mit dem GUI gemacht hab würd ich auch gerne dabei bleiben. Manuel erstellen wär da glaube ich zu aufwendig (und ich müsste mcih da erst reinarbeiten ;) )

Kann ich das von dir geschriebene irgendwie so umschreiben, dass ichs einfach an das erstellte unten dranhängen kann? Hab da auch schon überall allesmögliche geändert funzt aber nicht xD


aber danke schonmal :)
 
G

Gast2

Gast
Hab noch nicht verstanden was du jetzt genau willst.
Du hast probleme mein Beispiel bei dir zu integrieren?
 
K

Kekskekskeks

Gast
Ja genau im Prinzip schon.

Also Quelltext, den ich oben gepostet habe, wurde mit dem GUI erstellt (also das, wo das Fenster aufgebaut wird bei initComponents)

Da ich es nicht anders gelernt habe, hab ich das Fenster immer per drag n drop im GUI erstellt, der Computer hat den Quelltext geschrieben.

Das Programm soll natürlich mehr als nur Knöpfe erzeugen können ;) Später kommen dann noch allemöglichen Textfelder usw dazu. Da ich es nicht anders kann, würde ichs gerne weiter übers GUI machen.

Nur da ist das Problem, dass ich das von dir geschriebene nicht einfach übertragen kann.

Und meine Frage ist jetzt, ob man es auch so schreiben kann, dass es kein neues Fenster öffnet, sondern das vom GUI erstellte nur ergänzt.


Hab ichs diesmal besser beschrieben ? ;)
 
G

Gast2

Gast
Also eine GUI ist ein Graphical user interface, also deine Oberfläche. Ich denke du meinst GUI-Builder.
Du solltest aber schon ein wenig davon verstehen was für code da erstellt wird, sonst wirst du schwierigkeiten haben da händisch was zu ergänzen.

Wieso wollst du denn kein neues fenster öffnen sondern alle komponenten austauschen?
 
K

Kekskekskeks

Gast
Ja ich meine den GUI-Builder ;)

Naja sie sollen nicht unbedingt ausgetauscht werden.

Bsp:

Ich habe ein Fenster, da sind mehrere Checkboxen und Textfelder drin.
Von den angeklickten Checkboxen und den in die Textfelder eingegebenen Zahlen hängt dann die Anzahl der erzeugten Buttons ab.
Dann werden die Buttons erzeugt.
Auf die Buttons kann man draufklicken, deren Name ändert sich und es wird gespeichert, wie oft welche Button geklickt wird.

zum SChluss wird das in einem Textfeld ausgegeben.



Ich würd sagen dazu ist es besser die im selben Fenster zu erzeugen, aber es würde auch in einem neuen gehen, wenn ich dann trotzdem noch zählen kann, wieoft die Buttons geklickt worden sind.


lg und gn8
keks
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M JButton zur laufzeit erzeugen/ löschen Java Basics - Anfänger-Themen 3
Hilde22 Neu Start JButton einfügen Java Basics - Anfänger-Themen 2
W GUI - JButton ohne Funktion? Java Basics - Anfänger-Themen 24
M JButton setBackground() färbt nicht den ganzen Knopf Java Basics - Anfänger-Themen 4
C JButton reagiert nicht auf actionListener Java Basics - Anfänger-Themen 15
G jButton führt Main Methode nicht richtig aus Java Basics - Anfänger-Themen 3
J Jbutton blinkt Java Basics - Anfänger-Themen 5
C JButton Text 2 Mal ändern funktioniert nicht Java Basics - Anfänger-Themen 8
E JButton und JTextField Java Basics - Anfänger-Themen 1
V_Fynn03 Erste Schritte JButton funktioniert nicht trotz richtiger Methode. Java Basics - Anfänger-Themen 17
J Erste Schritte if Abfrage von JButton in 2. Klasse Java Basics - Anfänger-Themen 27
J Erste Schritte Actionlistener für tbar/ JButton Java Basics - Anfänger-Themen 15
krgewb Icon von JButton ändern Java Basics - Anfänger-Themen 1
P JButton -Arrays Java Basics - Anfänger-Themen 4
A JButton in anderer Klasse bearbeiten. Java Basics - Anfänger-Themen 2
L Erste Schritte JButton reagiert nicht Java Basics - Anfänger-Themen 5
S Bild über JButton legen Java Basics - Anfänger-Themen 3
V Einem JButton anweisungen geben Java Basics - Anfänger-Themen 4
D Methoden JButton und JLabel in einer Methode erstellen Java Basics - Anfänger-Themen 5
F Interface JButton von anderer Klasse hinzufügen Java Basics - Anfänger-Themen 2
J JButton macht was er will Java Basics - Anfänger-Themen 3
D JButton soll Farbe von JTextfield ändern Java Basics - Anfänger-Themen 5
H JButton - Wechsel der Textfarbe alle 500ms Java Basics - Anfänger-Themen 10
G KeyListener und JButton vertragen sich nicht Java Basics - Anfänger-Themen 1
N JButton anpassen Java Basics - Anfänger-Themen 3
S JButton soll für bestimmte Zeit verschwinden Java Basics - Anfänger-Themen 5
schoenosrockos JButton füllt immer das ganze frame Java Basics - Anfänger-Themen 1
D JButton in JDialog mit Action belgen Java Basics - Anfänger-Themen 6
V JButton einer anderen Klasse übergeben? Java Basics - Anfänger-Themen 6
F JButton [] mit Werten hinterlegen Java Basics - Anfänger-Themen 10
M Code um per jButton ein neues Fenster zu öffnen Java Basics - Anfänger-Themen 3
A weiter JButton Fehler Java Basics - Anfänger-Themen 3
W JTable mit einem JButton-Array füllen Java Basics - Anfänger-Themen 4
S JCombobox und JButton verknüpfen Java Basics - Anfänger-Themen 6
V wie kann ich eine Schleife pausieren, bis ein Jbutton gedrückt wird ? Java Basics - Anfänger-Themen 17
N Erste Schritte JButton reagiert nur einmal. Java Basics - Anfänger-Themen 12
S JButton Java Basics - Anfänger-Themen 2
A Farben wechseln mit JButton Java Basics - Anfänger-Themen 2
S Farbe eine Zeile in JTable ändern, wenn JButton geklickt wurd Java Basics - Anfänger-Themen 4
F Funktion eines JButton in einen Vektor verlagern Java Basics - Anfänger-Themen 4
S Interface JButton etc. wird in JFrame mit paint() nicht angezeigt Java Basics - Anfänger-Themen 6
A Labels Inner JButton Event Erstellbar? Java Basics - Anfänger-Themen 3
K JButton alles zurücksetzen Java Basics - Anfänger-Themen 1
U JButton: Beschriftung ueber Variable zuweisen Java Basics - Anfänger-Themen 6
S JButton erscheint erst bei Mouseover Java Basics - Anfänger-Themen 10
S JButton mit ActionListener Java Basics - Anfänger-Themen 5
S JDK installieren JButton BorderPoints?! Java Basics - Anfänger-Themen 7
E Problem mit erben von JButton Java Basics - Anfänger-Themen 7
J Bei Hinzufügen von JButton Programm langsam Java Basics - Anfänger-Themen 3
J Verknüpfung von JButton to JTextField Java Basics - Anfänger-Themen 4
S Jbutton per Passworteingabe aktivieren Java Basics - Anfänger-Themen 2
G über JButton Action einen anderen Button verändern Java Basics - Anfänger-Themen 7
H JButton - Icon(.png) aus resources laden Java Basics - Anfänger-Themen 23
M Hintergrundbild für JButton Java Basics - Anfänger-Themen 6
A jbutton - icon linksbündig, text zentriert Java Basics - Anfänger-Themen 10
M Input/Output JFrame mit JButton und JTextfield Java Basics - Anfänger-Themen 114
J Hilfe bei JButton Java Basics - Anfänger-Themen 6
A JButton[] und String[] in doppelter For-Schleife Java Basics - Anfänger-Themen 4
W JButton in gleiche Größe bringen Java Basics - Anfänger-Themen 4
pg1337 JButton zuschneiden Java Basics - Anfänger-Themen 3
T Modales JDialog schliessen mit JButton Java Basics - Anfänger-Themen 2
D JButton Array setBackground Java Basics - Anfänger-Themen 2
F JButton wie selektierter JTabbebPane-Header Java Basics - Anfänger-Themen 7
G jButton bei Klick String +1 Java Basics - Anfänger-Themen 5
C OOP Java JButton mit Funktion belegen Java Basics - Anfänger-Themen 3
S JButton wird nicht angezeigt Java Basics - Anfänger-Themen 14
C JButton.getIcon() != null Java Basics - Anfänger-Themen 3
E JButton-Text wird in Schleife nicht geändert Java Basics - Anfänger-Themen 4
F welches Layout für JButton-Liste verwenden Java Basics - Anfänger-Themen 6
T JButton Text ändern Java Basics - Anfänger-Themen 4
L JButton erscheint nur mit pack() Java Basics - Anfänger-Themen 3
U Passwort auf JButton setzen. Java Basics - Anfänger-Themen 2
E JButton Hintergrund / Rahmen entfernen? Java Basics - Anfänger-Themen 4
L Bild auf einem JButton Java Basics - Anfänger-Themen 4
K JButton.setText Problem Java Basics - Anfänger-Themen 6
M JButton und DisabledIcon Java Basics - Anfänger-Themen 2
A GUI - JButton problem! Java Basics - Anfänger-Themen 5
M JButton selbst nachprogrammieren Java Basics - Anfänger-Themen 3
A JButton Textrahmen Java Basics - Anfänger-Themen 7
A Platzierung eines JButton Java Basics - Anfänger-Themen 4
D JButton oder ImageIcon klickt "langsam" Java Basics - Anfänger-Themen 5
E JButton klassenübergreifend nutzen? Java Basics - Anfänger-Themen 6
R Liste graphischer Objekte z.B. JButton dynamisch erstellen Java Basics - Anfänger-Themen 13
J JList Inhalt nach JButton Klick aktualisieren Java Basics - Anfänger-Themen 8
S JButton trotz Box-Layout skalieren Java Basics - Anfänger-Themen 6
P JButton identifizieren Java Basics - Anfänger-Themen 8
K Funktion zu einem JButton hinzufügen Java Basics - Anfänger-Themen 27
D HTML Text von jButton disablen Java Basics - Anfänger-Themen 2
E Auf JButton in Arraylist zugreifen Java Basics - Anfänger-Themen 6
E Andere Form eines JButton Java Basics - Anfänger-Themen 17
A JButton ActionListener nach einmaligem Ausführen zurücksetzen Java Basics - Anfänger-Themen 13
B JButton Größe einstellen? Java Basics - Anfänger-Themen 3
E Zeilenumbruch in JButton mit Variable Java Basics - Anfänger-Themen 2
A JButton erscheint nicht (BlueJ) Java Basics - Anfänger-Themen 2
M JButton sieht komisch aus :-) Java Basics - Anfänger-Themen 5
B JPanel über JButton umändern Java Basics - Anfänger-Themen 9
D JButton transparent bekommen? Java Basics - Anfänger-Themen 5
H JButton Unsichtbar Java Basics - Anfänger-Themen 7
R JTextField mittels JButton in Konsole ausgeben Java Basics - Anfänger-Themen 2
J Variable die bei JButton Clicks mitzählt Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben