Avatar billede ozman Nybegynder
31. maj 2004 - 11:52 Der er 11 kommentarer og
1 løsning

JTabbedPane i Gui

Jeg sidder med et program, hvor jeg gerne vil bruge JTabbedPane til at opdele nogle funktioner. Til det har jeg nogle spørgsmål som jeg håber at der nogen der kan hjælpe mig med.
1. Når man opretter JTabbedPane, så behøver de ikke ligge i forskellige klasser vel? Pt. har jeg lagt det i forskellige klasser, men vil gerne have det i samme klasse. ???
2. Jeg kan ikke få min ActionListener til at virke i JPanel som jeg PT bruger i de forskellige JTabbedPanes. Er der noget specielt med ActionListener og JPanel.???
Avatar billede Slettet bruger
31. maj 2004 - 13:22 #1
1. Hvis man skal forstå det som at du laver en klasse for hver tab du tilføjer, så nej - det er ikke nødvendigt. Du kunne evt blot kalde en metode i din klasse som returnerer et JPanel hvor du har "smidt" forskellige komponenter på, eller stykke et JPanel sammen før du sammensætter din JTabbedPane, og så tilføje den.

2. Hvis du vil lytte på skift imellem de forskellige panes kan du ikke bruge en ActionListener, du skal derimod knytte en ChangeListener på din JTabbedPane vha. metoden:

  void addChangeListener(ChangeListener l);
Avatar billede ozman Nybegynder
31. maj 2004 - 14:23 #2
hmm. Jeg kan ikke rigtigt få det til at virke med det der ChangeListener. Jeg skriver følgende:

public class "KLASSENAVN" extends JPanel implements ChangeListener
{

    public "KLASSENAVN"();
    {
        JTextField test2 = new JTextField();
        test.setBounds(10,10,10,10);
        add(test2);

          JButton test= new JButton("test");
    test.setBounds(340,350,150,30);
    test.setBorder( new EtchedBorder( EtchedBorder.RAISED ));
    add(test);
    test.setToolTipText("Tryk her for at slette alt");
    test.addChangeListener(this);
        }

          public void stateChanged(ChangeEvent e)
    {
      if(e.getSource()==test)
    {
          test2.setText("");
    }
       
    }
}
Hvad gør jeg galt:-(
Avatar billede Slettet bruger
31. maj 2004 - 14:26 #3
Jamen jeg tror du har misforstået hvad du skal bruge changelistener'en til... den bruger du til at håndtere events når brugeren skifter imellem de forskellige tabs. I dit tilfælde, når du vil ha' den til at reagere på "et klik på et knap" skal koden se således ud:

public class "KLASSENAVN" extends JPanel implements ChangeListener
{

    public "KLASSENAVN"();
    {
        JTextField test2 = new JTextField();
        test.setBounds(10,10,10,10);
        add(test2);

          JButton test= new JButton("test");
    test.setBounds(340,350,150,30);
    test.setBorder( new EtchedBorder( EtchedBorder.RAISED ));
    add(test);
    test.setToolTipText("Tryk her for at slette alt");
    test.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            test2.setText("");
        }
    });
}
Avatar billede Slettet bruger
31. maj 2004 - 14:27 #4
hovsa.... var lidt for hurtig på tasterne, hehe. Det er naturligvis ikke nødvendigt at implementer ChangeListener-interface't mere.
Avatar billede ozman Nybegynder
31. maj 2004 - 14:30 #5
hvis jeg skriver det... klager den over at test2 (altså mit textfield) ikke er final. Men det skal jo helst ikke være final.
Avatar billede Slettet bruger
31. maj 2004 - 14:32 #6
public class "KLASSENAVN" extends JPanel
{  private JTextField test2;

    public "KLASSENAVN"();
    {
        test2 = new JTextField();
        test.setBounds(10,10,10,10);
        add(test2);

          JButton test= new JButton("test");
    test.setBounds(340,350,150,30);
    test.setBorder( new EtchedBorder( EtchedBorder.RAISED ));
    add(test);
    test.setToolTipText("Tryk her for at slette alt");
    test.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            test2.setText("");
        }
    });
}

Nu må det da virke ;-)
Avatar billede ozman Nybegynder
31. maj 2004 - 14:37 #7
nope den vil stadig gerne have test2 som final
Avatar billede ozman Nybegynder
31. maj 2004 - 14:38 #8
Nu virker det, men kun vis mit textfield er final
Avatar billede Slettet bruger
31. maj 2004 - 14:56 #9
Takker for point :-)
Avatar billede ozman Nybegynder
31. maj 2004 - 15:08 #10
Selvtak, men ved du hvorfor jeg skal lave dem til final...det er ret underligt. Men det virker med det hele, også filudskrift.
Avatar billede Slettet bruger
31. maj 2004 - 15:12 #11
Det må ha' noget at gøre med scope af den anonyme indre klasse (ActionListener) ikke kan finde en reference til variablen med mindre den er erklæret final. Det burde nu også kunne løses hvis alle dine GUI-komponenter er lavet til instansvariabler på selve klassen, altså ligesom "private JTextField test2;" er det.
Avatar billede ozman Nybegynder
31. maj 2004 - 15:57 #12
Alle mine variabler er lavet på den måde. Og det fungere stadig på samme måde. Også kombobox'ene skal erkleres final for at virke med actionlistener. Meget mystisk.
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