Avatar billede web_the_world Nybegynder
19. marts 2003 - 18:19 Der er 14 kommentarer og
1 løsning

to vinduer ud fra et program??

Hey, jeg har et mindre problem...Når jeg compiler og kører mit lille program så dukker der to GUI-vinduer op...Det bagerste, hvor i der ikke er nogen faneblade - skulle ikke være der - det skulle side der hvor der står spm3 i det med fanablade (altså der hvor der er blankt)...

HVordan får jeg den tilbage på sin plads????

Koden er indsat nedenfor... 2 klasser

import java.sql.*;
import javax.swing.*;

public class Taxa
{
static Connection con;
      public static void main(String[] args) throws Exception

  {

      //load driveren og opret en forbindelsesobjekt til taxa2
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

      Connection con = DriverManager.getConnection("jdbc:odbc:taxa2");

      JFrame frame = new JFrame ("Layout Manager Demo");
      frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
      frame.setTitle("TAXA");     //titel på GUI
      JTabbedPane tp = new JTabbedPane();
         
      tp.addTab ("Spm 3", new Spm3(con));
     
      frame.getContentPane().add(tp);
      frame.pack();
      frame.show();
  }
}


KLasse to....

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

public class Spm3 extends JPanel implements ActionListener
{
    private JFrame frame;
    private JPanel panelmain, panel1, panel2, panel3, panel4;

    private JButton søg, slut;    //trykknapper til hhv. at søge i databasen og afslutte
    private JTextField vognnr, dato;        //tekstfelter til hhv. vognnr og dato
    private JTextArea resultat;        //tekst felt til at udskrive resultat
    private int WIDTH = 210, HEIGHT = 170;
    private String resultatUd;
    private DataBase database;
    private Connection con;            //databaseforbindelses-objektet

    public Spm3(Connection con)
    //konstruktør, sætter vinduet op
    {
        this.con= con;                    //overfør den modtagne databaseforbindelse

        database = new DataBase(con);

        frame = new JFrame("TAXA BAGGER");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        setSize(80,180);                //sæt vinduets størrelse
        setLocation(100,100);            //og placering (målt i pixels)
        setLayout(new FlowLayout());    //vælg layoutmanageren 'FlowLayout'

        resultat = new JTextArea(10, 45);

        JLabel input1 = new JLabel("Indtast vognummer");    //skriv ledeteksten 'Vognnr'
        vognnr= new JTextField(10);
        vognnr.addActionListener(this); //definer og tilføj tekstfeltet vognnr
       

      JLabel input2 = new JLabel("Indtast dato");
        dato= new JTextField(10);
        dato.addActionListener(this);
     

        søg= new JButton("Søg");    //definer og tilføj søg-knappen
     
        søg.addActionListener(this);  //registrer søg-knappen, så tryk på
                                        //den kan opfanges

        slut= new JButton("Afslut");        //definer og tilføj slut-knappen
     
        slut.addActionListener(this);    //registrer slut-knappen, så tryk på den kan opfanges


        panelmain = new JPanel();
        panelmain.setLayout(new BoxLayout (panelmain, BoxLayout.Y_AXIS));

       
        //Panel til søg vognnr og dato
        panel1 = new JPanel();
        panel1. setLayout(new FlowLayout(FlowLayout.LEFT));
        panel1.setBorder(new javax.swing.border.TitledBorder("Spørgsmål 3"));

        //Panel til textArea
        panel2 = new JPanel();
        panel2. setLayout(new FlowLayout(FlowLayout.LEFT));
        panel2.setBorder(new javax.swing.border.TitledBorder("Resultat"));

        //Panel til afslut knap
        panel3 = new JPanel();
        panel3. setLayout(new FlowLayout(FlowLayout.LEFT));


        panel1.add(vognnr);
        panel1.add(new JLabel("Indtast Vognnr"));    //skriv ledeteksten 'Vognnr'
        panel1.add(dato);
        panel1.add(new JLabel("Indtast Dato"));
        panel1.add(søg);

        panel2.add(resultat);

        panel3.add(slut);

        panelmain.add(Box.createRigidArea(new Dimension(0,8)));
        panelmain.add(panel1);
        panelmain.add(Box.createRigidArea(new Dimension(0,8)));
        panelmain.add(panel2);
        panelmain.add(Box.createRigidArea(new Dimension(0,8)));
        panelmain.add(panel3);
       

        frame.getContentPane().add(panelmain);

        frame.pack();
        frame.show();
    }

