Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2013_1 / ООП / Введение_SWG.pdf
Скачиваний:
82
Добавлен:
23.02.2015
Размер:
3.32 Mб
Скачать

set(int calcMode, float[ ] keyValues, float[ ] keyTimes, float[ ] keySplines) .

Класс FloatArrayAnimationKeyFrame аналогичен предыдущему, но позволяет задавать траекторию массивами чисел, например:

float[ ] OHIO = {290.3f, 92.8f, 300.2f, 91.4f, 300.0f, ... }; float[ ] INDIANA = {269.2f, 132.9f, 270.1f, 129.6f, ... }; float[ ] KENTUCKY = {260.2f, 147.6f, 260.7f, 146.1f, ...};

float[ ][ ] KEY_VALUES = {OHIO, INDIANA, KENTUCKY};

new FloatArrayAnimationKeyFrame(polygon, “Points”, 5000, KEY_VALUES);

Класс IntegerAnimationKeyFrame аналогичен числовому заданию траектории, но оперирует с целыми значениями.

Класс ObjectAnimationKeyFrame анимирует различные атрибуты изображений посредством последовательности объектов, например:

String LINE_1 = "Little Jack Horner sat in the corner,” + ”\nEating a Christmas pie;";

String LINE_2 = "He put in his thumb,\nand pulled out a plum,"; String LINE_3 = "And said,\n\"What a good boy am I!\""; String[ ][ ] KEY_VALUES = {LINE_1, LINE_2, LINE_3};

new ObjectAnimationKeyFrame(polygon, “Text”, 5000, KEY_VALUES);

Класс PointAnimationKeyFrame

анимирует атрибут Point как

последовательность точек, например:

 

Point[ ] POINTS = {new Point(17, 0), new Point(0, 23), ... };

new PointAnimationKeyFrame(ellipse, “Location”, 5000, POINTS);

10. 3 Поддержка времени

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

setDuration(10000);

Следующим понятием является повторяемость сцены, задаваемой методами, например:

173

setRepeatIndefinitely(true);

setAutoReverse(false);

setRepeatCount(3);

10.4 Пример приложения с элементами анимации

Пусть необходимо продемонстрировать на дисплее траекторию движения самолета при посадке на полосу аэродрома. Исходными данными для программы являются названия графика, осей X, Y, начальная высота, скорость подлета, угол снижения, максимальное значение координаты X, масса самолета, тормозное усилие, шаг по времени. После контроля правильности ввода строится таблица узлов траектории снижения и посадки самолета и анимационная сцена посадки.

Интерфейсы взаимодействия с пользователем (рисунок 10.1) стандартные с использованием многостраничного блокнота. Пользователь может пользоваться основным и дополнительным меню для выполнения функций программы. Текст программы сопровождается подробными комментариями и приведен ниже.

1)package swtAnimation;

2)// Добавить -Djava.library.path=gtk.linux.x86 в окне VM arguments на закладке Run

3)import java.io.*;

4)import org.eclipse.swt.*;

5)import org.eclipse.swt.graphics.*;

6)import org.eclipse.swt.layout.*;

7)import org.eclipse.swt.program.*;

8)import org.eclipse.swt.widgets.*;

9)import org.eclipse.swt.animation.*;

10)import org.eclipse.swt.animation.framework.IAnimationKeyFrame;

11)public class Posadka {

12)static Display display; // Дисплей

13)

static Shell shell;

// Главное окно

14)

static Text nameGr;

// Имя графика

15)

static

Text

nameX;

//

Имя оси

Х

16)

static

Text

nameY;

//

Имя оси

У

17)static Text h0Text, vText, alfText;

18)static double h0, v0, alf;

19)

static Text maxXText;

// Максимальное Х

20)static double maxX;

21)

static Text mText;

// Масса

174

Рисунок 10.1 — Закладка для ввода исходных данных

22)static double m;

23)

static Text ftText;

// Тормозное усилие

24)static double ft;

25)

 

 

26)

static Text dtText;

// Шаг моделирования по

времени

 

 

27)static double dt;

28)

static Text errText;

// Для сообщений

29)static boolean isError = false;

30)static boolean isVerify = false;

31)static boolean isTable = false;

175

32)static boolean isGraph = false;

33)

static double[ ] Xi, Yi;

// Массивы точек

графика

 

 

34)static Label errLabel;

35)

static Table table;

// Таблица значений графика

36)static TableColumn colI; // Столбцы таблицы

37)static TableColumn colT, colX, colY, colV;

38)static int cntPnt=0;

39)static String fileName; // Имя файла для сохранения

40)static FileWriter fOut; // Файл для записи

41)

static FileReader fIn;

// Файл для чтения

