Dynamische Erstellung von buttons in Java

Ich versuche, dynamisch zu generieren, eine form. Im Grunde, möchte ich laden Sie eine Liste der Elemente für den Kauf, und erzeugen Sie eine Schaltfläche für jeden. Ich kann bestätigen, dass die buttons generiert werden, mit dem debugger, aber Sie werden nicht angezeigt. Dies ist innerhalb einer Unterklasse von JPanel:

private void generate() {
    JButton b = new JButton("height test");
    int btnHeight = b.getPreferredSize().height;
    int pnlHeight = this.getPreferredSize().height;
    int numButtons = pnlHeight / btnHeight;

    setLayout(new GridLayout(numButtons, 1));

    Iterator<Drink> it = DrinkMenu.iterator();

    for (int i = 0; i <= numButtons; ++i) {
        if (!it.hasNext()) {
            break;
        }
        final Drink dr = it.next();
        b = new DrinkButton(dr);
        b.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                order.addDrink(dr);
        }});
        add(b);
    }
    revalidate();
}

DrinkButton ist eine Unterklasse von JButton. Irgendwelche Ideen?

Warum sind Sie der Einstellung b, um einen JButton, dann unten Einstellung es wieder zu DrinkButton
stellen Sie sicher, dass diese änderungen geschehen im Event-Dispatch-Thread
Der basic-code sieht gut aus. Sie sind mit revalidate (), die ein Schlüssel ist. Aber wir kennen nicht den Kontext, wie dieser code verwendet wird. Wir nicht, wenn diese Platte tatsächlich wurde Hinzugefügt, um den frame. Posten Sie Ihre SSCCE (sscce.org), die das problem veranschaulicht.

InformationsquelleAutor Kevin Lacquement | 2011-06-17

Schreibe einen Kommentar