2017-02-14 4 views
-2

Ich arbeite immer noch an dem Programm, wo ich eine Frage über gestern gestellt habe.Drucken von Text in ein Textfeld in Java

Also ich habe dieses Stück Code:

public static void main(String[] args) { 

    Display display = Display.getDefault(); 
    Shell shlKoffieHalenApp = new Shell(); 
    shlKoffieHalenApp.setMinimumSize(new Point(610, 430)); 
    shlKoffieHalenApp.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_NORMAL_SHADOW)); 
    shlKoffieHalenApp.setSize(610, 430); 
    shlKoffieHalenApp.setText("Koffie Halen App"); 
    shlKoffieHalenApp.setLayout(null); 

    List list = new List(shlKoffieHalenApp, SWT.BORDER); 
    list.setFont(SWTResourceManager.getFont("Sans", 13, SWT.BOLD)); 
    list.setItems(new String[] {"Anne", "", "Bas", "", "Daan", "", "Nick", "", "Paul", "", "Peter", "", "Sebastien"}); 
    list.setBackground(SWTResourceManager.getColor(SWT.COLOR_GRAY)); 
    list.setBounds(10, 10, 113, 377); 

    ButtonAnne = new Button(shlKoffieHalenApp, SWT.CHECK); 
    ButtonAnne.setBounds(129, 17, 137, 16); 
    ButtonAnne.setText("Aanwezig/Afwezig"); 

    ButtonBas = new Button(shlKoffieHalenApp, SWT.CHECK); 
    ButtonBas.setBounds(129, 67, 137, 16); 
    ButtonBas.setText("Aanwezig/Afwezig"); 

    ButtonDaan = new Button(shlKoffieHalenApp, SWT.CHECK); 
    ButtonDaan.setBounds(129, 120, 137, 16); 
    ButtonDaan.setText("Aanwezig/Afwezig"); 

    ButtonNick = new Button(shlKoffieHalenApp, SWT.CHECK); 
    ButtonNick.setBounds(129, 173, 137, 16); 
    ButtonNick.setText("Aanwezig/Afwezig"); 

    ButtonPaul = new Button(shlKoffieHalenApp, SWT.CHECK); 
    ButtonPaul.setBounds(129, 224, 137, 16); 
    ButtonPaul.setText("Aanwezig/Afwezig"); 

    ButtonPeter = new Button(shlKoffieHalenApp, SWT.CHECK); 
    ButtonPeter.setBounds(129, 276, 137, 16); 
    ButtonPeter.setText("Aanwezig/Afwezig"); 

    ButtonSebastien = new Button(shlKoffieHalenApp, SWT.CHECK); 
    ButtonSebastien.setBounds(129, 329, 137, 16); 
    ButtonSebastien.setText("Aanwezig/Afwezig"); 

    ButtonKoffie = new Button(shlKoffieHalenApp, SWT.NONE); 
    ButtonKoffie.setBounds(394, 53, 121, 34); 
    ButtonKoffie.setText("Klik voor koffie!"); 

    Answer = new Text(shlKoffieHalenApp, SWT.BORDER); 
    Answer.setEditable(false); 
    Answer.getText(); 
    Answer.setBounds(355, 106, 200, 30); 

    shlKoffieHalenApp.open(); 
    shlKoffieHalenApp.layout(); 
    while (!shlKoffieHalenApp.isDisposed()) { 
     if (!display.readAndDispatch()) { 
      display.sleep(); 
     } 

     Random generate = new Random(); 
     ArrayList<String> names = new ArrayList<String>(); { 

     if(ButtonAnne.getSelection() == true) { 
      names.add("Anne"); 
     } 
     if(ButtonBas.getSelection() == true) { 
      names.add("Bas"); 
     } 
     if(ButtonDaan.getSelection() == true) { 
      names.add("Daan"); 
     } 
     if(ButtonNick.getSelection() == true) { 
      names.add("Nick"); 
     } 
     if(ButtonPaul.getSelection() == true) { 
      names.add("Paul"); 
     } 
     if(ButtonPeter.getSelection() == true) { 
      names.add("Peter"); 
     } 
     if(ButtonSebastien.getSelection() == true) { 
      names.add("Sebastien"); 
     } 

      if(ButtonKoffie.getSelection() == true) { 
       int randomIndex = generate.nextInt(names.size()); 

       Answer.setText(names.get(randomIndex) + " moet koffie halen!");     

      } 
     }   
    } 
} 

Antwort ist das Textfeld ein, wo ich den zufälligen Namen drucken möchten thats, aus der Arraylist ausgewählt. Was fehlt mir hier? Ich habe versucht, eine Methode zu erstellen, aber das hat nicht wie geplant funktioniert.

Antwort

1

Sie sollten nichts in die Ereignisschleife SWT setzen, Benutzeroberflächen sind ereignisgesteuert, sollten Sie nicht Polling verwenden.

Sie sollten Ereignis-Listener zu den Komponenten, beispielsweise hinzufügen, wenn Sie abfangen wollen, wenn eine Taste gedrückt wird, sollten Sie eine SelectionListener, um es hinzuzufügen:

buttonKoffie = new Button(shlKoffieHalenApp, SWT.NONE); 
buttonKoffie.addSelectionListener(new SelectionListener() { 
    @Override 
    public void widgetDefaultSelected(SelectionEvent arg0) {  
    } 

    @Override 
    public void widgetSelected(SelectionEvent arg0) { 

     // this method is called when the button is pressed 

     int randomIndex = generate.nextInt(names.size()); 
     answer.setText(names.get(randomIndex) + " moet koffie halen!"); 
    } 
}); 

die Dokumentation der verschiedenen Komponenten Lesen Sie wissen, welche Zuhörer Sie hinzufügen können und wie sie sich verhalten.

Die Button Dokumentation gibt an, dass getSelection Werke nur für CHECK, RADIO und TOGGLE Tasten, es wird immer false für PUSH Tasten zurückzukehren.

Ein weiteres Problem beim Einfügen von Code in die Ereignisschleife SWT besteht darin, dass Sie das Array names kontinuierlich neu erstellen, sodass Sie es immer leer finden. Sie sollten es einmal erstellen und Ereignis-Listener der Prüfschaltflächen verwenden, um es zu füllen.

Weitere Empfehlungen:

  • nehmen die richtige Java naming convention (zum Beispiel der Name der Variablen mit einem Kleinbuchstaben beginnen sollte)
  • Verwendung richtige layouts statt absolute Positionierung (Sie sollten nie haben Anruf setBounds)
+0

Vielen Dank! Ich schätze Ihre Hilfe! –

0

ersetzen

Answer.setText(randomIndex + " moet koffie halen!");

mit

Answer.setText(names.get(randomIndex) + " moet koffie halen!");

+0

Funktioniert nicht, es ist immer noch nicht das Ergebnis in "Antwort" drucken. –

+0

Was wird gedruckt? – VHS

+0

Zeigen Sie auch Ihren vollständigen Methodencode. – VHS

0

diesen Zeilen Code:

int randomIndex = generate.nextInt(names.size()); 
Answer.setText(randomIndex + " moet koffie halen!");  

sind in den Textview Einstellung nur der Zufall int Sie haben, was Sie brauchen stattdessen das Zufallselement i n die Liste ... dann müssen Sie verwenden names.get(randomIndex)

+0

Bereits versucht. Immer noch nichts drucken. –

Verwandte Themen