Avatar billede tunc84 Nybegynder
21. december 2004 - 23:44 Der er 19 kommentarer og
1 løsning

Hjælp med GUI'en

Hej folkens!! skal op til java eksamen snart.
Har fået udleveret følgende spørgsmål, som jeg ik har styr på. Nogen der kan hjælpe??

1)Kort beskrivelse af, hvad der sker i GUI'en.

2)Beskriv udfra implementationen den metode, som opbygger GUI- framen.

2)Beskriv udfra implementationen af klassen, hvordan metoden actionPerformed()virker, f.eks. når clear-knappen aktiveres.

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

/**
* A graphical user interface for the calculator. No calculation is being
* done here. This class is responsible just for putting up the display on
* screen.
*/
public class CalculatorGUI implements ActionListener
{
    private CalculatorUI ui;
    private JFrame frame;
    private JTextField display;
    private JLabel status;
    private static String version = "version 1.0";
    private String displaystring;
    private State state;
    private CalculatorEngine engine = new CalculatorEngine(true);

    /**
    * Creates a user interface for a given calculator.
    */
    public CalculatorGUI()
    {
        makeFrame();
        frame.setVisible(true);
        displaystring = "";
    }

    /**
    * Make this interface visible again. (Has no effect if it is already
    * visible.)
    */
    public void setVisible(boolean visible)
    {
        frame.setVisible(visible);
    }

    /**
    * Makes the frame for the user interface.
    */
    private void makeFrame()
    {
        //Create a Frame window with a title
        frame = new JFrame("The ITD12 Calculator");
        //Make a menu bar
        makeMenuBar(frame);
       
        //Get the content pane for this frame to hold GUI-components
        Container contentPane = frame.getContentPane();

        //Set a border layout for the content pane
        contentPane.setLayout(new BorderLayout());

        //Create a text field window
        display = new JTextField();

        //Create a label
        status = new JLabel("Morten og Jesper");
       
        //Place the text field in the content panes northern border
        contentPane.add(display, BorderLayout.NORTH);
        //Place the label in the content panes southern border
        contentPane.add(status, BorderLayout.SOUTH);

        //Now create a button panel with a grid layout holding all the buttons
        //The grid has 5 rows and 4 columns
        JPanel buttonPanel = new JPanel(new GridLayout(5,4));
            //Row 1
            buttonPanel.add(new JLabel(" ")); //Column 1
            buttonPanel.add(new JLabel(" ")); //Column 2
            buttonPanel.add(new JLabel(" ")); //Column 3
            addButton(buttonPanel, "C");      //Column 4
            //Row 2
            addButton(buttonPanel, "7");
            addButton(buttonPanel, "8");
            addButton(buttonPanel, "9");
            addButton(buttonPanel, "/");
            //Row 3
            addButton(buttonPanel, "4");
            addButton(buttonPanel, "5");
            addButton(buttonPanel, "6");
            addButton(buttonPanel, "*");
            //Row 4
            addButton(buttonPanel, "1");
            addButton(buttonPanel, "2");
            addButton(buttonPanel, "3");
            addButton(buttonPanel, "-");
            //Row 5           
            addButton(buttonPanel, "0");
            addButton(buttonPanel, ".");
            addButton(buttonPanel, "=");
            addButton(buttonPanel, "+");
       
        //Place the button panel in the content panes center border
        contentPane.add(buttonPanel, BorderLayout.CENTER);
       
       
        //Make the window fit the layouts set up
        frame.pack();   
    }

    /**
    * Sets up a menubar with menus and menu items
    */
    private void makeMenuBar(JFrame frame)
    {
        //Create a menu bar
        JMenuBar menuBar = new JMenuBar();
        //Add it to the frame
        frame.setJMenuBar(menuBar);

        //Create a menu
        JMenu helpMenu = new JMenu("Help");
        //Push the menu to the right
        menuBar.add(Box.createHorizontalGlue());
        //Add it to the menu bar
        menuBar.add(helpMenu);

        //Create a menu item
        JMenuItem aboutItem = new JMenuItem("About");
        //add it to the help menu
        helpMenu.add(aboutItem);
        //add this object to the action listener
        aboutItem.addActionListener(this);

    }

