0

私の状況を少し説明させてください。私は Java SE SWT アプリケーションに SWT を持っています。アプリの実行中に、 TextUSER が作成されたものに何か ( String) を書き込むとします。まさにこれを行うTextいくつかを紹介したいと思います: USER がオブジェクト/ウィジェットをクリックすると、これ自体が clear( ) されます (以前に何らかの文字列が書き込まれている場合)。MouseListenerTextTextsetText("");

MouseListenerには 3 つのメソッドがあります: mouseDown(...)mouseUp(..)mouseDoubleClick(...)->mouseDown(...)この場合にのみ使用する必要があります。これ以上は必要ありません。

mouseDown(..)メソッドでは、実際の Text オブジェクト参照のメソッドを呼び出す必要があります:マウス"XY".setText("");でクリックしたテキスト。→これはどうにか入手できませんでした。

MouseListener onMouseClickTextアプリで使用する任意の SWT に適用できる一般的なText方法を使用したいと考えています。

そのような方法またはより良い方法を知っている人はいますかMouseListener:既存のクリックされた SWT へのこの参照をText内部で取得する方法はMouseListener?

ここにコード例があります:

package sk.tokra.example;

//imports here
.
.
import org.eclipse.swt.widgets.Text;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
.
.

public class Application {

 //class fields
 Text text;
 private static final Logger logger = LoggerFactory.getLogger(Application.class);
 .
 .
 .

 // main 
 public static void main(String[] args) {
  logger.debug("main(), Starting app!");
  try {
   Application window = new Application();
   window.open();
  } catch (Exception e) {
   e.printStackTrace();
  }
  logger.debug("main(), Exiting app!");
  return;
 }

 /**
  * Open the window.
  */
 public void open() {
  logger.debug("open()");
  Display display = Display.getDefault();
  createContents();
  shell.open();
  shell.layout();
  while (!shell.isDisposed()) {
   if (!display.readAndDispatch()) {
    display.sleep();
   }
  }
 }

 /**
  * Create contents of the window.
  */
 protected void createContents() {
  text = new Text(shell, SWT.BORDER);
  text.addMouseListener(onMouseClickText);
  . 
  .
  .
 }

 //other stuff/methods/listener part
 private MouseListener onMouseClickText = new MouseListener() {
  @Override
  public void mouseUp(MouseEvent arg0) {
   logger.debug("onMouseClickFind, mouseUp()");
  }

  @Override
  public void mouseDown(MouseEvent arg0) {
   logger.debug("onMouseClickFind, mouseDown()");
   // HERE I WOULD NEED to obtain refence of Text
   // then call .setText("");
  }

  @Override
  public void mouseDoubleClick(MouseEvent arg0) {
   logger.debug("onMouseClickFind, mouseDoubleClick()");
  }
 };
}
4

1 に答える 1

1

Naveenが提案したように、同じテキストウィジェットがさまざまな方法(キーボードのタブ操作など)でフォーカスを受け取ることができるため、フォーカスリスナーを使用する方がはるかに優れています。その場合も処理することをお勧めします。

いずれの場合も、またはを使用するかどうかに関係なく、FocusListener実際MouseListenerTextイベントを発生させたウィジェットをフェッチできます。マウスリスナーの場合、のインスタンスを受け取り、MouseEventそれを使用MouseEvent#widgetしてテキストコントロールにアクセスできます。リスナーの実装では、コードは次のようになります。

//other stuff/methods/listener part
private MouseListener onMouseClickText = new MouseListener() {
  @Override
  public void mouseUp(MouseEvent arg0) {
    ((Text) arg0.widget).setText("");
  }
...
}

同じリスナーインスタンスを複数のTextウィジェットに追加できますが、機能するはずです。

于 2012-11-14T11:31:34.023 に答える