Toon posts:

[java] vanuit main applicatie iets veranderen in jframe

Pagina: 1
Acties:
  • 204 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hoi. Ik heb vanuit een java applicatie een jFrame geopend en nu wil ik op een gegeven moment vanuit die applicatie een tekstje in een label in dat jframe veranderen. Die jframe is een aparte class. Hoe doe ik dat??

Ik denk zelf dat ik hiervoor een functie binnen die jframe klasse aan moet roepen. Het jframe open ik met:
Java:
1
frameKlasse hetJFrame = new frameKlasse();


Om nu een functie binnen die frameKlasse aan te roepen dacht ik zoiets als:
Java:
1
hetJFrame.deFunctie();


maar ja, dat gaat dus niet

Verwijderd

Dat gaat dus wel :)
Als je het precies zo doet moet het werken

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Dit is allemaal enorm wazig, probeer eerst maar uit te leggen wat je tot zover hebt gemaakt.

[edit]
classes moet je met hoofdletters laten beginnen.

Verwijderd

Heb je iets gedaan als:
Java:
1
2
3
public class frameKlasse extends JFrame
{
}

of als
Java:
1
2
3
4
public class frameKlasse
{
  public JFrame hetJFrame = new JFrame();
}

In geval 1: zo zou het zonder meer moeten werken,
In geval 2: is dat JFrame wel bereikbaar vanuit een andere klasse? Maw, heeft die niet stiekem een private of protected modifier ofzo? En dan zou het dus frameKlasse.hetJFrame.methode(); worden.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

1) correct
2) omdat jij hetJFrame publiekelijk hebt gemaakt, mag iedereen er aan zitten. (vandaar het woordje public) En je kan dan inderdaad frameKlasse.hetJFrame.methode doen.

[edit]
oeps, ik reageer op iets wat helemaal niet hoefde :)

  • TheRebell
  • Registratie: Oktober 2000
  • Laatst online: 01:34
zoals de heren zeggen moet het echt hoor. Je kunt wel moeilijker gaan doen maar dit is de manier die én het meeste wordt gebruikt én het makkelijkst is :)

Verwijderd

Topicstarter
Sorry voor de late reactie. Was even een tijdje weg.
Ik heb inderdaad gebruik gemaakt van
Java:
1
2
3
public class frameKlasse extends JFrame
{
}


Echter als is hetJFrame.deFunctie(); aanroep, krijg ik een java.lang.NullPointerException

  • reskobon
  • Registratie: November 2001
  • Laatst online: 28-08 13:24
Verwijderd schreef op 07 November 2002 @ 21:51:
Sorry voor de late reactie. Was even een tijdje weg.
Ik heb inderdaad gebruik gemaakt van
Java:
1
2
3
public class frameKlasse extends JFrame
{
}


Echter als is hetJFrame.deFunctie(); aanroep, krijg ik een java.lang.NullPointerException
Dan is er dus een object leeg maar het is niet die hetJframe dus dat kan hem niet zijn. Roep hem eens aan met this.deFunctie();

Leeg


Verwijderd

Topicstarter
dat werkt wel gewoon

edit: vanuit de functie dan he :9

  • reskobon
  • Registratie: November 2001
  • Laatst online: 28-08 13:24
En als je dan even zo die klasse declareert:
public JFrame hetJFrame = new JFrame();

doet hij het dan wel??

Edit: Dit moet niet nodig zijn want je erft de klasse JFrame al over maarja :?

Leeg


Verwijderd

Topicstarter
neu, werkt ook niet

zucht..

  • reskobon
  • Registratie: November 2001
  • Laatst online: 28-08 13:24
Post je klasse eens dan want dit moet gewoon werken 8)7

Leeg


Verwijderd

