Avatar billede adagio Nybegynder
06. maj 2003 - 10:41 Der er 6 kommentarer og
1 løsning

GUI problemer

Jeg har to problemer med min GUI:

10 point for sp1 og 20 for sp2

1) Min menuBarItems vises under de textFields der er på min gui. Hvordan kan jeg fixe det problem?

2) Når jeg kører mit program, og vælger at skifte mellem mine 2 paneler (pnlUgeMenu, pnlGenerelMenu), så ser man at der bliver tegnet (flere gange) en masse TextFields oppe i venstre hjørne, de bliver fjernet efter kort tid... de står nærmest og blinker...

Jeg har prøvet at få programmet til at starte op, med at tegne en af panelerne med det samme... På det sted optegner den ikke TextFields flere gange...

Her er koden:

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

public class MenuGui extends JFrame implements ActionListener, KeyListener//, MouseListener, KeyListener
{
    // Oprettelse af Gui objekter
   
    JMenuBar mnuBar = new JMenuBar();
    JMenu mnuMenu = new JMenu();
    JMenuItem mnuUgeMenu = new JMenuItem();
    JMenuItem mnuGenerelMenu = new JMenuItem();
    JMenuItem mnuAfslut = new JMenuItem();
   
    JPanel contentPane;
    JPanel pnlUgeMenu = new JPanel();
    JPanel pnlGenerelMenu = new JPanel();
   
    int intPanelTop = 10;
    int intPanelLeft = 10;
       
    TextField txtUgeMenuDato [] = new TextField [5];
    TextField txtUgeMenuRetNavn [] = new TextField [5];
    TextField txtUgeMenuPris [] = new TextField [5];
   
    TextField txtGenerelMenuSpecialInfo [] = new TextField [5];
    TextField txtGenerelMenuRetNavn [] = new TextField [5];
    TextField txtGenerelMenuPris [] = new TextField [5];
   
    JLabel lblUgeMenuDato = new JLabel();
    JLabel lblUgeMenuRetNavn = new JLabel();
    JLabel lblUgeMenuPris = new JLabel();
   
    JLabel lblGenerelMenuPris = new JLabel();
    JLabel lblGenerelMenuRetNavn = new JLabel();
    JLabel lblGenerelMenuSpecialInfo = new JLabel();
   
    // TitledBorder og Border bruges til at omkranse felter med en linje, samt en tilsvarende tekst
   
    TitledBorder ttlBorderUgeMenu;
    TitledBorder ttlBorderGenerelMenu;
   
    // bdrLowered har fået navnet, da den skal bruges til at give en dybdeEffekt
   
    Border bdrLowered;
   
    //
    // Constructor
    //
   
