Avatar billede nbj1 Praktikant
08. marts 2003 - 08:36 Der er 19 kommentarer og
1 løsning

abstract

hejsa
TextListener tekst = new TextListener();
txt1.addActionListener(tekst);


når min listner er i konstrutøren giver det ikke fejl
men hvis jeg flytter den ned i en metode får jeg dette:

237: java.awt.event.TextListener is abstract; cannot be instantiated
            TextListener tekst = new TextListener();
hvordan får jeg den peget hen på min listner metode?
Avatar billede soreno Praktikant
08. marts 2003 - 09:31 #1
Sådan der kan du gøre det:

public class Test extends Frame implements TextListener
{
  public Test()
  {
    txt1.addActionListener(this);
  }

  public void textValueChanged(TextEvent e)
  {
  }
}
Avatar billede nbj1 Praktikant
08. marts 2003 - 09:35 #2
jo men jeg har en klasse hvor jeg har textlistner del skal bruges i andre klasser er lidt spildt hvis jeg skal skrive det hele hver gang man må da vel kunne hente det fra den anden klasse?
Avatar billede soreno Praktikant
08. marts 2003 - 09:43 #3
du kan også gøre noget ala dette:

public class Test extends Frame
{
public Test()
  {
    txt1.addActionListener(new MinTextListener());
  }
}

class MinTextListener() implements TextListener
{
  public void textValueChanged(TextEvent e)
  {
    //do stuff
  }
}
Avatar billede soreno Praktikant
08. marts 2003 - 09:45 #4
Avatar billede nbj1 Praktikant
08. marts 2003 - 09:52 #5
dette har jeg i den ene klasse den skal så hentes i en anden klasse ???
    private class TextListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            if (transType == 0)
                konto.indsaet(Double.parseDouble(txt1.getText()));
                if (transType == 0)
                    JOptionPane.showMessageDialog(getFocusOwner(), "Du har her med indsat : " + txt1.getText());
            else if (transType == 1)
        {
                try
                {
                    konto.haev(Double.parseDouble(txt1.getText()));
                    JOptionPane.showMessageDialog(getFocusOwner(), "Du har her med Hævet : " + txt1.getText());
                }
                catch (myException m)
                {
                    lab2.setText(m.getMessage());
                }
            } // else
        //    pack();
        }
    } // class TextListener
Avatar billede nbj1 Praktikant
08. marts 2003 - 09:54 #6
det har jeg prøvet med:
TextListener tekst = new TextListener();
txt1.addActionListener(tekst);

men så kommer den med dette :
.TextListener is abstract; cannot be instantiated
            txt1.addActionListener(new TextListener());
Avatar billede soreno Praktikant
08. marts 2003 - 09:58 #7
1. Pas på med at bruge klassenavne som allerede finde i Java API'et (TextListener).

2. Du får problemer med at genkende variabler hvis du laver en seperat klasse (f.eks. konto, txt1 og lab2).

Du kan gøre sådan noget ala dette (ikke testet):
public class Test extends Frame
{
  public Test()
  {
    txt1.addActionListener(new MinTextListener{
      public void actionPerformed(ActionEvent e)
      {
      }
    });
  }
}
Avatar billede soreno Praktikant
08. marts 2003 - 10:02 #8
09:54:08 >> Det er fordi du kommer i kambolage med punkt 1.
Avatar billede nbj1 Praktikant
08. marts 2003 - 10:08 #9
hee tror vi snakker forbi henanden hvis
jeg har dette
TextListener tekst = new TextListener();
txt1.addActionListener(tekst);
i min konstruktør giver det ikke fejl da jeg har min  private class TextListener implements ActionListener i samme klasse men det skal du flyttes i en klasse for sig selv og så kan den ikke finde min metode TextListener
Avatar billede nbj1 Praktikant
08. marts 2003 - 10:11 #10
det du har nævn virker ikke den kan stadig ikke finde den metode TextListener som er i den anden klasse
Avatar billede soreno Praktikant
08. marts 2003 - 10:18 #11
Så mangler du vel at importe noget:
import java.awt.*;
import java.awt.event.*;

?
Avatar billede nbj1 Praktikant
08. marts 2003 - 10:21 #12
hee nej har jeg
Avatar billede soreno Praktikant
08. marts 2003 - 10:26 #13
Ok, så prøv at lave et debug eksempel.
Altså lav en frame med én knap og forsøg at putte listeneren på denne.
Hvis ikke du får det til at virke, så post koden - så er der sikkert et par stykker der kigger på den (mig incl.).
Avatar billede nbj1 Praktikant
08. marts 2003 - 10:56 #14
desvære det samme så er det bare ButtonListener den ikke kan finde i klassen Bankdesign som har metoden
    private class ButtonListener implements ActionListener
    {
   
        public void actionPerformed(ActionEvent e)
        {
              Object source = e.getSource();
           
            if (source == but1)
            {   
                if (check == 0)   
                {     
                       
                int result = Konti.getInstance().findKontoNummer(kontonummerTextField.getText());
                if( result > -1  )
                    kontrol();
       
                           
                    check = 1;
                }
            }   
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class KontoOversigt extends JPanel
    {   
        JButton        test;
        public KontoOversigt()
        {
            JLabel label1 = new JLabel("Her kommer din konto oversigt til at stå");
            JTextField txt1 = new JTextField("",20);
           
            ButtonListener knap = new ButtonListener();
            test = new JButton("Test");
            add(test, BorderLayout.SOUTH);
            test.addActionListener(knap);
           
//            TextListener tekst = new TextListener();
//            txt1.addActionListener(tekst);
               
//            add(txt1);
//           
//            JLabel lab2 = new JLabel();
//            lab2.setVisible(false);
//            add(lab2); // her
   
           
            setBackground(Color.lightGray);
            add(label1);
        }
    }
Avatar billede soreno Praktikant
08. marts 2003 - 11:11 #15
Prøv dette (i én fil - "KontoOversigt.java"):

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

    class KontoOversigt extends JPanel
    { 
        JButton        test;
        public KontoOversigt()
        {
            JLabel label1 = new JLabel("Her kommer din konto oversigt til at stå");
            JTextField txt1 = new JTextField("",20);
         
            ButtonListener knap = new ButtonListener();
            test = new JButton("Test");
            add(test, BorderLayout.SOUTH);
            test.addActionListener(knap);
         
//            TextListener tekst = new TextListener();
//            txt1.addActionListener(tekst);
             
//            add(txt1);
//         
//            JLabel lab2 = new JLabel();
//            lab2.setVisible(false);
//            add(lab2); // her
 
         
            setBackground(Color.lightGray);
            add(label1);
        }
    }

    class ButtonListener implements ActionListener
    {
 
        public void actionPerformed(ActionEvent e)
        {
              Object source = e.getSource();
         
            if (source == but1)
            { 
                if (check == 0) 
                {   
                     
                int result = Konti.getInstance().findKontoNummer(kontonummerTextField.getText());
                if( result > -1  )
                    kontrol();
     
                         
                    check = 1;
                }
            }
Avatar billede nbj1 Praktikant
08. marts 2003 - 11:21 #16
det vil sikker godt virke men så skal jeg have en buttonListner i hver klasse og det er fyldstof :(
Avatar billede soreno Praktikant
08. marts 2003 - 11:29 #17
Vil det sige at alle de klasser der skal benytte ButtonListener har samme variabelnavne og skal udføre det samme ??

Hvad vil du gøre med din actionPerformed - den skal vel udføre noget forskelligt afhængig i hvilken klasse den bruges i ?
Avatar billede nbj1 Praktikant
08. marts 2003 - 11:59 #18
ja men tanken var at man kunne have en fælles listner men til forskellige formål?
Avatar billede soreno Praktikant
08. marts 2003 - 12:02 #19
Det kan sikkert godt lade sig gøre, men jeg tror det er mere besværligt end gavnligt.
Forestil dig hvordan din actionPerformed ser ud hvis klassen skal bruges i 10 forskellige klasse.. Den bliver lang og uoverskuelig.

Jeg foretrækker selv den metode som jeg gav et eksempel på 09:31:34
Avatar billede nbj1 Praktikant
08. marts 2003 - 12:16 #20
ok takker
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