42)

static

Group grpGr;

//

Группа элементов для

построения графика

 

 

43)

static

int penW = 1;

//

Параметры пера для

рисования

 

 

 

 

44)static int penG = 2;

45)static int i;

46)static double xi, yi, vi, ti, minX1, maxX1, minY1,

maxY1;

47)static PointAnimationKeyFrame anim = null;

48)static Label img = null;

49)

// ======

Обработчики меню

=========

50)static Listener onHelp = new Listener() {

51)

public void handleEvent(Event e) {

52)

// Загрузить файл справки приложением по

расширению html

53)

//

Program.launch("C:\\eclipse\\about.html");

54)

Program.launch("C:\\eclipse\\karjer.hlp");

55)

}

56)};

57)static Listener onPrint = new Listener() {

58)

// Обработка команды меню "Печать графика"

59)

public void handleEvent(Event e) {

60)

 

61)

}

62)};

63)static Listener onExit = new Listener() {

64)

// Обработка команды меню "Выход"

65)

public void handleEvent(Event e) {

66)

//gc.dispose(); // Уходим из приложения -

освободили контекст

67)

shell.close(); // и закрыли окно

68)

}

69)};

70)static Listener onOpen = new Listener() {

176

71)

// Обработка команды меню "Открыть файл"

72)

public void handleEvent(Event e) {

73)

FileDialog dialog = new FileDialog(shell,

SWT.OPEN);

 

74)

dialog.setFilterNames(new String[ ]

75){ "Исходные данные","Все файлы (*.*)" });

76)

dialog.setFilterExtensions(new String[ ] {

"*.fun", "*.*" }); // Windows wild cards

77)

dialog.setFilterPath("c:\\user\\"); //

Windows path

 

78)

dialog.setFileName("test.fun");

79)

fileName = dialog.open();

80)

try {

81)

fIn = new FileReader(fileName);

82)

BufferedReader br = new

BufferedReader(fIn);

83)

nameGr.setText(br.readLine());

84)

nameX.setText(br.readLine());

85)

nameY.setText(br.readLine());

86)

h0Text.setText(br.readLine());

87)

vText.setText(br.readLine());

88)

alfText.setText(br.readLine());

89)

maxXText.setText(br.readLine());

90)

mText.setText(br.readLine());

91)

ftText.setText(br.readLine());

92)

dtText.setText(br.readLine());

93)

fIn.close();

94)

} catch (IOException eio) {

95)

errText.append("Ошибка при чтении из

файла " + fileName + "\n");

96)

isError = true;

97)

}

98)

};

99)};

100)static Listener onSave = new Listener() {

101)

// Обработка команды меню "Сохранить файл"

102)

public void handleEvent(Event e) {

103)

FileDialog dialog = new FileDialog(shell,

SWT.SAVE);

 

104)

dialog.setFilterNames(new String[ ]

105){ "Исходные данные","Все файлы (*.*)" });

106)

dialog.setFilterExtensions(new String[ ] {

"*.fun", "*.*" }); // Windows wild cards

107)

dialog.setFilterPath("c:\\user\\"); //

Windows path

 

108)

dialog.setFileName("test.fun");

109)

fileName = dialog.open();

110)

try {

177

111)

fOut = new FileWriter(fileName);

112)

fOut.write(nameGr.getText() + "\n");

113)

fOut.write(nameX.getText() + "\n");

114)

fOut.write(nameY.getText() + "\n");

115)

fOut.write(h0Text.getText() + "\n");

116)

fOut.write(vText.getText() + "\n");

117)

fOut.write(alfText.getText() + "\n");

118)

fOut.write(maxXText.getText() +

"\n");

 

119)

fOut.write(mText.getText() + "\n");

120)

fOut.write(ftText.getText() + "\n");

121)

fOut.write(dtText.getText() + "\n");

122)

fOut.close();

123)

} catch (IOException eio) {

124)

errText.append("Ошибка при записи в

файл " + fileName + "\n");

125)

isError = true;

126)

}

127)

}

128)};

129)static Listener onRevise = new Listener() {

130)

// Обработка команды меню "Проверить данные"

131)

public void handleEvent(Event e) {

132)

errText.setText("");

133)

isError = false;

134)

try {

135)

h0 =

Double.parseDouble(h0Text.getText());

136)

} catch (RuntimeException e1) {

137)

// System.out.println("Ошибка в

задании H0");

 

138)

errText.append("Ошибка в задании

H0 \n");

 

139)

isError = true;

140)

};

141)

try {

142)

v0 =

Double.parseDouble(vText.getText()) * 1000.0 / 3600.0;

143)

} catch (RuntimeException e1) {

144)

// System.out.println("Ошибка в

