【问题标题】:Printing text to a textfield in java在java中将文本打印到文本字段
【发布时间】:2017-02-14 20:38:29
【问题描述】:

我仍在研究那个我昨天问了一个问题的程序。

所以我有这段代码:

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!");                 

            }
        }           
    }
}

Answer 是我要打印从 ArrayList 中选取的随机名称的文本字段。 我在这里想念什么?我试图创建一种方法,但没有按计划进行。

【问题讨论】:

    标签: java eclipse text swt


    【解决方案1】:

    你不应该在SWT事件循环中放任何东西,用户界面是事件驱动的,你不应该使用轮询。

    你应该给组件添加事件监听器,例如如果你想在一个按钮被按下时进行拦截,你应该给它添加一个SelectionListener

    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!");  
        }
    });
    

    阅读各种组件的文档以了解您可以添加哪些侦听器以及它们的行为方式。

    Button 文档还指定 getSelection 仅适用于 CHECKRADIOTOGGLE 按钮,对于 PUSH 按钮,它将始终返回 false

    将代码放入SWT 事件循环的另一个问题是您不断地重新创建names 数组,因此您总是会发现它是空的。您应该创建一次并使用检查按钮的事件侦听器来填充它。

    其他建议:

    • 采用正确的Java naming convention(例如,变量名应以小写字母开头)
    • 使用正确的layouts 而不是绝对定位(您永远不必调用setBounds

    【讨论】:

    • 非常感谢!感谢您的帮助!
    【解决方案2】:

    替换

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

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

    【讨论】:

    • 不工作,它仍然没有在“答案”中打印结果。
    • 打印什么?
    • 绝对没有。但这可能是我在 if 语句中犯了一个错误。可能是它没有正确检查按钮。我没有收到任何错误,尽管这使它变得更加困难。
    • 如果它没有打印任何东西,那么您的if 条件显然不令人满意。向我们展示您的完整方法代码
    • 看起来'if'条件找不到选择'boolean'
    【解决方案3】:

    这行代码:

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

    在 textView 中只设置你得到的随机 int,你需要列表中的随机元素...然后你需要使用 names.get(randomIndex)

    【讨论】:

      猜你喜欢
      • 2016-02-22
      • 1970-01-01
      • 2015-05-05
      • 1970-01-01
      • 1970-01-01
      • 2020-08-08
      • 2011-07-10
      • 1970-01-01
      相关资源
      最近更新 更多