Как открыть календарь при нажатии кнопки в Java SWT? - PullRequest
0 голосов
/ 14 октября 2011

Я пытаюсь разработать приложение Java SWT в затмении. Мне нужно заполнить текстовое поле с помощью календаря DateTime в SWT при нажатии кнопки. Я попробовал следующий код, но не смог увидеть календарь, хотя он создан. Любая помощь будет оценена. Спасибо

public void createPartControl(final Composite parent) {
        Button button;
        Label label;
        final Display dev = parent.getDisplay();        
        Image image = new Image(dev,"C:\\Users\\rm186021\\Desktop\\Calendar.gif");
        GridLayout gridLayout = new GridLayout();
        gridLayout.numColumns = 3;
        parent.setLayout(gridLayout);       
        label = new Label(parent, SWT.NULL);
        label.setText("Start date ");
 final Text start = new Text(parent, SWT.SINGLE | SWT.BORDER);
 Button calButton = new Button(parent, SWT.PUSH);
        calButton.setImage(image);
        calButton.addSelectionListener(new SelectionAdapter() {
              @Override     
              public void widgetSelected(SelectionEvent e) {
                final Display display = new Display();
               final Shell shell2 = new Shell(display);
               shell2.addListener(SWT.CALENDAR, new Listener() {
                 public void handleEvent(Event event) {
                 final DateTime calendar = new DateTime(shell2,SWT.CALENDAR | SWT.POP_UP);
                 calendar.addSelectionListener (new SelectionAdapter () {
                    public void widgetSelected (SelectionEvent e) {
                      start.setData(" " + calendar.getYear() + "-" + (calendar.getMonth() + 1) + "-" + calendar.getDay());
                      System.out.println(start.getData());
                      //calendar.dispose();                   
                    }
                }); 
                }
                }); 
             }
        });  

Ответы [ 2 ]

2 голосов
/ 14 октября 2011
  1. Вы создаете Shell, но даже не открываете его. Попробуйте позвонить shell2.open().

  2. Вы добавляете SWT.CALENDAR слушателя к Shell. Это не собирается делать то, что вы хотите сделать. Или что-нибудь, в этом отношении, так как Shell не запускает SWT.CALENDAR события. Вместо этого вам просто нужно добавить DateTime в контейнер и подключить прослушиватели выбора к Calendar.

  3. SWT.POP_UP не подходит для стиля Calendar.

Я бы порекомендовал создать подкласс Dialog (назовите его CalendarDialog, например), установить для него FillLayout, добавить к нему Calendar и таким образом подключить слушателей. Затем позвоните CalendarDialog.open().

2 голосов
/ 14 октября 2011

DateTime действительно не следует создавать с таким кодом :) Попробуйте вместо этого:

calButton.addSelectionListener(new SelectionAdapter() {
    @Override
    public void widgetSelected(SelectionEvent e) {
        final Shell shell2 = new Shell(dev.getActiveShell()); 
        // new Display() won't work on many platforms if one already exists
        final DateTime calendar = new DateTime(shell2, SWT.CALENDAR); 
        // no need to add a listener to shell2, and POP_UP doesn't work for DateTime
        calendar.addSelectionListener(...);
        shell2.open();
        // Edward Thomson noticed it wasn't called, I missed it
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...