Avatar billede andreasbj Nybegynder
18. maj 2005 - 12:13 Der er 26 kommentarer og
1 løsning

Metode til at have 1 vindue istedet for 4

Jeg er i øjeblikket i gang med at kode noget bookingsystem.
Jeg har fået lavet det sådan at man ved Mouselistener klikker på et billede og så åbner den et nyt vindue...men så sidder man til sidst med 4 vinduer åbne og det er jo ikke særlig smart. Jeg har lavet fire classer som jeg gerne vil have til at åbne i samme vindue men jeg aner ikke hvordan jeg kan få den til det. Det jeg har nu er:

public void clicked(java.awt.event.MouseEvent evt)
    {
        knap();
    }
Starter metoden knap():

public void knap()
    {
        Trin2 vindue = new Trin2();
        vindue.setSize(800,600);
        vindue.setTitle("- DTU Bio booking -");
        vindue.addWindowListener( new LukProgram() );
        vindue.setVisible(true);
    }

Kan man ikke få denne metode Knap() til at åbne trin 2 i samme vindue. Eller skal man gøre det på en anden måde..Trin 2 indeholder både en paint metode og nogle awt komponenter så ved ikke om jeg skal samle det hele i en klasse. Det ville bare være 1000 gange nemmere hvis man kunne gøre det i flere forskellige klasser.

Mvh. Andreas
Avatar billede andreasbj Nybegynder
18. maj 2005 - 12:17 #1
Trin 2 ser sådan ud(og åbner så igen trin 3 som ikke er bygget på endnu) :


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

public class Trin2 extends javax.swing.JFrame
{
       
   
    public Trin2()
    {
        initComponents();
        setSize(800,600);
        setTitle("- Bio booking -");
        try
        {
            jbInit();
        }
       
        catch (Exception exception)
        {
            exception.printStackTrace();
        }
    }
   
    public void paint(Graphics g)
    {
        Insets in = getInsets();
        g.translate(in.left,in.top);
       
        Image bg = Toolkit.getDefaultToolkit().getImage("bg.png");
        Image bg2 = Toolkit.getDefaultToolkit().getImage("bg2.png");
        g.drawImage(bg, 0, 0, this);
        g.drawImage(bg2, 50, 203, this);
    }
   
    Film film1 = new Film("Hitch","Komedie",92);  //Der oprettes et objekt af typen Film. Dette oprettes der 6 af.
    Film film2 = new Film("Bjørne Brødre","Tegnefilm",93);
    Film film3 = new Film("Constantine","Thriller",91);
    Film film4 = new Film("Nordkraft","Drama",95);
    Film film5 = new Film("Solkongen","Komedie",85);
    Film film6 = new Film("The ring 2","Gyser",90);

    Choice vælgFilm = new Choice();
    Choice vælgSpl = new Choice();
 
    private void jbInit() throws Exception
    {
               
        vælgFilm.setBounds(new Rectangle(279, 280, 150, 19));     
        vælgFilm.addItem(film1+"");       
        vælgFilm.addItem(film2+"");
        vælgFilm.addItem(film3+"");
        vælgFilm.addItem(film4+"");
        vælgFilm.addItem(film5+"");
        vælgFilm.addItem(film6+"");

        vælgSpl.setBounds(new Rectangle(279, 315, 70, 19));     
        vælgSpl.addItem("12:00");       
        vælgSpl.addItem("14:00");
        vælgSpl.addItem("16:00");
        vælgSpl.addItem("18:00");
               
        this.setLayout(null);
        this.add(vælgFilm,null);
        this.add(vælgSpl,null);
    }
   
   
    public void initComponents()
    {
        jLabel1 = new javax.swing.JLabel();

        getContentPane().setLayout(null);

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
                jLabel1.setPreferredSize(new java.awt.Dimension(75, 39));
             
                jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource( "/knap.png" )));
                jLabel1.setBounds(new Rectangle(373, 329, 75, 39));
             
        jLabel1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                enter(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                exit(evt);
            }
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                clicked(evt);
            }
        });
       
   
       
        getContentPane().add(jLabel1);

        pack();
   
    }

    private void exit(java.awt.event.MouseEvent evt)
    {
        jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource( "/knap.png" )));
    }

    public void clicked(java.awt.event.MouseEvent evt)
    {
        knap();
    }

    private void enter(java.awt.event.MouseEvent evt)
    {
        jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource( "/knapon.png" )));
    }
   

    public static void main(String args[])
    {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Trin2().setVisible(true);
             
    }
        });
    }
   
    public void knap()
    {
        Trin3 vindue = new Trin3();
        vindue.setSize(800,600);
        vindue.setTitle("- Bio booking -");
        vindue.addWindowListener( new LukProgram() );
        vindue.setVisible(true);
    }
   
    private javax.swing.JLabel jLabel1;

}
Avatar billede arne_v Ekspert
18. maj 2005 - 12:26 #2
JFrame = vindue

