2015-09-18 9 views
2

Я построил FileDialog и после того, как пользователь выделил файл, в нем должна быть обновлена ​​метка с именем файла. Это то, что у меня есть:Как обновить ярлык SWT?

Button buttonSelectFile; 
fileFilterPath = "C:/"; 
Label myDir; 

fileSelectionLabel = new Label(container, SWT.None | SWT.WRAP); 
fileSelectionLabel.setText("Path to file"); 

buttonSelectFile = new Button(container, SWT.PUSH); 
buttonSelectFile.setText("Select file"); 
buttonSelectFile.addListener(SWT.Selection, new Listener() { 
    @Override 
    public void handleEvent(Event event) { 
     Shell shell = new Shell(); 
     FileDialog fileDialog = new FileDialog(shell, SWT.MULTI); 
     fileDialog.setFilterPath(fileFilterPath); 
     fileDialog.setFilterExtensions(new String[] { "*.exe" }); 
     fileDialog.setFilterNames(new String[] { "exe-files" }); 

     String files = fileDialog.open(); 
     if (files != null) { 
      fileFilterPath = fileDialog.getFilterPath(); 
      selectedFile = fileDialog.getFileName(); 
      StringBuffer sb = new StringBuffer(
        "Selected file under directory " 
          + fileDialog.getFilterPath() + "\n"); 
      sb.append(selectedFile); 
     } 
    } 
}); 

myDir = new Label(container, SWT.None); 
new Label(container, SWT.None).setText(""); 

Я пытался дозвониться myDir.setText(fileFilterPath) внутри метода handleEvent(). Также попытался позвонить по телефону myDir.layout(), myDir.refresh() и myDir.getParent().layout(). Метка не обновляется.

Как обновить текст ярлыка?

+1

Что расположение делает ' контейнер' использование? – Baz

+0

@Baz org.eclipse.swt.widgets.Composite – John

+0

Это вид виджета, но что такое макет? – Baz

ответ

4

Вызов layout() на родителя, кажется, работает нормально здесь:

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

    final Label label = new Label(shell, SWT.NONE); 

    Button button = new Button(shell, SWT.PUSH); 
    button.setText("Click me!"); 
    button.addListener(SWT.Selection, new Listener() 
    { 
     @Override 
     public void handleEvent(Event event) 
     { 
      label.setText(label.getText() + " test"); 
      label.getParent().layout(); 
     } 
    }); 

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

Это также рекомендуемое решение здесь:

+0

Большое спасибо, это работает! – John

Смежные вопросы