Avatar billede nocol Nybegynder
16. marts 2003 - 11:05 Der er 16 kommentarer og
1 løsning

GUI - frame - ændre "Center"frame ved valg i "west"frame

Hej, Jeg er ved at lave et lille system - som skal bruges i vores idrætsforening til noget sponsorarbejde....Her skal vi bruge et lille GUI-"program", hvor man skal have mulighed for at vælge 9 forskellige pakker...Det skal gøres ved hjælp af radioknapper i west-frame og herefter skal Center-frame ændre sig den valgte pakke komme frem med dens indhold af (indtastningsfelter osv) - er der nogen genier derude, som har løst til at lave grundstammen bag dette program - kan ikke selv....

Takker
Avatar billede viht Nybegynder
16. marts 2003 - 11:53 #1
Selvom jeg nu ville foretrække at lave menuen lidt anderledes kan du sagtens gøre det med JRadioButtons. Her har jeg brugt CardLayout:

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 nocol Nybegynder
16. marts 2003 - 12:10 #2
det er skide godt....Meget fornemt...
HVordan ville du hellere have lavet det? (Selvom jeg nu ville foretrække at lave menuen lidt anderledes kan du sagtens gøre det med JRadioButtons.)

Her har jeg brugt CardLayout: Kan du ikke forklare mig lidt om hvad Cardlayout betyder? og hvad man ellers kunne have brugt og hvorfor du har valgt det....Det er jo altid rart at lære noget - specielt når det er noget helt nyt?
Avatar billede viht Nybegynder
16. marts 2003 - 12:11 #3
Jeg er faktisk ved at lave et andet eksempel, der bruger et JTree. Hvis du lige giver mig en en halv times tid skal jeg nok forklare nærmere.
Avatar billede nocol Nybegynder
16. marts 2003 - 12:41 #4
det er simpelthen meget fornemt - så må du gerne forklare JTree også - er det også GUI?? eller er det applet - og hvad er egentlig forskellen på GUI og JTree
Avatar billede viht Nybegynder
16. marts 2003 - 13:11 #5
JTree er en Swing komponent, som du kan bruge til at lave dynasike brugervalg i GUI. Jeg bruger tit et træ til at lave menuer, da de ikke bruger særlig meget plads og er meget brugervenlige.

I dette eksempel kan du enten trække menunoder over i det lilla felt til højre eller dobbeltklikke på dem. Så vil de pågældende vinduer vises.

import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.dnd.*;
import java.awt.datatransfer.*;

import java.io.IOException;

public class IdraetsProgram extends JFrame {
   
    private JRadioButton button1;
    private JRadioButton button2;
    private JRadioButton button3;
   
    private JDesktopPane desktop;
   
    private DragTree menuTree;
    private DefaultTreeModel model;
    private DefaultMutableTreeNode root;
   
    private boolean nodeIsSelected;
    private JInternalFrameNode currentNode;
       
