2014-01-10 8 views
0

Я использую SWT-комбо, которое при нажатии мыши будет показывать всплывающее окно календаря при первом щелчке и скрыть всплывающее окно при нажатии второй раз и так далее.SWT combo Событие MouseDown не запускается должным образом

mCombo.addListener(SWT.MouseDown, new Listener() { 
    public void handleEvent(Event event) { 
        showCalendar(); 
    } 
    }); 

Когда я нажимаю на текстовую область, событие MouseDown запускается каждый раз штрафом. Но когда я нажимаю на стрелку в правом углу, событие MouseDown запускается в первый раз, а не во второй раз.

Пожалуйста, дайте мне знать любое решение, чтобы избавиться от проблемы.

+0

Какая платформа? Поскольку реализация SWT зависит от собственных API, платформа важна. –

+0

mine is windows 7 – yash

+0

@yash Помог ли мой ответ для вас? – Baz

ответ

1

Прежде всего, обратите внимание на этот вопрос: SWT Listen to Combo close.

Combo не поддерживает события для «события закрытия». Если вы можете использовать CCombo вместо этого, вы можете просто прослушать SWT.MouseDown, так как это стреляет по стрелке.

public static void main(String[] args) 
{ 
    Display display = new Display(); 
    Shell shell = new Shell(display); 
    shell.setLayout(new GridLayout(1, false)); 
    shell.setText("StackOverflow"); 

    CCombo combo = new CCombo(shell, SWT.DROP_DOWN | SWT.READ_ONLY); 
    combo.add("First"); 
    combo.add("Second"); 

    Listener listener = new Listener() 
    { 
     @Override 
     public void handleEvent(Event e) 
     { 
      System.out.println(e); 
     } 
    }; 

    combo.addListener(SWT.MouseDown, listener); 
    combo.addListener(SWT.Selection, listener); 

    shell.pack(); 
    shell.open(); 

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

    display.dispose(); 
} 
Смежные вопросы