    /**
    * Add a button to the button panel.
    */
    private void addButton(JPanel buttonPanel, String buttonText)
    {
        JButton button = new JButton(buttonText);
        button.addActionListener(this);
        buttonPanel.add(button);
    }


    private void onAbout()
    {
        JOptionPane.showMessageDialog(frame, "Simple calculator " + version + "\n" + "Created by Kaleb & Fatih");
    }


    /**
    * An interface action has been performed. Find out what it was and
    * handle it.
    */
    public void actionPerformed(ActionEvent event)
    {
        String command = event.getActionCommand();

        if (command.equals("About"))
        {
            onAbout();
            return;
        }

        char chr = command.charAt(0);
       
        displaystring += command;
       
        display.setText(displaystring);
       
        state.ui.parseInput(chr);
       
        System.out.println("Test result from CalculatorGUI : " + state.engine.getResult());
       
        String convertstring = "";
       
            if (chr == '=')
            {
       
            display.setText(convertstring + state.engine.getResult());
            displaystring = "";
            }
           
                else if (chr == 'C')
                {
                    displaystring = "";
                    display.setText(displaystring);
                }
               
           
            System.out.println("Button pressed: " + chr);

    }

}
Avatar billede arne_v Ekspert
21. december 2004 - 23:51 #1
Hvordan har du lavet programmet hvis ikke du kan forklare hvad det gør ?
Avatar billede kalp Novice
21. december 2004 - 23:55 #2
stirre mig sikkert blind i koden.. men jeg kan ikke finde "clear" knappen.
Avatar billede arne_v Ekspert
21. december 2004 - 23:57 #3
addButton(buttonPanel, "C");
Avatar billede kalp Novice
21. december 2004 - 23:59 #4
thanks: )
Avatar billede tunc84 Nybegynder
22. december 2004 - 00:03 #5
Vi fik den af vores lære, da vi ik havde tid til at lave den selv. Skal lige siges at jeg er lige begyndt med at programmere.
Men til eksamen SKAL jeg vide hvad der sker i koden.
Avatar billede kalp Novice
22. december 2004 - 00:14 #6
Det tager bare lang tid skriftligt at gå igennem koden synes jeg... men kan fortælle det første der sker når din GUI bliver oprettet er det inde i konstruktøren


  public CalculatorGUI()
    {
        makeFrame();
        frame.setVisible(true);
        displaystring = "";
    }


din konstruktør kalder nogen metoder... makeFrame() som laver din brugergrænseflade
og setVisible() som gør din frame synlig!(frame = brugergrænseflade)

din String displaystring bliver sat til at være tom.. altså indeholde ingen tegn... for ellers ville den have en værdi "null" og så vil du få en fejl når programmet starter.
Avatar billede kalp Novice
22. december 2004 - 00:22 #7
angående din clear knap så ser jeg det som om den går ned i denne metode

  public void actionPerformed(ActionEvent event)


springer det meste kode over... ned til

else if (chr == 'C')
             
og udføre kun


  {
                    displaystring = "";
                    display.setText(displaystring);
                }
               
           
            System.out.println("Button pressed: " + chr);
Avatar billede tunc84 Nybegynder
22. december 2004 - 00:23 #8
Ok kalp, men ku du eventuelt svare på spørgsmål 2 og 3.
Avatar billede kalp Novice
22. december 2004 - 00:31 #9
spørgsmål 3 har jeg lige svaret på hehe

spørgsmål 2 er vel denne metode

private void makeFrame()

