как открыть календарь при нажатии кнопки в Java SWT?

#swt

#swt

Вопрос:

Я пытаюсь разработать приложение Java SWT в eclipse. Мне нужно заполнить текстовое поле, используя календарь даты и времени в 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();                   
                    }
                }); 
                }
                }); 
             }
        });  
  

Ответ №1:

  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:

На самом 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
    }
};