    public void actionPerformed(ActionEvent e)
    //metode, der kaldes automatisk, når brugeren trykker på én af de registrerede
    //trykknapper (søg eller slut).
    {
        if (e.getSource() == vognnr || e.getSource() == dato || e.getSource() == søg)
        {
            try
            {
                resultatUd=database.udskrivspm3a(vognnr.getText(), dato.getText());
                resultat.setText(resultatUd);
            }
            catch(Exception ex){System.out.println(ex);}
        }
        else if (e.getSource()==slut)            //ellers hvis det var slut-knappen
        {
            try
            {
                con.close();                    //nedlæg forbindelsen til myDB
            }
            catch (Exception ex){System.out.println(ex);}
            System.exit(0);                            //afslut
        }
    }
}
Avatar billede arne_v Ekspert
19. marts 2003 - 18:25 #1
Du instantierer en frame i begge klasser => du får 2 vinduer.
Avatar billede web_the_world Nybegynder
19. marts 2003 - 18:26 #2
ja - jeg var godt klar over det var problemet - men hvis jeg ikke gør det - så kommer der slet ikke noget ud...
Avatar billede arne_v Ekspert
19. marts 2003 - 18:26 #3
Mit gæt er at du vil:
  - ikke instantiere en frame i Spm3
  - sende framen fra frame med over i Spm3's constrctor og gemme den
  - bruge den gemte frame i Spm3
Avatar billede web_the_world Nybegynder
19. marts 2003 - 18:27 #4
hvis jeg sletter:
frame = new JFrame("TAXA BAGGER");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

fra spm3 - klassen så giver den følgende fejl:

frame = new JFrame("TAXA BAGGER");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Avatar billede arne_v Ekspert
19. marts 2003 - 18:28 #5
Prøv med:

    public Spm3(Connection con, JFrame fr)
    //konstruktør, sætter vinduet op
    {
        ...
        frame = fr;

og:

    public static void main(String[] args) throws Exception
  {
      ...
      tp.addTab ("Spm 3", new Spm3(con, this));
Avatar billede web_the_world Nybegynder
19. marts 2003 - 18:30 #6
ja - det er meget rigtig ramt - men hvordan gør jeg det - så det kommer til at se ud som Spm3 gør nu - altså den der kommer frem af sig selv?
Avatar billede arne_v Ekspert
19. marts 2003 - 18:33 #7
Gør den ikke det ?
Avatar billede web_the_world Nybegynder
19. marts 2003 - 18:34 #8
Det giver følgende fejl - når jeg prøver at compile main....

java:24: non-static variable this cannot be referenced from a static context
      tp.addTab ("Spm 3", new Spm3(con, this));
Avatar billede web_the_world Nybegynder
19. marts 2003 - 18:38 #9
hvor meget skal jeg slette fra den oprindeligt kode  - når jeg sætter det ind du har skrevet...
Avatar billede arne_v Ekspert
19. marts 2003 - 18:41 #10
Min fejl.

Det skal naturligvis være:

p.addTab ("Spm 3", new Spm3(con, frame));
Avatar billede arne_v Ekspert
19. marts 2003 - 18:41 #11
DU skal ikke slette noget bare ændre den frame = linie i Spm3.
Avatar billede web_the_world Nybegynder
19. marts 2003 - 18:45 #12
ja, det virker som så...problemet er bare, at der i main klassen faktisk er en del andre faneblade også - og dem overskriver den nu...se kode nedenfor:

import java.sql.*;
import javax.swing.*;

public class TaxaBagger
{
static Connection con;
      public static void main(String[] args) throws Exception

  {

      //load driveren og opret en forbindelsesobjekt til taxa2
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

      Connection con = DriverManager.getConnection("jdbc:odbc:taxa2");

      JFrame frame = new JFrame ("Layout Manager Demo");
      frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
      frame.setTitle("TAXA BAGGER");     //titel på GUI
      JTabbedPane tp = new JTabbedPane();
      tp.addTab ("Oversigt", new IntroPanel());    //kalder de forskellige klasser
      tp.addTab ("Spm 3", new Spm3(con, frame));
      tp.addTab ("Spm 3b", new Spm3b(con));
      tp.addTab ("Spm 4", new Spm4(con));
      tp.addTab ("Spm 5", new Spm5(con));
      tp.addTab ("Spm 6", new Spm6(con));
      tp.addTab ("Spm 7", new Spm7(con));
      tp.addTab ("Spm 8", new Spm8(con));

      frame.getContentPane().add(tp);
      frame.pack();
      frame.show();
  }
}
Avatar billede web_the_world Nybegynder
19. marts 2003 - 18:47 #13
ved overskriver mener jeg, at den ligger sig henover de andre - så det ikke er muligt at vælge de andre-....
Avatar billede arne_v Ekspert
19. marts 2003 - 18:52 #14
Uha - jeg er faktisk eikek den store Swing guru.

Jeg ved hvordan man undgår 2 frames.

Men tabbedpane ligger udover min erfaring.
Avatar billede web_the_world Nybegynder
19. marts 2003 - 18:54 #15
det var sgu ærgeligt...
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