Avatar billede gruppe_trio Nybegynder
16. marts 2003 - 12:30 Der er 5 kommentarer og
2 løsninger

Ønsker hjælp med layouts

Vi har behov for lidt hjælp med CardLayout. Hvad gør man for at vælge de forskellige "cards".

Vi kan se at de ligger over hinanden når vi arbejder i GUI Editor, men kan kun se een når vi kører programmet...
Avatar billede sago Nybegynder
16. marts 2003 - 13:38 #1
show(Container parent, String name)
          Flips to the component that was added to this layout with the specified name, using addLayoutComponent.

Det skulle være den. :)
Avatar billede gruppe_trio Nybegynder
16. marts 2003 - 14:09 #2
Skal man lave f.eks. knapper, så?  Vi troede at man ville få nogle faner??  :-S
Avatar billede viht Nybegynder
16. marts 2003 - 14:17 #3
Du får ingen faner, det gør du med JTabbedPane. Med cardlayout kan du bruge knapper, træer.. ja selv JLabels til at vælge kort.

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

public class IdraetsProgram extends JFrame implements ActionListener {
   
    private static final String panel1Id = "Panel 1";
    private static final String panel2Id = "Panel 2";
    private static final String panel3Id = "Panel 3";
   
    private JRadioButton button1;
    private JRadioButton button2;
    private JRadioButton button3;
   
    private JPanel cardPanel;
    private CardLayout cards;
   
    public IdraetsProgram() {
        super("Idræt");
        setSize(400,400);
               
        JPanel radioPanel = new JPanel();
        radioPanel.setLayout(new BoxLayout(radioPanel, BoxLayout.Y_AXIS));
        radioPanel.setBorder(BorderFactory.createTitledBorder("Buttons"));
       
        cards = new CardLayout();
        cardPanel = new JPanel(cards);
        ButtonGroup group = new ButtonGroup();
       
        button1 = new JRadioButton("Vælg nr: "+1);
        button1.addActionListener(this);
       
        button2 = new JRadioButton("Vælg nr: "+2);
        button2.addActionListener(this);
       
        button3 = new JRadioButton("Vælg nr: "+2);
        button3.addActionListener(this);
       
        group.add(button1);
        group.add(button2);
        group.add(button3);
        radioPanel.add(button1);
        radioPanel.add(button2);
        radioPanel.add(button3);
               
        MainPanel panel1 = new MainPanel("1");
        MainPanel panel2 = new MainPanel("2");
        MainPanel panel3 = new MainPanel("3");
       
        cardPanel.add(panel1, panel1Id);
        cardPanel.add(panel2, panel2Id);
        cardPanel.add(panel3, panel3Id);
       
        getContentPane().add(cardPanel, BorderLayout.CENTER);
        getContentPane().add(radioPanel, BorderLayout.WEST);
    }
   
    public void actionPerformed(ActionEvent event) {
        if( event.getSource() == button1 ) {
            cards.show(cardPanel, panel1Id);
        }
        else if( event.getSource() == button2 ) {
            cards.show(cardPanel, panel2Id);
        }
        else if( event.getSource() == button3 ) {
            cards.show(cardPanel, panel3Id);
        }
    }
   
    private class MainPanel extends JPanel {
       
        public MainPanel(String name) {
            super(new BorderLayout());
           
            JLabel label = new JLabel(name);
            JTextPane pane = new JTextPane();
            pane.setText("Du har nu valgt panel nr: " +name);
           
            add(label, BorderLayout.NORTH);
            add(new JScrollPane(pane), BorderLayout.CENTER);
        }
    }
}

class Go {
    public static void main(String[] args) {
      new IdraetsProgram().show();
  }
}
Avatar billede viht Nybegynder
16. marts 2003 - 14:23 #4
JTabbedPane er mere brugervenlig, in my opinion:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class TestFrame extends JFrame {
   
    public TestFrame() {
        super("Test");
        setSize(400,400);
       
        JTabbedPane pane = new JTabbedPane();
        pane.add("1", new PanePanel("Første panel"));
        pane.add("2", new PanePanel("Andet panel"));
        pane.add("3", new PanePanel("Tredje panel"));
       
        getContentPane().add(pane, BorderLayout.CENTER);
       
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
   
    private class PanePanel extends JPanel {
        public PanePanel(String text) {
            super(new BorderLayout());
           
            JTree tree = new JTree();
            JTextPane pane = new JTextPane();
            pane.setText(text);
           
            JSplitPane split = new JSplitPane(JSplitPane.VERTICAL_SPLIT, new JScrollPane(tree), new JScrollPane(pane));
            split.setDividerLocation(100);
           
            add(split, BorderLayout.CENTER);
        }
    }
}
class Go {
    public static void main(String[] args) {
      new TestFrame().show();     
  }
}
Avatar billede =maddog= Nybegynder
16. marts 2003 - 15:53 #5
Du skal bruge CardLayout hvis du IKKE vil have faner (f.x. hvis brugeren skal klikke sig vej gennem flere menuer eller hvis du har en "loading" eller "processing" pane) ellers skal du anvende JTabbedPane som nævnt ovenfor.
CardLayout er designet til AWT og er lidt outdated. Der er en klasse kaldet CardPanel der virker meget bedre i Swing. Denne kan findes på The Swing Connections sider hos Sun.
Avatar billede gruppe_trio Nybegynder
16. marts 2003 - 17:26 #6
Vi kommer nok til at benytte faner, da vi synes det virker nemmere og bedre.

Tak for hjælpen.  :-)
Avatar billede sago Nybegynder
16. marts 2003 - 17:53 #7
Tak for point ;)
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