Avatar billede driis Nybegynder
13. marts 2004 - 13:51 Der er 6 kommentarer og
1 løsning

Hvad gør jeg galt her (Opdatering af Labels på JPanel)

Følgende kode skulle gerne vise 2 labels på et JPanel, "pan". Det virker ikke, panelet bliver blot sort (baggrundsfarven er sort). Hvad er der galt ?

    public void btnInfo_Click()
    {
        // Fjern alle komponenter på JPanel, og tilføj de 2 info labels.
        pan.removeAll();
        info1.setForeground(Color.WHITE);
        info2.setForeground(Color.WHITE);
        Box bv = Box.createVerticalBox();
        bv.add(Box.createVerticalStrut(20));
        bv.add(info1);
        bv.add(Box.createVerticalStrut(20));
        bv.add(info2);
        pan.add(BorderLayout.CENTER,bv);
        pan.repaint();
    }
Avatar billede _carsten Nybegynder
13. marts 2004 - 16:40 #1
Du skal lige bytte lidt rundt på det, så skulle det virke

    public void btnInfo_Click()
    {
        // Fjern alle komponenter på JPanel, og tilføj de 2 info labels.
        pan.removeAll();
        info1.setForeground(Color.WHITE);
        info2.setForeground(Color.WHITE);
        Box bv = Box.createVerticalBox();
        pan.add(Box.createVerticalStrut(20));
        pan.add(BorderLayout.CENTER,bv);
        pan.add(info1);
        pan.add(info2);
        pan.repaint();
    }
Avatar billede _carsten Nybegynder
13. marts 2004 - 16:48 #2
Fandt i øvrigt lige denne her, der er en rimelig udførlig beskrivelse af hvordan Box anvendes:
http://java.sun.com/docs/books/tutorial/uiswing/layout/box.html
Avatar billede driis Nybegynder
14. marts 2004 - 18:54 #3
Det giver tilsyneladende ingen forskel, om jeg bruger dit eller mit eget forslag ?
Avatar billede _carsten Nybegynder
14. marts 2004 - 21:27 #4
Så må vi da bare lave noget som virker( jeg tog den lidt på huskeren første gang - men den er åbenbart lidt rusten)

public class JFrame extends javax.swing.JFrame {

    public JFrame() {
        initComponents();
    }
   
    private void initComponents() {
        jPanel1 = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jPanel2 = new javax.swing.JPanel();
        jButton3 = new javax.swing.JButton();
        jButton4 = new javax.swing.JButton();

        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

        jPanel1.setLayout(new javax.swing.BoxLayout(jPanel1, javax.swing.BoxLayout.X_AXIS));

        jButton1.setText("Knap 1");
        jPanel1.add(jButton1);

        jButton2.setText("Knap 2");
        jPanel1.add(jButton2);

        getContentPane().add(jPanel1, java.awt.BorderLayout.SOUTH);

        jButton3.setText("Fjern knap 1 og 2");
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                fjern(evt);
            }
        });

        jPanel2.add(jButton3);

        jButton4.setText("Tilf\u00f8j knap 1 og 2");
        jButton4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                addAgain(evt);
            }
        });

        jPanel2.add(jButton4);

        getContentPane().add(jPanel2, java.awt.BorderLayout.NORTH);

        pack();
    }

    private void addAgain(java.awt.event.ActionEvent evt) {
        jPanel1.add(jButton1);
        jPanel1.add(jButton2);
        jPanel1.repaint();
    }

    private void fjern(java.awt.event.ActionEvent evt) {
        jPanel1.removeAll();
        jPanel1.repaint();
    }

    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }
   

    public static void main(String args[]) {
        new JFrame().show();
    }

    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2; 
}
Avatar billede driis Nybegynder
14. marts 2004 - 21:39 #5
Det hjalp vist også på forståelsen :-)
Avatar billede _carsten Nybegynder
14. marts 2004 - 21:53 #6
Jeg kunne altså ikke lade være med at rode lidt videre med det

Koden i mit første svar virker, man skal bare bruge validate() i stedet for repaint()
(sikrer at containeren har valid layout)

Sådan


    public void btnInfo_Click()
    {
        // Fjern alle komponenter på JPanel, og tilføj de 2 info labels.
        pan.removeAll();
        info1.setForeground(Color.WHITE);
        info2.setForeground(Color.WHITE);
        Box bv = Box.createVerticalBox();
        pan.add(Box.createVerticalStrut(20));
        pan.add(BorderLayout.CENTER,bv);
        pan.add(info1);
        pan.add(info2);
        pan.validate();
    }

Godnat.
Avatar billede driis Nybegynder
14. marts 2004 - 22:11 #7
Du har ret, ovenstående virker. Dog måtte jeg bruge

pan.removeAll();
pan.repaint();

Øverst i metoden - ellers kom jeg ud for, at de "nye" labels blev tegnet ovenpå nogle gamle. Egentlig mærkeligt, at Java ikke tager hensyn til dette.

Men 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