Toon posts:

[Java] Wachten op user input ?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Goeden...

Ik wil een methode schrijven die een resultaat teruggeeft afhankelijk van wat een user heeft opgegeven. Het probleem zit hem nu in het feit dat de methode al aangeroepen is en dat binnen in de methode gewacht moet worden op input van een user (bv. via een button).
code:
1
2
3
4
5
int res()
{
    int a = // waarde afhankelijk van welke button is ingedrukt
    return a*2;
}

res wordt al dus ergens anders aangeroepen en a kan pas worden ingevuld als de methode res is aangeroepen (kan dus niet als parameter worden meegegeven bv).
Beetje simpel voorbeeld misschien, maar dat is eigenlijk het hele probleem.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Bij een modal dialog wordt de control-flow geblokkeerd totdat het modal dialog niet meer zichtbaar is. Waarschijnlijk wil je dat gebruiken...

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Als je op User input wacht, dan moet je dat via actionListeners doen. Je kan die actionListener een boolean laten setten.. Of testen in res() of a een value heeft

(ik schrijf het erg vaag op, maar als je iets meer info geeft denk ik dat ik je beter kan helpen..)

Verwijderd

Topicstarter
Bij een modal dialog wordt de control-flow geblokkeerd totdat het modal dialog niet meer zichtbaar is. Waarschijnlijk wil je dat gebruiken...
:?:?:?:?:? Sorry ...
Als je op User input wacht, dan moet je dat via actionListeners doen. Je kan die actionListener een boolean laten setten.. Of testen in res() of a een value heeft
De methode zit niet in de gui, dus dan zou je in de methode een thread moeten schrijven die de hele tijd controleerd of de boolean al veranderd is. Volgens mij is dat geen ideale oplossing en het zou onnodig veel resources van je systeem in beslag nemen.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Zpeedy: :?:?:?:?:? Sorry ...
Kijk eens naar java.awt.Dialog en javax.swing.JDialog. Beide dialogen kan je 'modal' maken door een boolean aan de constructor mee te geven. Dit betekent dat de methode show pas terug zal keren als de dialoog niet meer zichtbaar is en dus is gesloten door de gebruiker.

Je kunt dus het volgende doen:
1. Open Dialog met Buttons. Hang aan deze Buttons ActionListeners.
2. Als er op de knop wordt gedrukt onthoud je wat er gebeurt is en sluit je de Dialog.
3. De code die de dialog opende kan direct na de show aan de action-listeners vragen wat er gekozen is door de gebruiker.


Dit zijn toch echt wel enorme basic GUI zaken... Misschien moet je ook eens wat rondbladeren in de Java Tutorial: http://java.sun.com/tutorial
De methode zit niet in de gui, dus dan zou je in de methode een thread moeten schrijven die de hele tijd controleerd of de boolean al veranderd is. Volgens mij is dat geen ideale oplossing en het zou onnodig veel resources van je systeem in beslag nemen.
Daarom moet je dus ook een blokkerende show hebben :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Vanaf waar roep je die methode dan aan?

van die resources is niet helemaal waar, als je met wait() en notify() werkt.

Verwijderd

Topicstarter
Kijk eens naar java.awt.Dialog en javax.swing.JDialog. Beide dialogen kan je 'modal' maken door een boolean aan de constructor mee te geven. Dit betekent dat de methode show pas terug zal keren als de dialoog niet meer zichtbaar is en dus is gesloten door de gebruiker.
Er wordt helemaal geen gebruik gemaakt van een dialog. De button bevinden zich op een panel. Daarom snapte ik niet helemaal wat je nou precies bedoelde.
Vanaf waar roep je die methode dan aan?
Vb.
code:
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
class Gui
{
    2 buttons
    A a = new A(this);
    B b = new B(this);
}

class A
{
    Gui gui;
    
    A(Gui g)
    {
        gui = g;
    }

    int res()
    {
        ant = // waarde van button 2
        return ant*2;
    }
}

class B
{
    Gui gui;
    
    B(Gui g)
    {
        gui = g;
    }
    
    void roepResAan()
    {
        gui.a.res();
    }
}

Met behulp van button1 roep je de methode in B aan. Door button2 moet de waarde van ant in A gezet worden.

  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Dit riekt naar slecht design..
maak van res =
code:
1
2
3
4
5
6
7
8
9
10
int res(B myB)
{
  ant = myB.getValueDieJeNodigHebt();
  return ant*2;
}
en van roepResAan()
void roepResAan()
{ 
  gui.a.res(this);
}

overigens die je niets met die return value....
Pagina: 1