JPanel = del af vindue
Avatar billede arne_v Ekspert
18. maj 2005 - 12:27 #3
så jeg tror at du skal lave trin2 om til et JPanel og adde til din JFrame
Avatar billede andreasbj Nybegynder
18. maj 2005 - 12:31 #4
okay...det vil sige jeg skal ændre extends javax.swing.JFrame til javax.swing.JPanel.
(og en del andet vel sagtens også?)
Hvordan skal min knap metode så se ud?

er ret ny til det her må man sige.
Avatar billede arne_v Ekspert
18. maj 2005 - 12:33 #5
public void knap()
    {
        Trin2 vindue = new Trin2();
        this.getContentpane().add(vindue);
    }

plus sikkert lidt mere

og du skal nok have det rigtige layout på this.getContentpane() for at det ser
brugbart ud

men JPanel må være vejen frem
Avatar billede andreasbj Nybegynder
18. maj 2005 - 12:36 #6
okay det prøver jeg lige at kigge på....men du får først point når jeg har fået det til at virke :D

Så jeg vender nok tilbage med flere spørgsmål
Avatar billede andreasbj Nybegynder
18. maj 2005 - 13:17 #7
hvis jeg har det i 4 forskellige klasse kan jeg så godt hente information fra nogle komponenter fra det ene over i det andet. hvis man har f.eks. TextField Navn1 i den ene klasse kan man vel ikke skrive Navn1.getText() i den anden klasse.? så er den variabel vel ikke defineret der.
Avatar billede arne_v Ekspert
18. maj 2005 - 13:45 #8
ja - hvis altså du har en reference til de andre objekter/klasser
Avatar billede andreasbj Nybegynder
18. maj 2005 - 13:53 #9
ja okay den havde jeg ikke lige gennemtænkt for jeg havde faktisk lavet løsningen til den - så det går jo meget godt.
Avatar billede andreasbj Nybegynder
18. maj 2005 - 14:41 #10
Okay vi kører videre med fejlene:
Her skal jeg have sat en "throws IOException" ind for at jeg skrive data til en teksfil. Og nu har jeg prøvet samtlige steder. Ved ikke om der er noget der skal ændres til noget helt andet for at få det til at virke.


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


public class Trin1 extends javax.swing.JFrame
{
       
   
    public Trin1()
    {
        initComponents();
        setSize(800,600);
        setTitle("- DTU Bio booking -");
        try
        {
            jbInit();
        }
       
        catch (Exception exception)
        {
            exception.printStackTrace();
        }
    }
   
    public void paint(Graphics g)
    {
        Insets in = getInsets();
        g.translate(in.left,in.top);
       
        Image bg = Toolkit.getDefaultToolkit().getImage("bg.png");
        Image bg1 = Toolkit.getDefaultToolkit().getImage("bg1.png");
        g.drawImage(bg, 0, 0, this);
        g.drawImage(bg1, 50, 203, this);
    }

   
    TextField Navn1 = new TextField();
    TextField tlf1 = new TextField();
    Choice antal1 = new Choice();
   

 
    private void jbInit()
    {         
        Navn1.setText("");
        Navn1.setBounds(new Rectangle(279, 245, 145, 19));
       
        tlf1.setText("");
        tlf1.setBounds(new Rectangle(279, 281, 145, 19));

        antal1.setBounds(new Rectangle(279, 315, 70, 19));     
        antal1.addItem("1");       
        antal1.addItem("2");
        antal1.addItem("3");
        antal1.addItem("4");
        this.setLayout(null);
        this.add(Navn1,null);
        this.add(tlf1,null);
        this.add(antal1,null);
    }
   
   
    public void initComponents()
    {
        jLabel1 = new javax.swing.JLabel();

        getContentPane().setLayout(null);

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
                jLabel1.setPreferredSize(new java.awt.Dimension(75, 39));
             
                jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource( "/knap.png" )));
                jLabel1.setBounds(new Rectangle(373, 329, 75, 39));
             
        jLabel1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                enter(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                exit(evt);
            }
            public void mouseClicked(java.awt.event.MouseEvent evt)
            {
                clicked(evt);
            }
        });
       
   
       
        getContentPane().add(jLabel1);

        pack();
   
    }

    private void exit(java.awt.event.MouseEvent evt)
    {
        jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource( "/knap.png" )));
    }

    public void clicked(java.awt.event.MouseEvent evt)
    {
        skriv();
        knap();
    }

    private void enter(java.awt.event.MouseEvent evt)
    {
        jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource( "/knapon.png" )));
    }
   

    public static void main(String args[])
    {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Trin1().setVisible(true);
               
 
   
             
    }
        });
       
       
    }
   
    public void skriv() throws IOException
    {
        FileWriter bruger = new FileWriter("bruger.txt");
        PrintWriter ud = new PrintWriter(bruger);
        ud.println(""+Navn1.getText());
        ud.println(tlf1.getText()+"");
        ud.println(antal1.getSelectedItem()+"");
        ud.close();
    }
   
    public void knap()
    {
        Trin2 vindue = new Trin2();
        vindue.setSize(800,600);
        vindue.setTitle("- DTU Bio booking -");
        vindue.addWindowListener( new LukProgram() );
        vindue.setVisible(true);
    }
   
 
   
    private javax.swing.JLabel jLabel1;

}
Avatar billede arne_v Ekspert
18. maj 2005 - 15:20 #11
Var det ikke bedre at bruge try catch i skriv metoden ?
Avatar billede andreasbj Nybegynder
18. maj 2005 - 15:34 #12
det har jeg også prøvet men jeg har sikkert skrevet det ind forkert. Problemer er at jeg ikke ved hvor det skal skrives.

        try
        {
            ??????
        }
       
        catch (Exception exception)
        {
            exception.printStackTrace(PrintWriter);
        }

