SWT文本侦听器

时间:2014-06-13 14:08:31

标签: java text swt

我在SWT中有一个Text

final Text textArea = new Text(parent, SWT.MULTI | SWT.WRAP | SWT.V_SCROLL);
textArea.setVisible(false);
textArea.setEditable(false);
textArea.setEnabled(false);
textArea.setText("Scheduler Info");

我有一个听众。一旦侦听器被触发,我希望在文本区域中反复覆盖一些数据。无论如何,我可以保留"调度程序信息"文本区域中的标题。我不希望第一行被覆盖。我希望覆盖该区域的其余部分。

1 个答案:

答案 0 :(得分:0)

有两种方法可以做到这一点:

  1. 只需将Text#setText(String)与新String一起使用,然后添加原始字符串。
  2. 选择原始字符串后面的所有内容和Text#insert(String)新内容。
  3. 以下是两种方法的示例:

    private static final String INITIAL_TEXT = "Scheduler Info";
    
    public static void main(String[] args)
    {
        final Display display = new Display();
        final Shell shell = new Shell(display);
        shell.setText("StackOverflow");
        shell.setLayout(new FillLayout());
    
        final Text text = new Text(shell, SWT.MULTI | SWT.WRAP | SWT.V_SCROLL);
        text.setEditable(false);
        text.setEnabled(false);
        text.setText(INITIAL_TEXT);
    
        Button replace = new Button(shell, SWT.PUSH);
        replace.setText("Replace");
        replace.addListener(SWT.Selection, new Listener()
        {
            private int counter = 1;
            @Override
            public void handleEvent(Event arg0)
            {
                String replace = INITIAL_TEXT;
    
                for(int i = 0; i < counter; i++)
                    replace += "\nLine " + i;
    
                text.setText(replace);
    
                counter++;
            }
        });
    
        Button insert = new Button(shell, SWT.PUSH);
        insert.setText("Insert");
        insert.addListener(SWT.Selection, new Listener()
        {
            private int counter = 1;
            @Override
            public void handleEvent(Event arg0)
            {
                text.setSelection(INITIAL_TEXT.length(), text.getText().length());
    
                String newText = "";
    
                for(int i = 0; i < counter; i++)
                    newText += "\nLine " + i;
    
                text.insert(newText);
    
                counter++;
            }
        });
    
        shell.pack();
        shell.setSize(shell.computeSize(SWT.DEFAULT, SWT.DEFAULT).x, 300);
        shell.open();
    
        while (!shell.isDisposed())
        {
            if (!display.readAndDispatch())
            {
                display.sleep();
            }
        }
        display.dispose();
    }