задании v");

 

145)

errText.append("Ошибка в задании

скорости \n");

 

146)

isError = true;

147)

};

148)

try {

149)

alf =

Double.parseDouble(alfText.getText()) * 3.14 / 180.0;

178

150)

if ((alf < 0.0) | (alf > 0.7)) {

151)

errText.append("Ошибка в задании

угла снижения - недопустимый\n");

152)

isError = true;

153)

};

154)

} catch (RuntimeException e1) {

155)

// System.out.println("Ошибка в

задании alf");

 

156)

errText.append("Ошибка в задании угла

снижения \n");

 

157)

isError = true;

158)

};

159)

try {

160)

maxX =

Double.parseDouble(maxXText.getText()) * 1000.0;

161)

} catch (RuntimeException e1) {

162)

// System.out.println("Ошибка в

задании maxX");

 

163)

errText.append("Ошибка в задании

максимального X \n");

164)

isError = true;

165)

};

166)

try {

167)

m =

Double.parseDouble(mText.getText()) * 1000.0;

168)

} catch (RuntimeException e1) {

169)

// System.out.println("Ошибка в

задании массы");

 

170)

errText.append("Ошибка в задании

массы \n");

 

171)

isError = true;

172)

};

173)

try {

174)

ft =

Double.parseDouble(ftText.getText()) * 1000.0;

175)

} catch (RuntimeException e1) {

176)

// System.out.println("Ошибка в

задании тормозного усилия");

177)

errText.append("Ошибка в задании

тормозного усилия \n");

178)

isError = true;

179)

};

180)

try {

181)

dt =

Double.parseDouble(dtText.getText());

182)

} catch (RuntimeException e1) {

183)

// System.out.println("Ошибка в

задании maxX");

 

184)

errText.append("Ошибка в задании шага

179

по времени \n");

 

185)

 

isError = true;

186)

 

};

187)

 

if (!isError) {

188)

errLabel.setForeground(display.getSystemColor(SWT.COLOR_B

LUE));

 

189)

 

errLabel.setText("Все верно!");

190)

 

isVerify = true;

191)

 

} else {

errLabel.setForeground(display.getSystemColor(SWT.COLOR_RED))

;

 

 

192)

 

errLabel.setText("Есть ошибки!");

193)

 

isVerify = false;

194)

 

};

195)

 

isTable = false;

196)

 

isGraph = false;

197)

}

 

198)

};

// Конец проверки

199)static Listener onTable = new Listener() {

200)

// Обработка команды меню "Построить таблицу"

201)

public void handleEvent(Event e) {

202)

// Удалить старые строки

203)

table.removeAll();

204)

isTable = false;

205)

cntPnt=0;

206)

// Расчет и формирование строк таблицы

значений функции

207)

if (!isVerify) {

208)

MessageBox msg = new

MessageBox(shell, SWT.ICON_QUESTION | SWT.OK);

209)

msg.setMessage("Необходимо проверить

исходные данные!");

210)

msg.open();

211)

return;

212)

};

213)

ti = 0.0;

214)

xi = 0;

215)

yi = h0;

216)

vi = v0;

217)

minX1 = 0.0;

218)

maxX1 = 0.0;

219)

minY1 = 0.0;

220)

maxY1 = 0.0;

221)

TableItem item = new TableItem(table,

SWT.NONE);

 

222)

item.setText(0, String.format("%d", i));

223)

item.setText(1, String.format("%6.2f",

180

ti));

 

 

224)

 

item.setText(2, String.format("%6.2f",

xi));

 

 

225)

 

item.setText(3, String.format("%6.2f",

yi));

 

 

226)

 

item.setText(4, String.format("%6.2f",

vi));

 

 

227)

 

while ((xi <= maxX) & (vi > 0.0)) {

228)

 

cntPnt = cntPnt + 1;

229)

 

ti = ti + dt;

230)

 

if (yi > 0.0) {

231)

 

xi = xi + dt * vi *

Math.cos(alf);

 

232)

 

yi = yi - dt * vi *

Math.sin(alf);

 

233)

 

if (yi < 0.0) {

234)

 

yi = 0.0;

235)

 

};

236)

 

} else {

237)

 

yi = 0.0;

238)

 

vi = vi - ft * dt / m;

239)

 

if (vi < 0.0) {

240)

 

vi = 0.0;

241)

 

};

242)

 

xi = xi + vi * dt;

243)

 

};

244)

 

item = new TableItem(table,

SWT.NONE);

 

245)

 

item.setText(0, String.format("%d",

(int) cntPnt));

246)

 

item.setText(1,

String.format("%6.2f", ti));

247)

 

item.setText(2,

String.format("%6.2f", xi));