Topicstarter
OK, tof dat je zo behulpzaam bent. Mochten er hele rare dingen in zitten, ik ben een redelijke java-newbie :*)

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
  public class FileTransfer extends JFrame implements ActionListener {

    private JButton bCancel = new JButton("Cancel");

    private JLabel lFile = new JLabel("File:");
    private JLabel lFile2 = new JLabel();
    private JLabel lFrom = new JLabel("From:");
    private JLabel lFrom2 = new JLabel();
    private JLabel lTo = new JLabel("To:");
    private JLabel lTo2 = new JLabel();
    private JLabel lStatus = new JLabel("Status:");
    public JLabel lStatus2 = new JLabel("Asking user for permission");

    private JPanel panel;
    private JProgressBar progressBar;

    final static double f = TableLayout.FILL;


    public FileTransfer(String file, String from, String to) {
      super("Send a file");

      lFile2.setText(file);
      lFrom2.setText(from);
      lTo2.setText(to);

      progressBar = new JProgressBar(JProgressBar.HORIZONTAL, 0, 100) {
          public Dimension getPreferredSize() {
            return new Dimension(100, super.getPreferredSize().height);
          }
      };

      Container pane = getContentPane();

      panel = new JPanel();

      double size[][] = {{10, 80, 100, 80, f}, {10, 20, 5, 20, 5, 20, 5, 20, 20, 10, 25, f}};
      TableLayout layout = new TableLayout(size);
      panel.setLayout (layout);

      panel.add(lFile, "1, 1");
      panel.add(lFile2, "2, 1, 3, 1");
      panel.add(lFrom, "1, 3");
      panel.add(lFrom2, "2, 3, 3, 3");
      panel.add(lTo, "1, 5");
      panel.add(lTo2, "2, 5, 3, 5");
      panel.add(lStatus, "1, 7");
      panel.add(progressBar, "2, 7, 3, 7");
      panel.add(lStatus2, "2, 8, 3, 8");
      panel.add(bCancel, "3, 10");

      bCancel.addActionListener(this);

      pane.add(panel);

      setSize(300,200);
      setVisible(true);

    }

    public void actie(){
      lStatus2.setText("Transfer aborted");
    }


    public void actionPerformed(ActionEvent evt){
      if (evt.getSource() == bCancel) {
        dispose();
      }
    }
  }



Ik wil dus die actie() functie aanroepen. puur voor de test is die overigens

  • reskobon
  • Registratie: November 2001
  • Laatst online: 28-08 13:24
Ok zitten geen fouten in als ik zo snel even kijk. Maar waarom wil jij je functies aanroepen met het object van die klasse zelf? Ik doe dit echt nooit en jij zelf ook niet zie ik:

setSize (300, 200);

Zelf zet ik er voor de duidelijkheid altijd nog gewoon this voor.

Leeg


Verwijderd

Topicstarter
nee, deze klasse staat weer in een andere klasse en van daaruit zeg ik dus:

FileTransfer transferWindow = new FileTransfer(bla, bla, bla);

en vanuit nog een andere klasse (op hetzelfde niveau als de FileTransfer klasse) roep ik die functie aan. Hee, misschien komt het daardoor ??

  • reskobon
  • Registratie: November 2001
  • Laatst online: 28-08 13:24
Verwijderd schreef op 07 November 2002 @ 22:52:
nee, deze klasse staat weer in een andere klasse en van daaruit zeg ik dus:

FileTransfer transferWindow = new FileTransfer(bla, bla, bla);

en vanuit nog een andere klasse (op hetzelfde niveau als de FileTransfer klasse) roep ik die functie aan. Hee, misschien komt het daardoor ??
Ja daar ga je de fout in volgens mij, die derde klasse waar jij je functie in aanroept die kent dat object niet. Je moet die ook even meegeven in zijn constructor.

Leeg


Verwijderd

Topicstarter
hmm, maar ik heb bovenin de main klasse (de buitenste zeg maar) wel gezegd:
public FileTransfer transferWindow;

  • reskobon
  • Registratie: November 2001
  • Laatst online: 28-08 13:24
ja maar de ander klassen kennen de inhoud van dat object nog niet. Doe dus even dit:
ik noem je klasse waarin je die functie aanroept even Klasse1

