#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:
-
Вы создаете
Shell
, но даже не открываете его. Попробуйте позвонитьshell2.open()
. -
Вы добавляете
SWT.CALENDAR
слушателя вShell
. Это не будет делать то, что вы хотите сделать. Или что-нибудь, если на то пошло, посколькуShell
не запускаетSWT.CALENDAR
события. Вместо этого вам просто нужно добавитьDateTime
в контейнер и подключить прослушиватели выбора кCalendar
. -
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
}
};