248)

 

item.setText(3,

String.format("%6.2f", yi));

249)

 

item.setText(4,

String.format("%6.2f", vi));

250)

 

if (maxX1 < xi) {

251)

 

maxX1 = xi;

252)

 

};

253)

 

if (maxY1 < yi) {

254)

 

maxY1 = yi;

255)

 

};

256)

 

};

257)

 

isTable = true;

258)

 

}

259)

};

// Конец таблицы

181

260)static Listener onGraph = new Listener() {

261)

// Обработка запроса на перерисовку графика

262)

public void handleEvent(Event e) {

263)

// Чтение изображения из файла samolet.bmp,

подготовленного

264)

// стандартным Imaging

265)

// ImageLoader imgLd = new

ImageLoader(); // Загрузчик

266)

// ImageData planerImg =

imgLd.load("samolet.bmp")[0]; // Чтение

267)

// данных

268)

// final Image planer = new Image

(display, planerImg); // Создание

269)

// картинки

270)

// Интегрированный оператор создания и

чтения изображения из файла

271)

final Image planer = new Image(display,

((new ImageLoader())

272)

.load("samolet1.bmp")[0]));

273)

final Image planerd = new Image(display,

((new ImageLoader())

274)

.load("samoletd.bmp")[0]));

275)

Color green =

display.getSystemColor(SWT.COLOR_GREEN);

276)

// Ручное создание картинки самолета

(грубая)

 

277)

// final Image planer = new Image

(display, 30, 15);

278)

// planer.setBackground(black);

279)

// GC gcImg = new GC(planer);

280)

// gcImg.setBackground (black);

281)

// gcImg.fillRectangle(0,0,30,15); //

Черный фон рисунка

282)

// gcImg.setBackground (red); // Инверсный

цвет самолета

283)

// gcImg.fillRectangle(0,7,30,6); //

Фюзеляж

 

284)

// gcImg.fillRectangle(20,0,4,16); //

Крылья

 

285)

// gcImg.fillRectangle(0,1,3,6); // Хвост

286)

// gcImg.dispose();

287)

if (isTable) {

288)

int w = grpGr.getBounds().width - 15;

 

// Размер графика по ширине

289)

int h = grpGr.getBounds().height -

15;

// Размер графика по высоте

290)

double scaleX = w / ((maxX1) * 1.10);

 

// Масштаб по Х

291)

// double scaleY = h / ((maxY1) *

182

1.10);

// Масштаб по Y

 

292)

 

int x0 = 10;

 

// Положение оси Y

293)

 

int y0 = h - 15;

 

// Положение оси Х

294)

 

grpGr.setForegroundRGB(new

RGB(255,255,255));

 

 

295)

 

grpGr.setBackgroundRGB(new

RGB(255,255,255));

 

 

296)

 

grpGr.redraw();

297)

 

// Вариант закраски голубого неба

298)

 

//float[ ] polyPnt = {12,10, w-10,10,

w-10,h-35, 12,h-35};

 

299)

 

//Polygon sky = new Polygon(grpGr,

SWT.LIGHTWEIGHT);

 

 

300)

 

//sky.setPoints(polyPnt);

301)

 

//sky.setBackgroundRGB(new

RGB(230,230,230));

 

 

302)

 

//sky.setForegroundRGB(new

RGB(230,230,230));

 

 

303)

 

//Название графика

304)

 

Label txt = new Label(grpGr,

SWT.NONE);

 

 

305)

 

txt.setLocation(250, 30);

306)

 

txt.setText(nameGr.getText());

307)

 

txt.setSize(300, 30);

308)

 

txt.setForegroundRGB(new

RGB(155,0,155));

 

 

309)

 

//

Название оси ХX

310)

 

txt = new Label(grpGr, SWT.NONE);

311)

 

txt.setLocation(w-5, h);

312)

 

txt.setText(nameX.getText());

313)

 

txt.setSize(200, 30);

314)

 

//

Название оси Y

315)

 

txt = new Label(grpGr, SWT.NONE);

316)

 

txt.setLocation(15, 20);

317)

 

txt.setText(nameY.getText());

318)

 

txt.setSize(200, 30);

319)

 

// Оси

320)

 

Line lineX = new Line(grpGr,

SWT.NONE);

// X

 

321)

 

lineX.setPoints(x0, y0, w, y0);

322)

 

Line lineY = new Line(grpGr,

SWT.NONE);

// Y

 

323)

 

lineY.setPoints(x0, 10, x0, y0);

324)

 

Line lineG = new Line(grpGr,

SWT.NONE);

// Трава слева

325)

 

lineG.setPoints(x0, y0, (int)

(Math.floor(h0 / Math.tan(alf) * scaleX)), y0);