Je maakt nu in je main klasse object aan van Klasse1 bijv klasse1. In zijn constructor zet je nu dit: Klasse1 klasse1 = new Klasse1(this);

nu zet je in Klasse1 in de constructor dit:
public Klasse1 (FileTransfer transferWindow) { }

Je maakt hier ook een object aan van de mainklasse bijv zo:
FileTransfer objectVanFileTransfer;

Nu moet je zeggen dat ze dezelfde zijn en dus ook dezelfde inhoud hebben:

this.objectVanFileTransfer = transferWindow;

Nu kan je dmv objectVanFileTransfer.actie(); de functie aanroepen :)


Edit: best een onduidelijk verhaaltje zeg :P

Leeg


  • TheRebell
  • Registratie: Oktober 2000
  • Laatst online: 01:34
Wat een wazig verhaal van je robje :+

Als jij in een class een method van een andere class wilt uitvoeren zul je óf die class moeten meegeven óf het object waarom je iets wil doen.

Probeer eens niet telkens nieuwe objects aan te maken. Je maakt een object aan om er iets mee te doen maar daarna maak je er nog 1 om weer wat anders te gaan doen. Bedenk wel dat dit dus _niet_ dezelfde zijn! maar dus al 2 verschillende.

  • reskobon
  • Registratie: November 2001
  • Laatst online: 28-08 13:24
TheRebell schreef op 07 november 2002 @ 23:25:
Wat een wazig verhaal van je robje :+

Als jij in een class een method van een andere class wilt uitvoeren zul je óf die class moeten meegeven óf het object waarom je iets wil doen.

Probeer eens niet telkens nieuwe objects aan te maken. Je maakt een object aan om er iets mee te doen maar daarna maak je er nog 1 om weer wat anders te gaan doen. Bedenk wel dat dit dus _niet_ dezelfde zijn! maar dus al 2 verschillende.
Maar het klopt wel :)

Leeg


  • Jefrey Lijffijt
  • Registratie: April 2001
  • Laatst online: 04-08 16:07
Als je "transferWindow.actie()" vanuit een andere klasse wilt aanroepen kan dat alleen vanuit je hoofdklasse waarin transferWindow wordt aangemaakt, anders moet je typen "hoofdKlasse.transferWindow.actie()", echter actie lijkt mij niet een functie die public hoort te zijn, iedereen kan nu zo je status wijzigen in transfer aborted...

  • TheRebell
  • Registratie: Oktober 2000
  • Laatst online: 01:34
Jefrey schreef op 07 november 2002 @ 23:42:
Als je "transferWindow.actie()" vanuit een andere klasse wilt aanroepen kan dat alleen vanuit je hoofdklasse waarin transferWindow wordt aangemaakt, anders moet je typen "hoofdKlasse.transferWindow.actie()", echter actie lijkt mij niet een functie die public hoort te zijn, iedereen kan nu zo je status wijzigen in transfer aborted...
Of je geeft een instantie van die class mee als statement, of je maakt een instantie van die class aan in die andere class (u get it? :P )

Verwijderd

Topicstarter
ben er al uit. Het kwam eigenlijk door m'n
FileTransfer transferWindow = new FileTransfer(bla, bla, bla);

Ik had bovenin de hoofdklasse dit al gedeclareerd met
FileTransfer transferWindow;

Dus bij het aanroepen moest ik alleen nog doen:
transferWindow = new FileTransfer(bla, bla, bla);

  • Linc
  • Registratie: December 2000
  • Laatst online: 19-02 12:07

Linc

mzzl

Verwijderd schreef op 08 november 2002 @ 11:21:
ben er al uit. Het kwam eigenlijk door m'n
FileTransfer transferWindow = new FileTransfer(bla, bla, bla);

Ik had bovenin de hoofdklasse dit al gedeclareerd met
FileTransfer transferWindow;

Dus bij het aanroepen moest ik alleen nog doen:
transferWindow = new FileTransfer(bla, bla, bla);
LOL eigenlijk een heel simpel foutje :)

http://www.slobmotorsport.nl - iRacing Profiel

Pagina: 1