    public MenuGui()
    {
        try
        {
            init();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
   
    //
    // Init() instansiere objekterne på GUI'en
    //

    private void init() throws Exception
    {
        contentPane = (JPanel) this.getContentPane();
        contentPane.setLayout(null);
       
        this.setTitle("Menu");
       
        bdrLowered = BorderFactory.createBevelBorder(BevelBorder.LOWERED,Color.white,Color.white,new Color(148, 145, 140),new Color(103, 101, 98));

        ttlBorderUgeMenu = new TitledBorder(bdrLowered, "Uge Menu");
        ttlBorderGenerelMenu = new TitledBorder(bdrLowered, "Generel Menu");
       
        //pnlUgeMenu.setVisible(false); // Så man kan spørge (under ActionPerformed) om panelet er visible eller ej
        //pnlGenerelMenu.setVisible(false);
       
        addListeners();
        makeMenuBar();
    }
   
    public void makeUgeMenu()
    {       
        pnlUgeMenu = new JPanel();
        pnlUgeMenu.setLayout(null);
        //pnlUgeMenu.setVisible(true);
        //pnlGenerelMenu.setVisible(false);
       
        for(int i = 0; i < 5; i++)
        {
            txtUgeMenuDato[i] = new TextField();
            txtUgeMenuDato[i].setBounds(10, (40 + (i * 25)), 80, 20);
            txtUgeMenuRetNavn[i] = new TextField();
            txtUgeMenuRetNavn[i].setBounds(100, (40 + (i * 25)), 200, 20);
            txtUgeMenuPris[i] = new TextField();
            txtUgeMenuPris[i].setBounds(310, (40 + (i * 25)), 30, 20);
        }
       
        lblUgeMenuDato.setText("Dato:");
        lblUgeMenuDato.setBounds(10, 10, 80, 30);
        lblUgeMenuRetNavn.setText("Ret navn:");
        lblUgeMenuRetNavn.setBounds(100, 10, 80, 30);
        lblUgeMenuPris.setText("Pris:");
        lblUgeMenuPris.setBounds(310, 10, 80, 30);

        pnlUgeMenu.setBounds(intPanelLeft, intPanelTop, 350, 170);
        pnlUgeMenu.setBorder(ttlBorderUgeMenu);
       

        for(int i = 0; i < 5; i++)
        {
            pnlUgeMenu.add(txtUgeMenuDato[i], null);
            pnlUgeMenu.add(txtUgeMenuRetNavn[i], null);
            pnlUgeMenu.add(txtUgeMenuPris[i], null);
        }
       
        pnlUgeMenu.add(lblUgeMenuDato, null);
        pnlUgeMenu.add(lblUgeMenuRetNavn, null);
        pnlUgeMenu.add(lblUgeMenuPris, null);
           
       
        contentPane.add(pnlUgeMenu, null);
       
        addUgeMenuListeners();
       
    }
   
    public void makeGenerelMenu()
    {       
        //pnlUgeMenu.setVisible(false);
        //pnlGenerelMenu.setVisible(true);
       
        for(int i = 0; i < 5; i++)
        {
            txtGenerelMenuRetNavn[i] = new TextField();
            txtGenerelMenuRetNavn[i].setBounds(10, (40 + (i * 25)), 200, 20);
            txtGenerelMenuPris[i] = new TextField();
            txtGenerelMenuPris[i].setBounds(215, (40 + (i * 25)), 30, 20);
            txtGenerelMenuSpecialInfo[i] = new TextField();
            txtGenerelMenuSpecialInfo[i].setBounds(250, (40 + (i * 25)), 90, 20);
        }
       
        lblGenerelMenuRetNavn.setText("RetNavn:");
        lblGenerelMenuRetNavn.setBounds(10, 10, 80, 30);
        lblGenerelMenuPris.setText("Pris:");
        lblGenerelMenuPris.setBounds(215, 10, 80, 30);
        lblGenerelMenuSpecialInfo.setText("Speical info:");
        lblGenerelMenuSpecialInfo.setBounds(250, 10, 80, 30);
       
        pnlGenerelMenu.setBounds(intPanelLeft, intPanelTop, 350, 170);
        pnlGenerelMenu.setBorder(ttlBorderGenerelMenu);
        pnlGenerelMenu.setLayout(null);
       
        for(int i = 0; i < 5; i++)
        {
            pnlGenerelMenu.add(txtGenerelMenuSpecialInfo[i], null);
            pnlGenerelMenu.add(txtGenerelMenuRetNavn[i], null);
            pnlGenerelMenu.add(txtGenerelMenuPris[i], null);
        }
       
        pnlGenerelMenu.add(lblGenerelMenuRetNavn, null);
        pnlGenerelMenu.add(lblGenerelMenuPris, null);
        pnlGenerelMenu.add(lblGenerelMenuSpecialInfo, null);
           
        contentPane.add(pnlGenerelMenu, null);
       
        repaint();
    }
   
    public void makeMenuBar()
    {
        mnuUgeMenu.setText("Uge Menu");
        mnuGenerelMenu.setText("Generel Menu");
        mnuAfslut.setText("Afslut");
        mnuMenu.setText("Menu");
       
        // Laver genvejstaster til menuBar'ens muligheder
       
        mnuUgeMenu.setAccelerator (KeyStroke.getKeyStroke(49, 2));
        mnuGenerelMenu.setAccelerator (KeyStroke.getKeyStroke(50, 2));
        //mnuAfslut.setAccelerator (KeyStroke.getKeyStroke(
       
        mnuMenu.add(mnuUgeMenu);
        mnuMenu.add(mnuGenerelMenu);
        mnuMenu.addSeparator();
        mnuMenu.add(mnuAfslut);
       
        mnuBar.add(mnuMenu);
       
        this.setJMenuBar(mnuBar);
    }
   
    public void addListeners()
    {
        mnuUgeMenu.addActionListener(this);
        mnuGenerelMenu.addActionListener(this);
        mnuAfslut.addActionListener(this);
    }
   
    public void addUgeMenuListeners()
    {
        txtUgeMenuPris[0].addKeyListener(this);
    }
   
    public void actionPerformed(ActionEvent e)
    {
        contentPane.remove(pnlGenerelMenu);
        contentPane.remove(pnlUgeMenu);
        repaint();
       
        if(e.getSource() == mnuUgeMenu)
        {
            //if(pnlUgeMenu.isVisible() != true) // Så den ikke kører koden, hvis panelet allerede er synligt
                makeUgeMenu();
                repaint();
        }
        else
        if(e.getSource() == mnuGenerelMenu) // Så den ikke kører koden, hvis panelet allerede er synligt
        {
            //if(pnlGenerelMenu.isVisible() != true)
                makeGenerelMenu();
        }
        else
        if(e.getSource() == mnuAfslut)
            System.exit(0);
       
    }
   
   
    public void keyPressed(KeyEvent k)
    {
        //System.out.println(k.getKeyCode());
    }
   
    public void keyTyped(KeyEvent k)
    {
       
    }
   
    public void keyReleased(KeyEvent k)
    {
       
    }
   
    public static void main(String args[])
    {
        MenuGui guiMenu = new MenuGui();
        guiMenu.setSize(610, 250);
        guiMenu.setVisible(true);
       
        // Når programmer lukkes via krydset i øverste højre hjørne
       
        guiMenu.addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent e)
            {
                System.exit(0);
            }
        });
    }
}
Avatar billede =maddog= Nybegynder
06. maj 2003 - 10:51 #1
Jeg kan ikke finde setJMenuBar(JMenuBar jmb) nogen steder. Hvis du bare bruger .add(Component c) til at tilføje vil din menu opføre sig som et normalt komponent (AFAIK).
Avatar billede adagio Nybegynder
06. maj 2003 - 11:10 #2
Vi har ikke lært noget om setJMenuBar... hvor set'er man den?
Avatar billede =maddog= Nybegynder
06. maj 2003 - 12:01 #3
Du gør det faktisk rigtigt:
this.setJMenuBar(mnuBar);
så det er ikke der den er gal. Jeg kan ikke spotte fejlen. Måske der er nogen med bedre "kodeøjne" der lige kan se hvor den er gal.
Avatar billede adagio Nybegynder
06. maj 2003 - 12:08 #4
...ahhh, ja nu kan jeg se... jeg kunne bare ikke huske at jeg havde brugt den...

Håber det er en anden som kan finde fejlen, da det er til et skole-projekt som snart skal afleveres...
Avatar billede lifo Nybegynder
06. maj 2003 - 17:52 #5
om du bruger JTextField i steded for TxtField så virker menuen fint
ved ikke om problem nr2 forsvinder 
måske da awt ikke er double buffered men det er swing
Avatar billede adagio Nybegynder
06. maj 2003 - 18:46 #6
Ja, nu virker det...

Og den klarede begge problemer, så vidt jeg kunne se... takker for hjælpen...

og forresten: Lav lige et svar, så du kan få pointene... :o)
Avatar billede lifo Nybegynder
06. maj 2003 - 21:46 #7
det var findt at det andet problem også forsvandt
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