183

326)

lineG.setForeground(green);

327)

lineG.setLineWidth(15);

328)

lineG = new Line(grpGr, SWT.NONE);

// Трава справа

329)

lineG.setPoints((int)

(Math.floor(maxX * scaleX)) + 30, y0, w, y0);

330)

lineG.setForeground(green);

331)

lineG.setLineWidth(15);

332)

// Начальные установки параметров

полета

 

333)

i = 0;

334)

ti = 0.0;

335)

xi = 0;

336)

yi = h0;

337)

vi = v0;

338)

int x1 = 0, y1 = 0;

339)

int numP = 0;

340)

Point[ ] points = new Point[cntPnt];

 

// Массив точек глиссады

341)

while ((xi <= maxX) & (vi > 0.0) &

(numP < cntPnt)) {

// Цикл моделирования одного

// шага по времени

342)

ti = ti + dt; // Время модели

343)

if (yi > 0.0) {// Еще в полете

344)

xi = xi + dt * vi *

Math.cos(alf);

 

345)

yi = yi - dt * vi *

Math.sin(alf);

// Снижаемся под углом alf

346)

if (yi < 0.0) {

347)

yi = 0.0;

348)

};

349)

} else { // Катимся по полосе

350)

vi = vi - ft * dt / m;

 

// Торможение с усилием ft

351)

if (vi < 0.0) {

352)

vi = 0.0;

353)

}; // Остановились

354)

xi = xi + vi * dt;

 

// Новое положение по

горизонтали

 

355)

};

356)

x1 = (int) Math.floor(xi *

scaleX) + 10;

// Координаты ЛВУ на экране в точках

растра

 

357)

y1 = (int) Math.floor(h - yi *

scaleX) - 30;

// Тот же масштаб что и по Х

184

358)

 

points[numP] = new Point(x1,y1);

359)

 

//errText.append(""+points[numP]

.x+" : "+points[numP].y+"\n");

 

360)

 

numP=numP+1;

 

361)

 

};

 

362)

 

// Линия глиссады желтым цветом

363)

 

Polyline line = new Polyline(grpGr,

SWT.LIGHTWEIGHT);

 

364)

 

line.setPoints(points);

 

365)

 

line.setForegroundRGB(new

 

RGB(255,250,100));

 

366)

 

if (!(anim == null)) {

// Если

ранее была запущена анимация

 

367)

 

img.dispose();

// то

удалить старую картинку самолета

 

368)

 

}

 

369)

 

// Изображение самолета как рисунок

на этикетке

 

 

370)

 

img = new Label(grpGr,SWT.NONE);

371)

 

img.setSize(30, 15);

 

372)

 

img.setImage(planer);

 

373)

 

img.setLocation(points[0]);

 

374)

 

//grpGr.pack();

 

375)

 

// Подготовка задания для анимации

376)

 

long now =

 

shell.getDisplay().getSceneClock().getTime() + 10;

//

Время старта

 

 

377)

 

anim = new

 

PointAnimationKeyFrame(img, // Объект анимации

 

378)

 

"Location", now, 20000,

points);

 

 

379)

 

anim.setRepeatIndefinitely(false);

 

 

// Без повторений

 

380)

 

 

 

 

anim.setCalcMode(IAnimationKeyFrame.CALC_MODE_LINEAR);

 

// Режим интерполяции

 

381)

 

//anim.setCalcMode(IAnimationKeyFrame

.CALC_MODE_DISCRETE);

 

382)

 

//anim.setCalcMode(IAnimationKeyFrame

.CALC_MODE_PACED);

 

383)

 

//anim.start();

 

384)

 

if (vi > 0.0) {

 

385)

 

//img.setImage(planerd);

 

386)

 

} else {

 

387)

 

//img.setImage(planer);

 

388)

 

}

 

389)

 

}

 

390)

 

}

 

391)

};

// Конец графика

 

185

392)

393)public static void main(String[ ] args) {

394)

// Главный метод приложения

395)

display = new Display();

396)

shell = new Shell(display);

397)

shell.setLayout(new FillLayout());

398)

shell.setText("Моделирование посадки самолета с

использованием библиотеки SWG");

399)

// Размеры окна приложения

400)

shell.setSize(700, 600);

401)

// Главное меню приложения

402)

Menu bar = new Menu(shell, SWT.BAR); // Область

Главного меню

 

403)

shell.setMenuBar(bar);

404)

MenuItem fileItem = new MenuItem(bar,

SWT.CASCADE);

 

405)

fileItem.setText("Файлы"); // Группа файлов

406)

Menu subFile = new Menu(shell, SWT.DROP_DOWN);

407)