Det er det her jeg har skrevet ind men jeg må sige jeg aner ikke hvad den gør.
Avatar billede andreasbj Nybegynder
18. maj 2005 - 15:40 #13
har lige prøve det her og der kunne den godt compile men den skrev så bare null til teksten...men nu oprettede den den da

public void clicked(java.awt.event.MouseEvent evt)
    {
        try
        {
            skriv();       
}
       
        catch (Exception exception)
        {
            exception.printStackTrace(PrintWriter);
        }

        knap();
    }
Avatar billede andreasbj Nybegynder
18. maj 2005 - 15:44 #14
ha det virker sørme..altså det med teksten
Avatar billede arne_v Ekspert
18. maj 2005 - 15:44 #15
Prøv:

        catch (Exception ex)
        {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }
Avatar billede andreasbj Nybegynder
18. maj 2005 - 15:47 #16
det virker også. hvad er forskellen på det og på det jeg skrev
Avatar billede arne_v Ekspert
18. maj 2005 - 15:54 #17
din version fortsøger at skrive til console vindue i tilfælde af fejl - min
laver en popup
Avatar billede andreasbj Nybegynder
18. maj 2005 - 15:56 #18
okay...hvilke fejl kunne der eventuelt komme??
Avatar billede arne_v Ekspert
18. maj 2005 - 15:58 #19
prøv:

FileWriter bruger = new FileWriter("X:\\bruger.txt");

forudsat at du ike har et X drev
Avatar billede andreasbj Nybegynder
18. maj 2005 - 16:01 #20
okay skide smart.
Avatar billede arne_v Ekspert
18. maj 2005 - 16:03 #21
eller disken kan være løbet fuld

eller filen ligger der i forvejen og du har ike adgang til den

eller en million andre ting

fejl er normalt ikke så svære at få
Avatar billede andreasbj Nybegynder
18. maj 2005 - 16:52 #22
Når man bruger FileReader() kan man så ikke få den til at læse linje 5 f.eks. ved at skrive et eller andet ala:

variabel.FileReader(5)

Synes ikke jeg kan få den til at skrive lige den linje jeg vil have. Jeg kan sagtens få den til at skrive alle linjerne med en while-løkke men det andet ville være smartere.

Ka' godt være jeg skal ændre pointene til lidt mere med alt det du har hjulpet med.
Avatar billede arne_v Ekspert
18. maj 2005 - 17:08 #23
nej - du bliver nødt til at lave 5 readLine
Avatar billede andreasbj Nybegynder
18. maj 2005 - 17:49 #24
okay..nu jeg har dig så må jeg lige spørge dig om noget til selve biografbookingsystemet. Jeg har lavet et 2D array med sæderne og rækkerne i biografsalen (tror faktisk det var dig der også hjalp mig med at lave den). Som så udskriver salen med 0'er. Jeg har fået lavet det sådan at den tegner et billede af et sæde i stedet for 0'et sådan at man kan se hvilke sæder der er ledige. Her skal den så tegne et billede af et andet farvet sæde når værdien er 1. Det er snart på plads. Hvordan kan man så lave selve vælge processen, hvor brugeren vælger de sæder som han/hun vil sidde på. Her skal de valgte sæder have et andet billede med en anden sæde farve. men hvordan får man det til at virke med antallet af billetter brugeren har valgt sådan at det heller ikke kommer i karambolage med de bestilte sæder. Havde forestillet mig noget med noget mouselistener, men hvordan kan man opbygge det? Har du nogle fif? Ved godt det er mange spørgsmål på en gang men når man ikke lige har så meget styr på det er det meget rart at kunne henvende sig her inde.
Avatar billede arne_v Ekspert
18. maj 2005 - 20:18 #25
umiddelbart tror jeg at du kan sætte samme action listener på alle kompenenterne
og så teste på event source
Avatar billede andreasbj Nybegynder
19. maj 2005 - 11:46 #26
Ka jeg få dig til at svare engang så får du lige nogle point for din hjælp.
Avatar billede arne_v Ekspert
19. maj 2005 - 12:08 #27
svar
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