    public IdraetsProgram() {
        super("Idræt");
        setSize(400,400);
               
        JPanel treePanel = new JPanel();
        treePanel.setLayout(new BorderLayout());
        root = new DefaultMutableTreeNode("Menu");
        model = new DefaultTreeModel(root);
        menuTree = new DragTree(model);
        menuTree.addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent event) {
                int selRow = menuTree.getRowForLocation(event.getX(), event.getY());
              if(selRow != -1) {
                TreePath selPath = menuTree.getPathForLocation(event.getX(), event.getY());
                DefaultMutableTreeNode node = (DefaultMutableTreeNode)selPath.getLastPathComponent();
                if( node.isLeaf() && !node.isRoot() ) {
                    JInternalFrameNode frameNode = (JInternalFrameNode)node;
                    nodeIsSelected = true;
                    currentNode = frameNode;
                    if( event.getClickCount() == 2 ) {
                          JInternalFrame frame = frameNode.getFrame();
                          addFrame(frame, frameNode);
                    }
                }
                else
                    nodeIsSelected = false;
            }
            }
        });
        populateTree();
        treePanel.add(new JScrollPane(menuTree), BorderLayout.CENTER);
       
        desktop = new JDesktopPane();
        new DropTarget(desktop, DnDConstants.ACTION_COPY_OR_MOVE, new DesktopDnDListener());
               
        JSplitPane split = new JSplitPane(    JSplitPane.HORIZONTAL_SPLIT,
                                                        new JScrollPane(menuTree),
                                                        desktop
                                                    );
        split.setContinuousLayout(true);
       
        getContentPane().add(split, BorderLayout.CENTER);
    }
   
    private void addFrame(JInternalFrame frame, final JInternalFrameNode node) {
        if( !currentNode().hasAdded() ) {
            int numFrames = desktop.getAllFrames().length;
            frame.setLocation(numFrames*10, numFrames*10);
            frame.addInternalFrameListener(new InternalFrameAdapter() {
                public void internalFrameClosed(InternalFrameEvent e) {
                node.setAdded(false);
                }
          });
            desktop.add(frame);
            node.setAdded(true);
            frame.setVisible(true);
        }
    }
   
    private JInternalFrameNode currentNode() {
        return currentNode;
    }
   
    private void populateTree() {
       
        DefaultMutableTreeNode mainNode1 = new DefaultMutableTreeNode("Underpunkt 1");
        DefaultMutableTreeNode mainNode2 = new DefaultMutableTreeNode("Underpunkt 2");
       
        model.insertNodeInto(mainNode1, root,root.getChildCount());
        model.insertNodeInto(mainNode2, root,root.getChildCount());
        menuTree.scrollPathToVisible(new TreePath(mainNode2.getPath()));
       
        JInternalFrame frame = new JInternalFrame("Tekstpanel", true, true, true, true);
        JPanel textPanel = new JPanel(new BorderLayout());
        JTextPane pane = new JTextPane();
        textPanel.add(new JScrollPane(pane), BorderLayout.CENTER);
        frame.setContentPane(textPanel);
        JInternalFrameNode sub1 = new JInternalFrameNode("Tekstpanel", frame);
       
        frame = new JInternalFrame("Knapper", true, true, true, true);
        JPanel buttonPanel = new JPanel(new BorderLayout());
        JPanel buttons = new JPanel();
        buttons.add(new JButton("Ok"));
        buttons.add(new JButton("Annuller"));
        pane = new JTextPane();
        buttonPanel.add(new JScrollPane(pane), BorderLayout.CENTER);
        buttonPanel.add(buttons, BorderLayout.SOUTH);
        frame.setContentPane(buttonPanel);
        JInternalFrameNode sub2 = new JInternalFrameNode("Knapper",frame);
       
        frame = new JInternalFrame("Træ", true, true, true, true);
        JPanel treePanel = new JPanel(new BorderLayout());
        JTree tree = new JTree();
        treePanel.add(new JScrollPane(tree), BorderLayout.CENTER);
        frame.setContentPane(treePanel);
        JInternalFrameNode sub3 = new JInternalFrameNode("Træ",frame);
       
        model.insertNodeInto(sub1, mainNode1, mainNode1.getChildCount());
        model.insertNodeInto(sub2, mainNode1, mainNode1.getChildCount());
       
        model.insertNodeInto(sub3, mainNode2, mainNode2.getChildCount());
       
    }
   
    private boolean nodeIsSelected() {
        return nodeIsSelected;
    }
       
    private class JInternalFrameNode extends DefaultMutableTreeNode {
        private JInternalFrame frame;
        private boolean hasAdded;
        public JInternalFrameNode(String title,  JInternalFrame frame) {
            super(title);
            this.frame = frame;
           
            this.frame.setSize(200,200);
        }
        public JInternalFrame getFrame() {
            return frame;
        }
        public boolean hasAdded() {
            return hasAdded;
        }
        public void setAdded(boolean value) {
            hasAdded = value;
        }
    }
   
    private class DragTree extends JTree implements DragGestureListener {
       
        public DragTree(TreeModel model) {
            super(model);
            DragSource dragSource = DragSource.getDefaultDragSource();
       
            dragSource.createDefaultDragGestureRecognizer(
                                                                            this,
                                                          DnDConstants.ACTION_COPY_OR_MOVE,
                                                          this
                                                                        );
        }
        public void dragGestureRecognized(DragGestureEvent event) {
            if( nodeIsSelected() )
                event.startDrag(DragSource.DefaultCopyDrop, new StringSelection(""));
        }
    }
   
    private class DesktopDnDListener implements DropTargetListener {
        public void drop(DropTargetDropEvent e) {
            DataFlavor stringFlavor = DataFlavor.stringFlavor;
            if(e.isDataFlavorSupported(stringFlavor)) {
                e.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
                addFrame( currentNode().getFrame(), currentNode() );
                e.dropComplete(true);
            }
            else
                e.dropComplete(false);
        }
       
        public void dragEnter(DropTargetDragEvent e) {
            e.acceptDrag(DnDConstants.ACTION_COPY_OR_MOVE);
        }
      public void dragExit(DropTargetEvent e) {}
      public void dragOver(DropTargetDragEvent e) {}
      public void dropActionChanged(DropTargetDragEvent e){}
    }
}