fileItem.setMenu(subFile);

408)

MenuItem itemOpen = new MenuItem(subFile,

SWT.PUSH);

 

409)

itemOpen.setText("Открыть");

410)

itemOpen.addListener(SWT.Selection, onOpen);

411)

MenuItem itemSave = new MenuItem(subFile,

SWT.PUSH);

 

412)

itemSave.setText("Сохранить");

413)

itemSave.addListener(SWT.Selection, onSave);

414)

MenuItem itemExit = new MenuItem(subFile,

SWT.PUSH);

 

415)

itemExit.setText("Выход");

416)

itemExit.addListener(SWT.Selection, onExit);

417)

MenuItem funItem = new MenuItem(bar,

SWT.CASCADE);

 

418)

funItem.setText("Функции"); // Группа функций

419)

Menu subFun = new Menu(shell, SWT.DROP_DOWN);

420)

funItem.setMenu(subFun);

421)

MenuItem itemRevise = new MenuItem(subFun,

SWT.PUSH);

 

422)

itemRevise.setText("Проверить задание");

423)

itemRevise.addListener(SWT.Selection,

onRevise);

 

424)

MenuItem itemTable = new MenuItem(subFun,

SWT.PUSH);

 

425)

itemTable.setText("Построить таблицу");

186

426)

itemTable.addListener(SWT.Selection, onTable);

427)

MenuItem itemGraph = new MenuItem(subFun,

SWT.PUSH);

 

428)

itemGraph.setText("Построить график");

429)

itemGraph.addListener(SWT.Selection, onGraph);

430)

MenuItem itemHelp = new MenuItem(bar,

SWT.PUSH);

 

431)

itemHelp.setText("Справка");

432)

itemHelp.addListener(SWT.Selection, onHelp);

433)

// Создание падающего меню (правая кнопка

мышки)

 

434)

Menu popMenu = new Menu(shell, SWT.POP_UP); //

Меню

 

435)

MenuItem popItemRevise = new MenuItem(popMenu,

SWT.PUSH); // Позиция меню

436)

popItemRevise.setText("Проверить задание");

437)

popItemRevise.addListener(SWT.Selection,

onRevise); // Обработчик

438)

MenuItem popItemTable = new MenuItem(popMenu,

SWT.PUSH); // Позиция меню

439)

popItemTable.setText("Построить таблицу");

440)

popItemTable.addListener(SWT.Selection,

onTable); // Обработчик

441)

MenuItem popItemGraph = new MenuItem(popMenu,

SWT.PUSH); // Позиция меню

442)

popItemGraph.setText("Построить график");

443)

popItemGraph.addListener(SWT.Selection,

onGraph); // Обработчик

444)

// Блокнот с закладками

445)

final TabFolder tabFolder = new

TabFolder(shell, SWT.BORDER);

446)

// Закладка "Исходные данные"

447)

TabItem tabInp = new TabItem(tabFolder,

SWT.NONE);

 

448)

tabInp.setText("Исходные данные");

449)

// Создали группу для элементов на закладке

450)

Group grpInp = new Group(tabFolder,

SWT.SHADOW_IN);

451)

// Константы для размещения элементов ввода

исходных данных

452)

final int inp_leftLabel = 50;

453)

final int inp_wLabel = 245;

454)

final int inp_leftText = 300;

187

455)

final int inp_wText = 300;

456)

final int inp_topLabel = 50;

457)

final int inp_hText = 20;

458)

final int inp_vertStep = 40;

459)

// Поле ввода названия графика

460)

Label lName = new Label(grpInp, SWT.LEFT);

461)

lName.setText("Название графика");

462)

lName.setLocation(inp_leftLabel, inp_topLabel);

463)

lName.setSize(inp_wLabel, inp_hText);

464)

nameGr = new Text(grpInp, SWT.BORDER |

SWT.SINGLE);

 

465)

nameGr.setText("Посадка самолета на полосу");

466)

nameGr.setLocation(inp_leftText, inp_topLabel);

467)

nameGr.setSize(inp_wText, inp_hText);

468)

// Поле ввода названия оси Х

469)

Label lX = new Label(grpInp, SWT.LEFT);

470)

lX.setText("Название оси X");

471)

lX.setLocation(inp_leftLabel, inp_topLabel + 1

* inp_vertStep);

472)

lX.setSize(inp_wLabel, inp_hText);

473)

nameX = new Text(grpInp, SWT.BORDER |

SWT.SINGLE);

 

474)

nameX.setText("X");

475)

nameX.setLocation(inp_leftText, inp_topLabel +

1 * inp_vertStep);

476)

nameX.setSize(inp_wText, inp_hText);

477)

// Поле ввода названия оси Y