og hvis du kigger på den så står der faktisk kommentare til hvad den gør.. de forskellige ting.. alt det med \\ tegnene foran... det står på engelsk
Avatar billede kalp Novice
22. december 2004 - 00:33 #10
Alt det her...

ø//Create a Frame window with a title
ø//Make a menu bar
ø//Get the content pane for this frame to hold GUI-components
ø//Set a border layout for the content pane
ø//Create a text field window

ø//Create a label
ø//Place the text field in the content panes northern border
ø//Place the label in the content panes southern border
ø//Now create a button panel with a grid layout holding all the buttons
//The grid has 5 rows and 4 columns
ø//Row 1
ø//Row 2
ø//Row 3
ø//Row 4

ø//Row 5
ø//Place the button panel in the content panes center border
ø//Make the window fit the layouts set up

så står koden under hver enkelt... så den er vel  beskrevet... bare på engelsk
Avatar billede tunc84 Nybegynder
22. december 2004 - 00:48 #11
Ok kalp. Tak for hjælpen
du er sikret point, men venter lige lidt med at lukke spørgsmålet.
Avatar billede kalp Novice
22. december 2004 - 00:50 #12
det helt i orden... der  kan sikkert fyldes mere på: )
Avatar billede tunc84 Nybegynder
22. december 2004 - 00:53 #13
Hvad hedder disse, og hvad gør de??   

    private CalculatorUI ui;
    private JFrame frame;
    private JTextField display;
    private JLabel status;
    private static String version = "version 1.0";
    private String displaystring;
    private State state;
    private CalculatorEngine engine = new CalculatorEngine(true);
Avatar billede kalp Novice
22. december 2004 - 00:57 #14
private CalculatorUI ui;
private JFrame frame;
private JTextField display;
private JLabel status;

Det er alle referencer!
status er en reference til et JLabel objekt
display er en reference til et JTextField objet
Avatar billede kalp Novice
22. december 2004 - 00:59 #15
private static String version = "version 1.0";
// opretter et String objekt... og initialisere det med værdien version 1.0

private String displaystring;
// en reference til et string objekt

private State state;
//en reference til et State objekt

private CalculatorEngine engine = new CalculatorEngine(true);
// opretter et CalculatorEngine objekt
Avatar billede tunc84 Nybegynder
22. december 2004 - 01:03 #16
hmmmm.... ku du ikk uddybe det lidt mere
Avatar billede kalp Novice
22. december 2004 - 01:10 #17
en reference betyder at du har oprettet en variabel som kan pege på et bestemt type objekt (String's er objekter... og de fleste klasser er objekter.. dvs skabeloner man kan lave objekter af)

når du skriver

String display;

betyder det egentlig at display er en kopi af String... så alt en string kan kan en display også... og string kan i hvertfald gemme på tekst... så derfor kan du også gemme tekst i display for det er jo en kopi. Det er bare sådan at det kun er en reference på nuværende tidspunkt.. du har ikke initialiseret den.. dvs givet den nogen værdi.

det gør du bagefter ved at skrive

display = "et eller andet her bare det er ..alt mulig tekst";

Det gælder alle sammen..

fx

CalculatorEngine engine = new CalculatorEngine(true);

opretter et objekt af klassen/skabelonen CalculatorEngine

du har sikkert koden til denne klasse... kig i den.. se hvad den kan gøre...
nu kan vores kopi  "engine" præcis det samme som det der står i din CalculatorEngine klasse
Avatar billede kalp Novice
22. december 2004 - 01:11 #18
sikkert meget dårligt forklaret hehe...

men jeg er heller ikke god til at lære fra mig mig desværre: )


men kan uddybe der hvor jeg taler sort
Avatar billede tunc84 Nybegynder
22. december 2004 - 01:11 #19
Lækkert... Tusind tak
nu forstår jeg det
Avatar billede kalp Novice
22. december 2004 - 01:14 #20
Ligger lige et svar... men kig igennem.. se om der er mere du lige mangler så skal jeg se om jeg kan svare: )
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