Avatar billede netkoen Nybegynder
25. januar 2009 - 17:46 Der er 11 kommentarer og
1 løsning

Vis JButtons

Hej Alle

Formoder dette er et meget nemt spørgsmål, men har simpelthen ikke har kunne finde en løsning.

Jeg laver en GUI med netbeans GUI builder, i denne GUI vil jeg gerne have tilføjet nogen JButtons dynamisk til et panel når jeg klikker på en knap.

Til oprette og tilføje knapper er ikke noget problem, men kan simpelthen ikke få den til at vise knapperne.

Nogen der kan hjælpe?
Avatar billede arne_v Ekspert
25. januar 2009 - 19:24 #1
Prøv og kald repaint efter at have added din JButton.
Avatar billede netkoen Nybegynder
26. januar 2009 - 08:13 #2
Skal det kaldes på panelet eller hvordan?
Avatar billede arne_v Ekspert
26. januar 2009 - 21:58 #3
Jeg plejer at kalde den paa framen, men det er muligt at du kan noejes med
at kalde paa panel.
Avatar billede netkoen Nybegynder
26. januar 2009 - 23:48 #4
Hej Arne..

Ser ikke ud til at jeg har særlig meget held med det. Bruger som sagt netbeans, ved godt det er lidt snyde måde, men det er god øvelse.

Jeg har prøvet repaint() på panelet og this.repaint() i håb om det fangede den, men intet held.

Bare for en god orden skyld: Det er da ikke noget problem at tilføje knappe ved et klik på en anden knap og så får dem/den vist?

Du kunne vel ikke smide et hurtigt eksempel jeg kunne råde lidt med, eller måske hvis hvordan man gør i netbeans.

Nedenstående er hvad jeg gør når der klikkes på en knap, dog bliver intet vist på skærmen.
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        JButton b = new JButton("Yes");
        panel.add(b);     
        panel.repaint();       
    }
Avatar billede arne_v Ekspert
27. januar 2009 - 03:27 #5
Følgende virker hos mig:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ButtonFun extends JFrame implements ActionListener {
    private JButton add;
    private int n;
    public ButtonFun() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setLayout(new GridLayout(10, 10));
        add = new JButton("Add new");
        add.addActionListener(this);
        getContentPane().add(add);
        pack();
        n = 0;
    }
    public void actionPerformed(ActionEvent ev) {
        if (ev.getSource() == add) {
            n++;
            JButton del = new JButton("Delete me (" + n + ")");
            del.addActionListener(this);
            getContentPane().add(del);
        } else {
            JButton del = (JButton)ev.getSource();
            del.getParent().remove(del);
        }
        pack();
        repaint();
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JFrame f = new ButtonFun();
                f.setVisible(true);
            }
        });
    }
}
Avatar billede netkoen Nybegynder
27. januar 2009 - 14:50 #6
Hej Arne

Har prøvet dit eksempel og det virker ganske fantastisk. Jeg også prøvet at tilføje knapper til et panel og heller ingen problemer der.

Men så snart jeg laver det samme i Netbeans, så sker der intet. Har du nogen gode ideer?

Smider lige alt koden fra netbeans, i håb om det virker nogen ideer til hvad løsningen er.

Håber meget på du eller en anden kan løse problemet.. Er ved at gå amok over det :P

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

/*
* NetBeansButtonFun.java
*
* Created on 27-01-2009, 14:39:09
*/

package GUI;

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

/**
*
* @author Daniel
*/
public class NetBeansButtonFun extends JFrame {

    private int n;

    /** Creates new form NetBeansButtonFun */
    public NetBeansButtonFun() {
        n = 0;
        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() {

        ButtonPanel = new javax.swing.JPanel();
        AddButton = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        ButtonPanel.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));

        javax.swing.GroupLayout ButtonPanelLayout = new javax.swing.GroupLayout(ButtonPanel);
        ButtonPanel.setLayout(ButtonPanelLayout);
        ButtonPanelLayout.setHorizontalGroup(
            ButtonPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 249, Short.MAX_VALUE)
        );
        ButtonPanelLayout.setVerticalGroup(
            ButtonPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 109, Short.MAX_VALUE)
        );

        AddButton.setText("Tilføj knap");
        AddButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                AddButtonToPanel(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()
                .addContainerGap()
                .addComponent(AddButton)
                .addGap(33, 33, 33)
                .addComponent(ButtonPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(AddButton)
                    .addComponent(ButtonPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

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

    private void AddButtonToPanel(java.awt.event.ActionEvent evt) {
        if (evt.getSource() == AddButton) {
            n++;
            JButton del = new JButton("Delete me (" + n + ")");
            //del.addActionListener(this);
            ButtonPanel.add(del);
        } else {
            JButton del = (JButton)evt.getSource();
            del.getParent().remove(del);
        }
        pack();
        repaint();
    }

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

    // Variables declaration - do not modify
    private javax.swing.JButton AddButton;
    private javax.swing.JPanel ButtonPanel;
Avatar billede netkoen Nybegynder
27. januar 2009 - 14:51 #7
Glemte lige at nævne: Metoden "private void initComponents()" er automatisk genereret af Netbeans GUI builder
Avatar billede arne_v Ekspert
27. januar 2009 - 19:07 #8
Der har noget med LayoutManager at goere.

Din kode virker heller ikke hos mig, men aendrer jeg layout fra GroupLayout til
GridLayout saa virker det. Add virker.

Naar jeg saa tilfoejer en action listener paa de addede knapper saa virker delete ogsaa.
Avatar billede netkoen Nybegynder
28. januar 2009 - 11:01 #9
Hej Arne

Du må jeg lige prøve når jeg kommer hjem. Problemet er bare at alt koden i metoden Init er fastlås af netbeans GUI builder, men det må man kunne ændre.

Håber så meget det virker ordentligt, det vil bare være fantastisk.

Jeg skriver når det er afprøvet.
Avatar billede netkoen Nybegynder
02. februar 2009 - 09:11 #10
Hej Arne

Så har jeg endelig fået det prøvet og du havde ganske ret. Den kan simpelthen ikke finde ud af det når man bruger grouplayout, lidt noget møg når den bruger det normalt.

Men jeg siger rigtig mange gange tak for din hjælp og smid dit svar så er der point.

Hilsen Daniel
Avatar billede arne_v Ekspert
03. februar 2009 - 01:39 #11
svar
Avatar billede netkoen Nybegynder
03. februar 2009 - 20:49 #12
Hej Arne

Du har været til meget stor hjælp, tror dog ikke mine problemer stopper helt, men arbejder selv videre på det, så må vi se hvad der sker.

Du skal i hvert fald have mange tak for hjælpen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester