|
| Hvordan får man oprettet en event på en kl~ Fra : nivS1978@gmail.com |
Dato : 17-03-09 09:02 |
|
Hej NG
Det er 10 år siden jeg har programmeret Java så jeg kan ikke helt
huske hvordan man gør.
Jeg har en klasse (som er en extend til java.awt.Panel) med nogle
knapper. Panelet er til at læse et RFID fra en scanner.
Anyway i mit hoved vindue har jeg så tilføjet panelet og det virker
fint nok, men når mit RFID panel har læst et RFID fra en chip, så vil
jeg gerne have at den trigger en funktion i hoved vinduet.
Det er sådan at RFID panelet vil blive brugt i flere forskellige
vinduer osv, så det skal være en måde når man opretter panel objektet
at man på en eller anden måde kan give den en trigger funktion i hoved
klassen. Det er sikkert ligesom den ActionListener jeg har på mine
knapper, men jeg kan ikke finde ud af hvordan det skal gøres?
Synes ikke rigtigt jeg har kunne google mig til det eller hvad det
hedder? Jeg vil sætte stor pris på et svar med et eksempel eller link
til et helst meget simpelt eksempel på hvordan man gør det?
Her er noget kode at arbejde ud fra, det er klippet kraftigt ned og
ikke lige syntax tjekket, men bare for at give jer en ide om hvad jeg
mener.
// Panelet som bruges til at scanne et RFID
public class PanelScanner extends Panel {
private Button btnStartScan = new Button();
private String sRFID;
public PanelScanner() {
super();
buttonStartScan.setLabel("Start");
buttonStartScan.addActionListener(new
PanelScanner_buttonStartScanner_actionAdapter(this));
buttonStartScan.setBounds(new Rectangle(0, 0, 80, 20));
add(buttonStartScan);
}
public void buttonStartScanner_actionPerformed(ActionEvent e)
{
RFIDScanner rfid = new RFIDScanner();
sRFID = rfid.getUID();
if (sRFID!=null)
{
// her skal hoved vinduet have besked om at et RFID er læst,
så RFIDHasBeenScanned() skal kaldes.
// Men klassen bruges af andre vinduer og functionen kan også
hedde noget andet i et andet vindue.
// Så hvordan skal det implementeres?
}
}
}
// Action listener så knappen start fungere
class PanelScanner_buttonStartScanner_actionAdapter implements
ActionListener {
private PanelScanner adaptee;
PanelScanner_buttonStartScanner_actionAdapter(PanelScanner
adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.buttonStartScanner_actionPerformed(e);
}
}
// Mit hoved vindue
class HovedVindue extends Frame {
private PanelScanner panel = new PanelScanner();
public void HovedVindue()
{
panel.setBounds(0, 100, 200, 50);
add(panel);
}
public void RFIDHasBeenScanned() {
// Denne funktion skal kaldes når start knappen i "PanelScanner"
trykkes og den har modtaget et RFID.
}
}
| |
Arne Vajhøj (18-03-2009)
| Kommentar Fra : Arne Vajhøj |
Dato : 18-03-09 00:42 |
|
nivS1978@gmail.com wrote:
> Det er 10 år siden jeg har programmeret Java så jeg kan ikke helt
> huske hvordan man gør.
> Jeg har en klasse (som er en extend til java.awt.Panel) med nogle
> knapper. Panelet er til at læse et RFID fra en scanner.
>
> Anyway i mit hoved vindue har jeg så tilføjet panelet og det virker
> fint nok, men når mit RFID panel har læst et RFID fra en chip, så vil
> jeg gerne have at den trigger en funktion i hoved vinduet.
> Det er sådan at RFID panelet vil blive brugt i flere forskellige
> vinduer osv, så det skal være en måde når man opretter panel objektet
> at man på en eller anden måde kan give den en trigger funktion i hoved
> klassen. Det er sikkert ligesom den ActionListener jeg har på mine
> knapper, men jeg kan ikke finde ud af hvordan det skal gøres?
> Synes ikke rigtigt jeg har kunne google mig til det eller hvad det
> hedder? Jeg vil sætte stor pris på et svar med et eksempel eller link
> til et helst meget simpelt eksempel på hvordan man gør det?
> Her er noget kode at arbejde ud fra, det er klippet kraftigt ned og
> ikke lige syntax tjekket, men bare for at give jer en ide om hvad jeg
> mener.
Send en ref til hoved vindue med over til dit panels constructor,
gem den i en instans variabel og brug den når du skal kalde.
Arne
PS: Hvorfor ikke Swing ? AWT er en lille smule outdated idag !
| |
Arne Vajhøj (18-03-2009)
| Kommentar Fra : Arne Vajhøj |
Dato : 18-03-09 00:56 |
|
Arne Vajhøj wrote:
> nivS1978@gmail.com wrote:
>> Det er 10 år siden jeg har programmeret Java så jeg kan ikke helt
>> huske hvordan man gør.
>> Jeg har en klasse (som er en extend til java.awt.Panel) med nogle
>> knapper. Panelet er til at læse et RFID fra en scanner.
>>
>> Anyway i mit hoved vindue har jeg så tilføjet panelet og det virker
>> fint nok, men når mit RFID panel har læst et RFID fra en chip, så vil
>> jeg gerne have at den trigger en funktion i hoved vinduet.
>> Det er sådan at RFID panelet vil blive brugt i flere forskellige
>> vinduer osv, så det skal være en måde når man opretter panel objektet
>> at man på en eller anden måde kan give den en trigger funktion i hoved
>> klassen. Det er sikkert ligesom den ActionListener jeg har på mine
>> knapper, men jeg kan ikke finde ud af hvordan det skal gøres?
>> Synes ikke rigtigt jeg har kunne google mig til det eller hvad det
>> hedder? Jeg vil sætte stor pris på et svar med et eksempel eller link
>> til et helst meget simpelt eksempel på hvordan man gør det?
>> Her er noget kode at arbejde ud fra, det er klippet kraftigt ned og
>> ikke lige syntax tjekket, men bare for at give jer en ide om hvad jeg
>> mener.
>
> Send en ref til hoved vindue med over til dit panels constructor,
> gem den i en instans variabel og brug den når du skal kalde.
> PS: Hvorfor ikke Swing ? AWT er en lille smule outdated idag !
Simpelt eksempel:
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class SomeFrame extends Frame {
private Panel p;
private Label lbl;
public SomeFrame() {
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
this.setLayout(new BorderLayout());
p = new SomePanel(this);
add(p, BorderLayout.CENTER);
lbl = new Label();
add(lbl, BorderLayout.SOUTH);
pack();
}
public void done() {
lbl.setText("Du klikkede");
}
public static void main(String[] args) {
Frame f = new SomeFrame();
f.setVisible(true);
}
}
class SomePanel extends Panel implements ActionListener {
private SomeFrame sf;
private Button btn;
public SomePanel(SomeFrame sf) {
this.sf = sf;
btn = new Button("Klik her");
btn.addActionListener(this);
add(btn);
}
@Override
public void actionPerformed(ActionEvent e) {
sf.done();
}
}
Arne
| |
Arne Vajhøj (18-03-2009)
| Kommentar Fra : Arne Vajhøj |
Dato : 18-03-09 01:04 |
|
Arne Vajhøj wrote:
> Arne Vajhøj wrote:
>> PS: Hvorfor ikke Swing ? AWT er en lille smule outdated idag !
>
> Simpelt eksempel:
> public class SomeFrame extends Frame {
Samme eksempel i Swing:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class SomeJFrame extends JFrame {
private JPanel p;
private JLabel lbl;
public SomeJFrame() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
p = new SomeJPanel(this);
add(p, BorderLayout.CENTER);
lbl = new JLabel(" ");
add(lbl, BorderLayout.SOUTH);
pack();
}
public void done() {
lbl.setText("Du klikkede");
}
public static void main(String[] args) {
JFrame f = new SomeJFrame();
f.setVisible(true);
}
}
class SomeJPanel extends JPanel implements ActionListener {
private SomeJFrame sf;
private JButton btn;
public SomeJPanel(SomeJFrame sf) {
this.sf = sf;
btn = new JButton("Klik her");
btn.addActionListener(this);
add(btn);
}
@Override
public void actionPerformed(ActionEvent e) {
sf.done();
}
}
Arne
| |
nivS1978@gmail.com (18-03-2009)
| Kommentar Fra : nivS1978@gmail.com |
Dato : 18-03-09 01:15 |
|
On Mar 18, 12:42 am, Arne Vajhøj <a...@vajhoej.dk> wrote:
> nivS1...@gmail.com wrote:
> > Det er 10 år siden jeg har programmeret Java så jeg kan ikke helt
> > huske hvordan man gør.
> > Jeg har en klasse (som er en extend til java.awt.Panel) med nogle
> > knapper. Panelet er til at læse et RFID fra en scanner.
>
> > Anyway i mit hoved vindue har jeg så tilføjet panelet og det virker
> > fint nok, men når mit RFID panel har læst et RFID fra en chip, så vil
> > jeg gerne have at den trigger en funktion i hoved vinduet.
> > Det er sådan at RFID panelet vil blive brugt i flere forskellige
> > vinduer osv, så det skal være en måde når man opretter panel objektet
> > at man på en eller anden måde kan give den en trigger funktion i hoved
> > klassen. Det er sikkert ligesom den ActionListener jeg har på mine
> > knapper, men jeg kan ikke finde ud af hvordan det skal gøres?
> > Synes ikke rigtigt jeg har kunne google mig til det eller hvad det
> > hedder? Jeg vil sætte stor pris på et svar med et eksempel eller link
> > til et helst meget simpelt eksempel på hvordan man gør det?
> > Her er noget kode at arbejde ud fra, det er klippet kraftigt ned og
> > ikke lige syntax tjekket, men bare for at give jer en ide om hvad jeg
> > mener.
>
> Send en ref til hoved vindue med over til dit panels constructor,
> gem den i en instans variabel og brug den når du skal kalde.
>
> Arne
>
> PS: Hvorfor ikke Swing ? AWT er en lille smule outdated idag !- Hide quoted text -
>
> - Show quoted text -
Det er ikke mig som har startet på programmet, og det er nogle år
siden, så jeg er bare ved at udbygge det.
Anyway tak for hurtigt svar...
Hans...
| |
nivS1978@gmail.com (18-03-2009)
| Kommentar Fra : nivS1978@gmail.com |
Dato : 18-03-09 01:18 |
|
On Mar 18, 12:55 am, Arne Vajhøj <a...@vajhoej.dk> wrote:
> Arne Vajhøj wrote:
> > nivS1...@gmail.com wrote:
> >> Det er 10 år siden jeg har programmeret Java så jeg kan ikke helt
> >> huske hvordan man gør.
> >> Jeg har en klasse (som er en extend til java.awt.Panel) med nogle
> >> knapper. Panelet er til at læse et RFID fra en scanner.
>
> >> Anyway i mit hoved vindue har jeg så tilføjet panelet og det virker
> >> fint nok, men når mit RFID panel har læst et RFID fra en chip, så vil
> >> jeg gerne have at den trigger en funktion i hoved vinduet.
> >> Det er sådan at RFID panelet vil blive brugt i flere forskellige
> >> vinduer osv, så det skal være en måde når man opretter panel objektet
> >> at man på en eller anden måde kan give den en trigger funktion i hoved
> >> klassen. Det er sikkert ligesom den ActionListener jeg har på mine
> >> knapper, men jeg kan ikke finde ud af hvordan det skal gøres?
> >> Synes ikke rigtigt jeg har kunne google mig til det eller hvad det
> >> hedder? Jeg vil sætte stor pris på et svar med et eksempel eller link
> >> til et helst meget simpelt eksempel på hvordan man gør det?
> >> Her er noget kode at arbejde ud fra, det er klippet kraftigt ned og
> >> ikke lige syntax tjekket, men bare for at give jer en ide om hvad jeg
> >> mener.
>
> > Send en ref til hoved vindue med over til dit panels constructor,
> > gem den i en instans variabel og brug den når du skal kalde.
> > PS: Hvorfor ikke Swing ? AWT er en lille smule outdated idag !
>
> Simpelt eksempel:
>
> import java.awt.BorderLayout;
> import java.awt.Button;
> import java.awt.Frame;
> import java.awt.Panel;
> import java.awt.Label;
> import java.awt.event.ActionEvent;
> import java.awt.event.ActionListener;
> import java.awt.event.WindowAdapter;
> import java.awt.event.WindowEvent;
>
> public class SomeFrame extends Frame {
> private Panel p;
> private Label lbl;
> public SomeFrame() {
> addWindowListener(new WindowAdapter() {
> public void windowClosing(WindowEvent e) {
> System.exit(0);
> }
> });
> this.setLayout(new BorderLayout());
> p = new SomePanel(this);
> add(p, BorderLayout.CENTER);
> lbl = new Label();
> add(lbl, BorderLayout.SOUTH);
> pack();
> }
> public void done() {
> lbl.setText("Du klikkede");
> }
> public static void main(String[] args) {
> Frame f = new SomeFrame();
> f.setVisible(true);
> }
>
> }
>
> class SomePanel extends Panel implements ActionListener {
> private SomeFrame sf;
> private Button btn;
> public SomePanel(SomeFrame sf) {
> this.sf = sf;
> btn = new Button("Klik her");
> btn.addActionListener(this);
> add(btn);
> }
> @Override
> public void actionPerformed(ActionEvent e) {
> sf.done();
> }
>
> }
>
> Arne- Hide quoted text -
>
> - Show quoted text -
Hej Arne, tak for dit svar. Men hvad nu hvis jeg også har klasserne
SomeFrame2 og SomeOtherFrame etc som også benytter det her Panel? Kan
jeg bare lave constructor om til:
public SomePanel(object sf)
og så kalde sf.done()? eller skal man caste objektet til enten en
SomeFrame, SomeFrame2 eller SomeOtherFrame før man så kalder "done" ?
Hans...
| |
Arne Vajhøj (19-03-2009)
| Kommentar Fra : Arne Vajhøj |
Dato : 19-03-09 01:43 |
|
nivS1978@gmail.com wrote:
> On Mar 18, 12:55 am, Arne Vajhøj <a...@vajhoej.dk> wrote:
>> Arne Vajhøj wrote:
>>> nivS1...@gmail.com wrote:
>>>> Det er 10 år siden jeg har programmeret Java så jeg kan ikke helt
>>>> huske hvordan man gør.
>>>> Jeg har en klasse (som er en extend til java.awt.Panel) med nogle
>>>> knapper. Panelet er til at læse et RFID fra en scanner.
>>>> Anyway i mit hoved vindue har jeg så tilføjet panelet og det virker
>>>> fint nok, men når mit RFID panel har læst et RFID fra en chip, så vil
>>>> jeg gerne have at den trigger en funktion i hoved vinduet.
>>>> Det er sådan at RFID panelet vil blive brugt i flere forskellige
>>>> vinduer osv, så det skal være en måde når man opretter panel objektet
>>>> at man på en eller anden måde kan give den en trigger funktion i hoved
>>>> klassen. Det er sikkert ligesom den ActionListener jeg har på mine
>>>> knapper, men jeg kan ikke finde ud af hvordan det skal gøres?
>>>> Synes ikke rigtigt jeg har kunne google mig til det eller hvad det
>>>> hedder? Jeg vil sætte stor pris på et svar med et eksempel eller link
>>>> til et helst meget simpelt eksempel på hvordan man gør det?
>>>> Her er noget kode at arbejde ud fra, det er klippet kraftigt ned og
>>>> ikke lige syntax tjekket, men bare for at give jer en ide om hvad jeg
>>>> mener.
>>> Send en ref til hoved vindue med over til dit panels constructor,
>>> gem den i en instans variabel og brug den når du skal kalde.
>> Simpelt eksempel:
> Men hvad nu hvis jeg også har klasserne
> SomeFrame2 og SomeOtherFrame etc som også benytter det her Panel? Kan
> jeg bare lave constructor om til:
> public SomePanel(object sf)
>
> og så kalde sf.done()? eller skal man caste objektet til enten en
> SomeFrame, SomeFrame2 eller SomeOtherFrame før man så kalder "done" ?
Jeg antog at det var >1 instanser af samme klasse som extender JFrame.
Hvis det også er forskellige klasser, så skal du nok lave et hiraki:
JFrame----AllFrame-----XxxxFrame
hvor done så ligger i AllFrame evt. som abstrakt metode og SomePanel
constructor tager en AllFrame som argument.
Arne
| |
N/A (19-03-2009)
| Kommentar Fra : N/A |
Dato : 19-03-09 01:43 |
|
| |
nivS1978@gmail.com (19-03-2009)
| Kommentar Fra : nivS1978@gmail.com |
Dato : 19-03-09 01:04 |
|
On Mar 19, 1:43 am, Arne Vajhøj <a...@vajhoej.dk> wrote:
> nivS1...@gmail.com wrote:
> > On Mar 18, 12:55 am, Arne Vajhøj <a...@vajhoej.dk> wrote:
> >> Arne Vajhøj wrote:
> >>> nivS1...@gmail.com wrote:
> >>>> Det er 10 år siden jeg har programmeret Java så jeg kan ikke helt
> >>>> huske hvordan man gør.
> >>>> Jeg har en klasse (som er en extend til java.awt.Panel) med nogle
> >>>> knapper. Panelet er til at læse et RFID fra en scanner.
> >>>> Anyway i mit hoved vindue har jeg så tilføjet panelet og det virker
> >>>> fint nok, men når mit RFID panel har læst et RFID fra en chip, så vil
> >>>> jeg gerne have at den trigger en funktion i hoved vinduet.
> >>>> Det er sådan at RFID panelet vil blive brugt i flere forskellige
> >>>> vinduer osv, så det skal være en måde når man opretter panel objektet
> >>>> at man på en eller anden måde kan give den en trigger funktion i hoved
> >>>> klassen. Det er sikkert ligesom den ActionListener jeg har på mine
> >>>> knapper, men jeg kan ikke finde ud af hvordan det skal gøres?
> >>>> Synes ikke rigtigt jeg har kunne google mig til det eller hvad det
> >>>> hedder? Jeg vil sætte stor pris på et svar med et eksempel eller link
> >>>> til et helst meget simpelt eksempel på hvordan man gør det?
> >>>> Her er noget kode at arbejde ud fra, det er klippet kraftigt ned og
> >>>> ikke lige syntax tjekket, men bare for at give jer en ide om hvad jeg
> >>>> mener.
> >>> Send en ref til hoved vindue med over til dit panels constructor,
> >>> gem den i en instans variabel og brug den når du skal kalde.
> >> Simpelt eksempel:
> > Men hvad nu hvis jeg også har klasserne
> > SomeFrame2 og SomeOtherFrame etc som også benytter det her Panel? Kan
> > jeg bare lave constructor om til:
> > public SomePanel(object sf)
>
> > og så kalde sf.done()? eller skal man caste objektet til enten en
> > SomeFrame, SomeFrame2 eller SomeOtherFrame før man så kalder "done" ?
>
> Jeg antog at det var >1 instanser af samme klasse som extender JFrame.
>
> Hvis det også er forskellige klasser, så skal du nok lave et hiraki:
>
> JFrame----AllFrame-----XxxxFrame
>
> hvor done så ligger i AllFrame evt. som abstrakt metode og SomePanel
> constructor tager en AllFrame som argument.
>
> Arne- Hide quoted text -
>
> - Show quoted text -
Ja, selvfølgelig, tak for det. Nogle gange tænker man da også langt
mere komplicerede løsninger end det er nødvendigt.
Hans...
| |
|
|