478)

Label lY = new Label(grpInp, SWT.LEFT);

479)

lY.setText("Название оси Y");

480)

lY.setLocation(inp_leftLabel, inp_topLabel + 2

* inp_vertStep);

481)

lY.setSize(inp_wLabel, inp_hText);

482)

nameY = new Text(grpInp, SWT.BORDER |

SWT.SINGLE);

 

483)

nameY.setText("H(x)");

484)

nameY.setLocation(inp_leftText, inp_topLabel +

2 * inp_vertStep);

485)

nameY.setSize(inp_wText, inp_hText);

486)

// Поле ввода начальной высоты h0

487)

Label lh0 = new Label(grpInp, SWT.LEFT);

488)

lh0.setText("Начальная высота (м)");

489)

lh0.setLocation(inp_leftLabel, inp_topLabel + 3

* inp_vertStep);

490)

lh0.setSize(inp_wLabel, inp_hText);

491)

h0Text = new Text(grpInp, SWT.BORDER |

SWT.SINGLE);

 

492)

h0Text.setText("50.0");

493)

h0Text.setLocation(inp_leftText, inp_topLabel +

188

3 * inp_vertStep);

494)

h0Text.setSize(inp_wText, inp_hText);

495)

// Поле ввода скорости подлета

496)

Label lv = new Label(grpInp, SWT.LEFT);

497)

lv.setText("Скорость подлета (км/час)");

498)

lv.setLocation(inp_leftLabel, inp_topLabel + 4

* inp_vertStep);

499)

lv.setSize(inp_wLabel, inp_hText);

500)

vText = new Text(grpInp, SWT.BORDER |

SWT.SINGLE);

 

501)

vText.setText("200.0");

502)

vText.setLocation(inp_leftText, inp_topLabel +

4 * inp_vertStep);

503)

vText.setSize(inp_wText, inp_hText);

504)

// Поле ввода угла снижения

505)

Label lalf = new Label(grpInp, SWT.LEFT);

506)

lalf.setText("Угол снижения (градусы)");

507)

lalf.setLocation(inp_leftLabel, inp_topLabel +

5 * inp_vertStep);

508)

lalf.setSize(inp_wLabel, inp_hText);

509)

alfText = new Text(grpInp, SWT.BORDER |

SWT.SINGLE);

 

510)

alfText.setText("10.0");

511)

alfText.setLocation(inp_leftText, inp_topLabel

+ 5 * inp_vertStep);

512)

alfText.setSize(inp_wText, inp_hText);

513)

// Поле ввода максимального значения по оси Х

514)

Label lmaxX = new Label(grpInp, SWT.LEFT);

515)

lmaxX.setText("Макс. значение X (км)");

516)

lmaxX.setLocation(inp_leftLabel, inp_topLabel +

6 * inp_vertStep);

517)

lmaxX.setSize(inp_wLabel, inp_hText);

518)

maxXText = new Text(grpInp, SWT.BORDER |

SWT.SINGLE);

 

519)

maxXText.setText("10.0");

520)

maxXText.setLocation(inp_leftText, inp_topLabel

+ 6 * inp_vertStep);

521)

maxXText.setSize(inp_wText, inp_hText);

522)

// Поле ввода массы самолета

523)

Label lm = new Label(grpInp, SWT.LEFT);

524)

lm.setText("Масса самолета (тонн)");

525)

lm.setLocation(inp_leftLabel, inp_topLabel + 7

* inp_vertStep);

526)

lm.setSize(inp_wLabel, inp_hText);

527)

mText = new Text(grpInp, SWT.BORDER |

189

SWT.SINGLE);

 

528)

mText.setText("15.0");

529)

mText.setLocation(inp_leftText, inp_topLabel +

7 * inp_vertStep);

530)

mText.setSize(inp_wText, inp_hText);

531)

// Поле ввода тормозного усилия

532)

Label lft = new Label(grpInp, SWT.LEFT);

533)

lft.setText("Тормозное усилие (тонн)");

534)

lft.setLocation(inp_leftLabel, inp_topLabel + 8

* inp_vertStep);

535)

lft.setSize(inp_wLabel, inp_hText);

536)

ftText = new Text(grpInp, SWT.BORDER |

SWT.SINGLE);

 

537)

ftText.setText("100.0");

538)

ftText.setLocation(inp_leftText, inp_topLabel +

8 * inp_vertStep);

539)

ftText.setSize(inp_wText, inp_hText);

540)

// Поле ввода количества точек на оси X

541)

Label ldt = new Label(grpInp, SWT.LEFT);

542)

ldt.setText("Шаг по времени (сек)");

543)

