-1

の内容Textが の幅を超える場合、テキストフィールドの最後にTextドット ( ) を表示したい。...

ModifyListener成功せずに使用しようとしました。これに関するヘルプは大歓迎です。

  @Override
        public void modifyText(ModifyEvent e) {
            // TODO Auto-generated method stub



           if (wakeupPatternText.getText().length()>=12) {


               String wakeuppattern=wakeupPatternText.getText(0, 11);




               String dot="...";

              String wakeup=wakeuppattern+dot;
 wakeupPatternText.setText(wakeup);




        }      


        }
    });
4

1 に答える 1

1

これはあなたが望むことをするはずです:

private static String textContent = "";

public static void main(String[] args)
{
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setLayout(new FillLayout(SWT.VERTICAL));

    Text text = new Text(shell, SWT.BORDER);

    text.addListener(SWT.FocusOut, new Listener()
    {
        @Override
        public void handleEvent(Event e)
        {
            Text text = (Text) e.widget;
            textContent = text.getText();

            text.setText(textContent.substring(0, Math.min(10, textContent.length())) + "...");
        }
    });

    text.addListener(SWT.FocusIn, new Listener()
    {
        @Override
        public void handleEvent(Event e)
        {
            Text text = (Text) e.widget;

            text.setText(textContent);
        }
    });

    Button button = new Button(shell, SWT.PUSH);
    button.setText("Lose focus");

    shell.pack();
    shell.open();
    while (!shell.isDisposed())
    {
        if (!display.readAndDispatch())
            display.sleep();
    }
    display.dispose();
}

フォーカス イベントをリッスンし、String長すぎる場合は表示を切り捨てます。

これはどのように見えるかです:

フォーカスあり:

ここに画像の説明を入力

フォーカスなし:

ここに画像の説明を入力


コードが機能しない理由は次のとおりです。リスナーwakeupPatternText.setText(wakeup);内から呼び出すとVerifyListener、リスナー自体が再帰的に再度呼び出されます。

于 2013-04-22T09:03:50.803 に答える