class Go {
    public static void main(String[] args) {
      new IdraetsProgram().show();
  }
}
Avatar billede kimjdoek Nybegynder
16. marts 2003 - 13:20 #6
viht.. det må jeg nok sige, det ser fandeme fornemt ud!!!

meeen idrætsforening... *HOST* *HOST* ... opgave 9 host......
Avatar billede nocol Nybegynder
16. marts 2003 - 13:43 #7
Til viht - det er flot...Jeg tror nu nok bare at jeg holder mig til den første, da jeg helst skal kunne sætte resten af bestyrelsens medlemmer ind i hvordan programmet virker..Og jeg må ærlig talt indrømme, at eks2 er lige i overkanten - af hvad jeg kan overskue og forklare....

Til kimjdoek (mærkeligt navn - hedder du doek til efternavn??) - jeg ved ikke helt hvad du snakker om - kan jeg finde noget herinde på eksperten omkring opgave 9 - som er tilsvarende mit spm eller hvad?...

Nå, men alt i alt - så tak....Hvis jeg får problemer med gennemgangen af det til næstkommende bestyrelsesmøde - kan det godt være jeg lige har et par uddybende spm....Takker
Avatar billede kimjdoek Nybegynder
16. marts 2003 - 13:50 #8
nocol, det må du så undskylde, vi er bare en årgang studerende der sidder og laver en opgave, hvor dit spørgsmål passer afsindgt godt nedover...

så jeg kunne ikke lade være!

Kim
Avatar billede viht Nybegynder
16. marts 2003 - 14:15 #9
Får jeg ikke lidt point for mit besvær? :(
Avatar billede nocol Nybegynder
16. marts 2003 - 15:50 #10
Kimjdoek: Det er da helt ok....Det kunne du jo ikke vide..
Hvad går jeres opgave ud på? og hvad er det for en udd du går på?
Avatar billede kimjdoek Nybegynder
16. marts 2003 - 16:10 #11
det er en handelshøjskole/datalog udd. hvor vi skal lave et taxa system en database ,med 8 forespørgsler, og så i opgave 9 skal vi samle det i en GUI, hvor vi skal kunne vise 9 forskellige sider (ligesom dig) en intro side, og en side der er tilpasset hver forespørgsel :-)
Avatar billede nocol Nybegynder
16. marts 2003 - 17:12 #12
Det var sgu da finurligt...Jeg skal dog have en lidt mere end 9 har jeg fundet ud af og de 9 oprindelige var ikke inklusiv intro...Det var 9 forskellige pakker som interesserede kan købe sig ind på...

Nå, men held og lykke - håber du får en god karakter....Du kan jo bruge "mit" udarbejdet af viht - det tror jeg ikke han har noget i mod :)
Avatar billede kimjdoek Nybegynder
16. marts 2003 - 18:05 #13
hehe tak for det, men jeg har allerede lavet mit skellet.. ikke ligeså frækt som viht's anden løsning, men som sagt jeg skal også kunne forklare mig ud af det hehe
og man får sgu lidt bedre forståelse når man selv har skrevet koden... speciel når man er lidt nybegynder :-)

Kim
Avatar billede viht Nybegynder
16. marts 2003 - 21:01 #14
Det er nemlig fuldstændig korrekt :)
Avatar billede nocol Nybegynder
20. marts 2003 - 22:19 #15
vith,

jeg har lige et ekstra spørgsmål - planen er at programmet skal på nettet når det engang er klar..Kan man godt lægge dette program ud eller skal det så laves om til applet og hvad er forskellen på applet og GUI...Og hvad gør man helt præcist når man skal oploade et javaprogram
Avatar billede viht Nybegynder
20. marts 2003 - 23:32 #16
Well, strukturen for et en applet er lidt anderledes, og en almidelig applet tillader ikke brug af Swing klasser. Du bliver nok nødt til at oprette et nyt spørgsmål til det.. jeg har ikke forstand på appletter.
Avatar billede nocol Nybegynder
24. marts 2003 - 15:02 #17
ok - så vil jeg gøre det - ellers tak for hjælpen...jeg kan fortæller dig, at bestyrelsen var meget glade for dit grundlayout...

håber bare jeg kan finde en, som kan lave det tilsvarende som en applet..
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