ldt.setLocation(inp_leftLabel, inp_topLabel + 9

* inp_vertStep);

544)

ldt.setSize(inp_wLabel, inp_hText);

545)

dtText = new Text(grpInp, SWT.BORDER |

SWT.SINGLE);

 

546)

dtText.setText("0.2");

547)

dtText.setLocation(inp_leftText, inp_topLabel +

9 * inp_vertStep);

548)

dtText.setSize(inp_wText, inp_hText);

549)

errLabel = new Label(grpInp, SWT.LEFT);

550)

errLabel.setLocation(inp_leftLabel,

inp_topLabel + 10 * inp_vertStep + 20);

551)

errLabel.setSize(inp_wLabel, inp_hText);

552)

// Разместили группу на закладке

553)

tabInp.setControl(grpInp);

554)

// ====== Закладка для таблицы =========

555)

TabItem tabTab = new TabItem(tabFolder,

SWT.NONE);

 

556)

tabTab.setText("Таблица");

557)

Group grpTbl = new Group(tabFolder,

SWT.SHADOW_IN);

558)

Label l2 = new Label(grpTbl, SWT.LEFT);

559)

l2.setText("Таблица значений параметров

процесса");

 

560)

l2.setLocation(5, 15);

190

561)

l2.setSize(145, 20);

562)

table = new Table(grpTbl, SWT.MULTI |

SWT.BORDER | SWT.FULL_SELECTION

| SWT.V_SCROLL);

563)

table.setLinesVisible(true);

564)

table.setHeaderVisible(true);

565)

colI = new TableColumn(table, SWT.NONE);

566)

colI.setText("Шаг"); // Заголовок столбца 1

567)

colI.setWidth(50);

 

568)

colT = new TableColumn(table, SWT.NONE);

569)

colT.setText("Время (сек)"); // Заголовок

столбца 2

 

 

570)

colT.setWidth(100);

 

571)

colX = new TableColumn(table, SWT.NONE);

572)

colX.setText("Расстояние (м)"); // Заголовок

столбца 3

 

 

573)

colX.setWidth(100);

 

574)

colY = new TableColumn(table, SWT.NONE);

575)

colY.setText("Высота (м)"); // Заголовок

столбца 4

 

 

576)

colY.setWidth(100);

 

577)

colV = new TableColumn(table, SWT.NONE);

578)

colV.setText("Скорость (м/сек)"); // Заголовок

столбца 5

 

 

579)

colV.setWidth(100);

 

580)

table.setSize(table.computeSize(SWT.DEFAULT,

400));

 

 

581)

table.setLocation(5, 40);

582)

tabTab.setControl(grpTbl);

583)

// ====== Закладка для графика =======

584)

TabItem tabGr = new TabItem(tabFolder,

SWT.NONE);

 

 

585)

tabGr.setText("График");

586)

grpGr = new Group(tabFolder, SWT.LIGHTWEIGHT);

587)

grpGr.setBackgroundRGB(new RGB(230,230,255));

588)

grpGr.setForegroundRGB(new RGB(230,230,255));

589)

//gc = new GC(grpGr); // Создали контекст на

все время работы приложения до завершения

590)

//img = new Label(grpGr,SWT.NONE);

591)

tabGr.setControl(grpGr);

592)

// grpGr.addListener (SWT.Paint, onGraph); //

Установили обработчик для

 

593)

// перерисовки графика

594)

// ====== Закладка для отчетов =========

191

595)

TabItem tabErr = new TabItem(tabFolder,

SWT.NONE);

596)

tabErr.setText("Неполадки");

597)

Group grpErr = new Group(tabFolder,

SWT.SHADOW_IN);

598)

Label lErr = new Label(grpErr, SWT.LEFT);

599)

lErr.setText("Сообщения об ошибках");

600)

lErr.setLocation(5, 15);

601)

lErr.setSize(145, 20);

602)

errText = new Text(grpErr, SWT.BORDER |

SWT.MULTI | SWT.V_SCROLL);

603)

errText.setLocation(5, 35);

604)

errText.setSize(550, 470);

605)

tabErr.setControl(grpErr);

606)

// Подключение падающего меню (правая кнопка

мышки)

607)

shell.setMenu(popMenu);

608)

grpInp.setMenu(popMenu);

609)

grpTbl.setMenu(popMenu);

610)

grpGr.setMenu(popMenu);

611)

// Закончили формирование элементов формы и

открываем ее

612)

shell.open();

613)

// Цикл обработки сообщений из очереди

операционной системы

614)

while (!shell.isDisposed()) {

615)

if (!display.readAndDispatch())

616)

display.sleep();

617)

}

618)

display.dispose();

619)

}

620)

}

192

Соседние файлы в папке ООП