Принципи побудови графічного інтерфейса

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Комп’ютерні науки
Кафедра:
Не вказано

Інформація про роботу

Рік:
2010
Тип роботи:
Методичні вказівки до лабораторної роботи
Предмет:
Об’єктно-орієнтоване програмування

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”  Принципи побудови графічного інтерфейса Методичні вказівки до виконання лабораторної роботи №6 з курсу “Об’єктно-орієнтоване програмування” для студентів базового напрямку 6.0804 “Комп’ютерні науки” ЗАТВЕРДЖЕНО на засіданні кафедри “Системи автоматизованого проектування” Протокол № 1 від 30.08.2010 ЛЬВІВ 2010 Мова програмування Java. Методичні вказівки до виконання лабораторної роботи №6 “Принципи побудови графічного інтерфейса” з курсу: “Об’єктно-орієнтоване програмування” для студентів базового напрямку 6.0804 “Комп’ютерні науки”. Укладачі: Каркульовський В.І., доцент, к.т.н. Керницький А.Б., ст.викл., др.інж. Відповідальний за випуск: Рецензенти: 1. МЕТА РОБОТИ Одержати навики побудови алгоритмів лінійних обчислювальних процесів, навчитися складати алгоритми та програмувати процеси з розгалуженням, циклами, ітераційними циклами за допомогою мови Java. Одержати навички роботи із масивами. 2.ОСНОВНІ ТЕОРЕТИЧНІ ВІДОМОСТІ 2.1. ОПЕРАТОРИ МОВИ JAVA Основне поняття графічного інтерфейса користувача (ГІК) — компонент (component) графічної системи. В українській мові це слово підрозуміває просто складову частину, елемент чого-небудь, але в графічному інтерфейсі це поняття більш конкретне. Воно означає окремий, повністю визначений елемент, котрий можна використовувати в графічному інтерфейсі незалежно від інших елементів. Наприклад, це поле введення, кнопка, рядок меню, смуга прокрутки, радіокнопка. Саме вікно додатку — теж є компонент. Компоненти можуть бути і невидимими, наприклад, панель, обєднуюча компоненти, також являється компонентом. Ви не здивуєтесь, узнавши, що в AWT компонентом вважається обєкт класу Component або обєкт всякого класу, розширяючого клас Сomponent. В класі Сomponent зібрані загальні методи роботи з будь-яким компонентом графічного інтерфейса користувача. Цей клас — центр бібліотеки AWT. Ознайомтеся з цим класом. Кожний компонент перед виведенням на екран поміщаєтся в контейнер (container). Контейнер "знає", як розмістити компоненти на екрані. Розуміється, в мові Java контейнер — це обєкт класу Container або всякого його розширення. Ознайомтеся з цим класом. Прямий нащадок цього класу — клас jcomponent — вершина ієрархії багатьох класів бібліотеки Swing. Увага! Ви постійно будете зустрічати імена компонентів двох типів, наприклад Button і jButton. Знайте, що перший компонент важкий і для його використання треба підключати бібліотеку AWT(import java.awt.*). Другий компонент легкий і для його використання треба підключати бібліотеку Swing(import java.swing.*). При створенні додатків для програміста немає значення, яку бібліотеку використовувати. А от при створенні аплетів, які запускаються браузером, використовується виключно AWT, хоча всього можна очікувати від нових версій Java. Створивши компонент — обєкт класу Component або його розширення, належить додати його до попередньо створеного обєкту класу container або його розширення одним із методів add(). Клас Container сам являється невидимим компонентом, він розширює клас Component. Таким чином, в контейнер поряд з компонентами можна поміщати контейнери, в яких знаходяться інші компоненти, досягаючи тим самим більшої гнучкості розміщення компонентів. Основне вікно додатку, активно взаємодіюче з операційною системою, необхідно побудувати по правилаx графічної системи. Воно повинне переміщатися по екрану, змінювати розміри, реагувати на дії миші і клавіатури. У вікні повинні бути, як мінімум, наступні стандартні компоненти. Рядок заголовку (title bar), з лівої сторони якого необхідо розмістит кнопку контекстного меню, а з правої — кнопки звертання і розвертання вікна і кнопку закриття додатку. Необовязковий рядок меню (menu bar) з випадаючими пунктами меню. Горизонтальна і вертикальна смуги прокрутки (scrollbars). Вікно повинне бути обмежено рамкою (border), реагуючою на дії миші. Вікно з цими компонентами в готовому вигляді описане в класі Frame. Щоб створити вікно, досить зробити свій клас розширенням класу Frame, як показано в лістинзі 8.1. Всього вісім рядків тексту і вікно готове. Лістинг 8.1. Найпростіше вікно додатку import java.awt.*; class TooSimpleFrame extends Frame{ public static void main(String[] args){ Frame fr = new TooSimpleFrame(); //Конструктор вікна fr.setSize(400, 150); //Методами класу установлюємо властивості обєкту fr.setVisible(true); } } Класс TooSimpleFrame володіє всіма властивостями класу Frame, являючись його розширенням. В ньому створюється экземпляр вікна fr, і установлюються розміри вікна на екрані - 400x150 пікселів - методом setSize(). Якщо не задати розмір вікна, то на екрані появиться вікно мінімального розміру - тільки рядок заголовку. Звичайно, потім його можна розтянути за допомогою миші до будь-якого розміру. Потім вікно виводиться на екран методом setVisible(true). Справа в тому, що, з точки зору бібліотеки AWT, створити вікно значить виділити область оперативної памяті, заповнену потрібними пікселями, а вивести вміст цієї області на екран - уже інша задача, яку і вирішує метод setVisible(true). Звичайно, таке вікно непридатне для роботи. Не кажучи уже про те, що у нього немає заголовка і тому вікно не можна закрити. Хоча його можна переміщати по екрану, міняти розміри, звертати на панель задач і розкривати, але команду завершення додатку ми не запрограмували. Вікно не можна закрити ані клацанням кнопкою миші по кнопці з хрестиком в правому верхньому куті вікна, ані комбінацією клавіш <Alt>+<F4>. Приходиться за- вершати роботу додатку способами операційної системи, наприклад, комбінацією клавіш <Ctrl>+<C>, або закриттям вікна Командний рядок. В лістинзі 8.2 до програми лістингу 8.1 додані заголовок вікна і звернення до методу, що дозволяє завершити додаток. Лістинг 8.2. Просте вікно додатку import java.awt.*; import java.awt.event.*; class SimpleFrame extends Frame{ SimpleFrame(String s){ super (s); setSize(400, 150); setVisible(true); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent ev){ System.exit (0); } }); } public static void main(String[] args){ new SimpleFrame(" Мy program"); } } Якщо ви запустите програму в середовищі JBuilder, то позбавитесь від надокучливого вікна Командная строка. В програму додано конструктор класу SimpleFrame, що звертається до конструктора свого суперкласу Frame, який записує свій аргумент s в рядок заголовка вікна. В конструктор перенесена установка розмірів вікна, виведення його на екран і додано звернення до методу addWindowListener(), реагуючому на дії з вікном. В якості аргумента цьому методу передається екземпляр безіменного внутрішнього класу, розширяючого клас WindowAdapter. Цей безіменний клас реалізує метод windowСІosing(), що обробляє закриття вікна. Дана реалізація дуже проста — додаток завершається статичним методом exit() класу System. Вікно при цьому закривається автоматично. Все це ми детально розберемо в уроці 12, а поки що просто додавайте ці рядки у всі ваші програми для закрття вікна і завершення роботи додатку. Отже, вікно готове. Але воно поки що пусте. Виведемо в нього, по традиції, привітання "Hello, World!", правда, злегка змінене. В лістинзі 3.3 приведена повна програма цього виведення, а рис. 8.1 демонструє вікно. Лістинг 8.3. Графічна програма з привітанням import java.awt.*; import java.awt.event.*; class Hello extends Frame{ Hello(String s){ super(s); } public void paint(Graphics g){ g.setFont(new Font("Serif", Font.ITALIC | Font.BOLD, 30)); g.drawString("Hello, XXI century World!", 20, 100); } public static void main(String[] args){ Frame f = new Hello("Вітаю тебе, XXI століття!"); f.setSize(400, 150); f.setVisible(true); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent ev){ System.exit(0); } }); } } Рис. 8.1. Вікно програми-привітання Для виведення тексту ми перевизначаєм метод paint() класу Сomponent. Клас Frame наслідує цей метод з пустою реалізацією. Метод paint() одержує в якості аргумента екземпляр g класу Graphics, що вміє, зокрема, виводити текст методом drawString(). В цьому методі крім тексту ми указуємо положення початку рядка у вікні - 20 пікселів від лівого краю і 100 пікселів зверху. Ця точка - ліва нижня точка першої літери тексту Н. Крім того, ми установили новий шрифт "Serif" більшого розміру - 30 пунктів, напівжирний, курсив. Всякий шрифт - обєкт класу Font, а задається він методом setFont() класу Graphics. Роботу з шрифтами ми розглянемо в наступному уроці. В лістинзі 8.3 ми винесли виклики методів установки розмірів вікна, виведення його на екран і завершення програми в метод main(). Як бачимо із цього простого прикладу, бібліотека AWT велика і розгалужена, в ній багато класів, взаємодіючих один з одним. Розглянемо ієрархію деяких найчастіше використовуваних класів AWT. 8.3. Ієрархія класів AWT На рис. 8.2 показана ієрархія основних класів AWT. Основу її складають готові компоненти: Button, Canvas, Checkbox, Choice, Container, Label, List, Scrollbar, TextArea, TextField, Menubar, Menu, PopupMenu, Menultem, CheckboxMenuItem. Якщо цього набору замало, то від класу Canvas можна породити власні "важкі" компоненти, а від класу Component — "легкі" компоненти. Основні контейнери — це класи Panel, ScrollPane, Window, Frame, Dialog, FileDialog. Свої "важкі" контейнери можна породити від класу Panel, а "легкі" — від класу Сontainer. Цілий набір класів допомагає розміщувати компоненти, задавати колір, шрифт, рисунки і зображення, реагувати на сигнали від миші і клавіатури. На рис. 8.2 показані і початкові класи ієрархії бібліотеки Swing — класи JComponent, JWindow, JFrame, JDialog, JApplet. Заключення Як бачимо, бібліотека графічних класів AWT дуже велика і детально опрацьована. Ця різноманітність класів тільки відображає різноманітність задач побудови графічного інтерфейса. Бажання покращити інтерфейс безмежне. Воно приводит до створення все нових бібліотек класів і розширенню існуючих. Незалежними виробниками створено уже багато графічних бібліотек Java: KL Group, JBCL, і зявляються все нові і нові бібліотеки. Інформацію про них можна одержати на сайтах, указаних в уроці 1. В наступних уроках ми детально розглянемо, як можна використовувати бібліотеку AWT для створення власних додатків з графічним інтерфейсом користувача, зображеннями, анімацією і звуком. 9.1. Методи класу Graphics При створенні контексту в ньому задається поточний колір для рисування, зазвичай чорний, і колір фону області рисування — білий або сірий. Змінити поточний колір можна методом setСoІor (Color newCoІor), аргумент newСoІor котрого — обєкт класу Color. Узнати поточний колір можна методом getСolor(), повертаючим обєкт класу Сolor. 9.1.1. Як задати колір Колір, як і все в Java, — обєкт певного класу, а саме, класу Сolor. Основу класу складають сім конструкторів кольору. Самий простий конструктор: Color(int red, int green, int blue) створює колір, одержаний змішуванням червоного red, зеленого green і синього blue . Ця кольорова модель називається RGB. Кожна складова змінюється від 0 (відсутність складової) до 255 (повна інтенсивність цієї складової). Наприклад: Color pureRed = new Color(255, 0, 0); Color pureGreen = new Color(0, 255, 0); визначають чистий яскраво-червоний pureRed і чистий яскраво-зелений pureGreen кольори. В другому конструкторі інтенсивність складової можна змінювати більш гладко дійсними числами від 0.0 (відсутність складової) до 1.0 (повна інтенсивність складової): Color(float red, float green, float blue) Наприклад: Color someColor = new Color(0.05f, 0.4f, 0.95f); Третій конструктор Color(int rgb) задає всі три складові в одному цілому числі. В бітах 16—23 записується червона складова, в бітах 8—15 — зелена, а в бітах 0—7 — синя складова кольору. Наприклад: Color с = new Color(0хFF8F48FF); Тут червона складова задана з інтенсивністю 0x8F, зелена — 0x48, синя — 0xFF. Наступні три конструктори Color(int red, int green, int blue, int alpha) Color(float red, float green, float blue, float alpha) Color(int rgb, boolean hasAlpha) вводять четверту складову кольору, так звану "альфу", що визначає прозорість кольору. Ця складова проявляє себе при накладанні одного кольору на другий. Якщо альфа рівна 255 або 1,0, то колір повністю непрозорий, попередній колір не просвічується крізь нього. Якщо альфа рівна 0 або 0,0, то колір абсолютно прозорий, для кожного пікселя видно тільки попередній колір. Останній із цих конструкторів враховує складову альфа, що знаходиться в бітах 24—31, якщо параметр hasAІpha рівний true. Якщо ж hasAІpha рівне false, то складова альфа вважається рівною 255, незалежно від того, що записано в старших бітах параметра rgb. Перші три конструктори створюють непрозорий колір з альфою, рівною 255 або 1,0. Сьомий конструктор Color(ColorSpace cspace, float[] components, float alpha) дозволяє створювати колір не тільки в кольоровій моделі (color model) RGB, але і в інших моделях: CMYK, HSB, CIEXYZ, визначених обєктом класу ColorSpace. Для створення кольору в моделі HSB можна скористатися статичним методом getHSBColor(float hue, float saturation, float brightness). Якщо немає необхідності ретельно підбирати кольори, то можна просто скористатися однією із тринадцати статичних констант типу color класу Сolor. Наперекір стандарту "Code Conventions" вони записуються рядковими літерами: black, blue, cyan, darkGray, gray, green, lightGray, magenta, orange, pink, red, white, yellow. Методи класу Color дозволяють одержати складові поточного кольору: getRed(), getGreen(), getBlue(), getAlpha(), getRGB(), getColorSpace (), getComponents (). Два методи створюють більш яскравий brighter() і більш темний darker() кольори в порівнянні з поточним кольором. Вони корисні, якщо треба виділити активний компонент або, навпаки, показати неактивний компонент блідніше решти компонентів. Два статичних методи повертають колір, перетворений із кольорової моделі RGB в HSB і навпаки: float[] RGBtoHSB(int red, int green, int blue, float[] hsb) int HSBtoRGB(int hue, int saturation, int brightness) Створивши колір, можна рисувати ним в графічному контексті. 9.1.2. Як нарисувати фігуру Основний метод рисування drawLine(int x1, int y1, int х2, int y2) рисує поточним кольором відрізок прямої між точками з координатами (x1, y1) і (х2, у2). Одного цього методу достатньо, щоб нарисувати будь-яку картину по точках, рисуюючи кожну точку з координатами (х, у) методом drawLine (x, у, х, у) і змінюючи кольори від точки до точки. Але ніхто, зрозуміло, не стане цього робити. Інші графічні примітиви: drawRect(int x, int у, int width, int height) — рисує прямокутник зі сторонами, параллльними краям екрана, і задається координатами верхнього лівого кута (х, у), шириною width пікселів і висотою height пікселів; draw3DRect(int x, int у, int width, int height, boolean raised) — рисує прямокутник, що ніби-то виділяється із площини рисування, якщо аргумент raised рівний true, або ніби-то вдавлений в площину, якщо аргумент raised рівний false; drawOval(int x, int у, int width, int height) — рисує овал, вписаний в прямокутник, заданий аргументами метода. Якщо width == height, то одержимо коло; drawArc(int x, int у, int width, int height, int startAngle, int arc) — рисує дугу овала, вписаного в прямокутник, заданий першми чотирма аргументами. Дуга має величину arc градусів і відраховується від кута startAngle. Кут відраховується в градусах від вісі Ох. Додатній кут відраховується проти годиникової стрілки, відємний — по годинниковій стрілці; drawRoundRect (int x, int у, int width, int height, int arcWidth, int arcHeight) — рисує прямокутник із закругленими краями. Закруглення викреслюються четвертинками овалів, вписаних в прямокутники шириною arcWidth і висотою arcHeight, побудовані в кутах основного прямокутника; drawPolyline(int[] xPoints, int[] yPoints, int nPoints) — рисує ламану з вершинами в точках xPoints[i], yРoints[i]) і числом вершин nPoints; drawPolygon(int[] xPoints, int[] yPoints, int nPoints) — рисує замкнуту ламану, проводячи замикаючий відрізок прямої між першою і останньої точками; drawРoІygon(Polygon p) — рисує замкнуту ламану, вершини якої задані объектом р класу Polygon. 9.2. Клас Polygon Цей клас призначений для роботи з многокутником, зокрема, з трикутниками і довільними чотирикутниками. Обєкти цього класу можна створити двома конструкторами: Polygon () — створює пустий обєкт; Polygon(int[] xPoints, int[] yPoints, int nPoints) — задаються вершини многокутника (xPoints[i], yPoints[i]) і їх число nPoints Після створення обєкта в нього можна додавати вершини методом addPoint(int x, int у) Логічні методи contains() дозволяють перевірити, чи не лежить в многокутнику задана аргументами метода точка, відрізок прямої або цілий прямокутник зі сторонами, паралельними сторонам екрана. Логічні методи intersects() дозволяють перевірити, чи не перетинаються з даним многокутником відрізок прямої, заданий аргументами метода, або прямокутник зі сторонами, паралельними сторонам экрана. Методи getBounds() і getBounds2D() повертають прямокутник, цілком вміщаючий в себе даний многокутник. Повернемося до методів класу Graphics. Декілька методів викреслюють фігури, залиті поточним кольором: fillRect(), fill3DRect(), filІArco, fiІІОval(), filІPoІiygon(), filІRoundRect(). У них такі ж аргументи, як і у відповідних методів, викреслюючих незаповнені фігури. Наприклад, якщо ви хочете змінити колір фону області рисування, то установіть новий поточний колір і накресліть ним заповнений прямокутник величиною у всю область: public void paint(Graphics g){ Color initColor = g.getColor(); // Зберігаємо початковий колір g.setColor(new Color(0, 0, 255)); // Устанавлюємо колір фону // Заливаємо область рисування g.fillRect(0, 0, getSizeO.width - 1, getSize().height - 1); g.setColor(initColor); // Відновлюємо початковий колір // Подальші дії } Як бачимо, в класі Graphics зібрані тільки самі необхідні засоби рисування. Немає навіть методу, що задає колір фону (хоча можна задати колір фону компонента методом setBackground() класу Сomponent). Засоби рисування, виведення тексту в область рисування і виведення зображень значно доповнені і розширені в підкласі Graphics2D, що входить в систему Java 2D. Наприклад, в ньому єсть метод задання кольору фону setBackground(Color с). Перед тим як звернутися до класу Graphics2D, розглянемо засоби класу Graphics для виведення тексту. 9.3. Як вивести текст Для виведення тексту в область рисування поточним ольором і шрифтом, починаючи з точки (х, у), в класі Graphics єсть декілька методів: drawString (String s, int x, int y) – виводить рядок s; drawBytes(byte[] b, int offset, int length, int x, int у) — виводить length елементів масиву байтів b, починаючи з індексу offset; drawChars(chart] ch, int offset, int length, int x, int у) — виводить length елементів масиву символів ch, починаючи з індексу offset. Четвертий метод виводить текст, занесений в обєкт класу, реалізуючого інтерфейс AttributedCharacterІterator. Це дозволяє задавати свій шрифт для кожного символу: drawString(AttributedCharacterІterator iter, int x, int y) Точка (х, у) — це ліва нижня точка першої літери тексту на базовій лінії (baseline) виведення шрифта. 9.3.1. Як установити шрифт Метод setFont(Font newFont) класу Graphics установлює поточний шрифт для виведення тексту. Метод getFont() повертає поточний шрифт. Як і все в мові Java, шрифт — це обєкт класу Font. Подивимося, які можливості представляє цей клас. 9.3.2. Як задати шрифт Обєкти класу Font зберігають накреслення (glyphs) символів, що утворюють шрифт. Їх можна створити двома конструкторами: Font (Map attributes) — задає шрифт із заданими аргументом attributes. Ключі атрибутів i деякі їх значенния задаються константами класу TextAttribute із пакету java.awt.font. Цей конструктор характерний для Java 2D і буде розглянутий далі в цьому уроці. Font (String name, int style, int size) — задає шрифт по імені name, із стилем style і розміром size типографських пунктів. Цей конструктор характерний для JDK 1.1, але широко використовується і в Java 2D в силу своєї простоти. Типографський пункт в Россії і деяких європейських країнах рівний 0,376 мм, Точніше, 1/72 частини французького дюйма. В англо-американській системі мір пункт рівний 1/72 частини англійського дюйма, 0,351 мм. Останній пункт і використовується в компютерній графіці. Імя шрифту name може бути рядком із фізичним іменем шрифту, наприклад, "Courier New", або один із рядків "Dialog", "Dialoglnput",' "Monospaced", "Serif", "SansSerif", "Symbol". Це так звані логічні імена шрифтів (logical font names). Якщо name == null, то задається шрифт по замовчувнню. Стиль шрифту style — це одна із констант класу Font: BOLD — напівжирный; ITALIC — курсив; PLAIN — звичайний. Напівжирний курсив (bolditalic) можна задати операцією побітового додавання, Font. BOLD | Font. ITALIC, як це зроблено в лістинзі 8.3. При виведенні тексту логічним іменам шрифтів і стилям співставляються фізичні імена шрифтів (font face name) або імена сімейств шрифтів (font name). Ці імена реальних шрифтів, наявних у графічній підсистемі операційної системи. Наприклад, логічному іменi "Serif" може бути співставлено імя сімейства (family) шрифтів Times New Roman, а в комбінації зі стилями — конкретні фізичні імена Times New Roman Bold, Times New Roman Italic. Ці шрифти повинні знаходитися в складі шрифтів графічної системи тієї машини, на якій виконується додаток. Список імен доступних шрифтів можна прородивитися наступними операторами: Font[] fnt = Toolkit.getGraphicsEnvironment.getAHFonts(); for (int i = 0; i< fnt.length; i++) System.out.println(fnt[i].getFontName()); В склад SUN J2SDK входить сімейство шрифтів Lucida. Установивши SDK, ви можете бути впевнені, що ці шрифти єсть у вашій системі. Таблиці співставлення логічених і фізичних імен шрифтів знаходяться у файлах з іменами font.properties; font.properties.ar; font.properties.ja; font.properties.ru. і т. д. Ці файли повинні бути розташовані в JDK в каталозі jdkl.3\jre\lib або в якому-небудь іншому підкаталозі lib кореневого каталога JDK тієї машини, на якій виконується додаток. Потрібний файл вибирається віртуальною машиною Java по закінченні імені файла. Це закінчення співпадає з міжнародним кодом мови, установленого в локалі або в системній властивості user.language (див. рис. 6.2). Якщо у вас установлена російська локаль з міжнародним кодом мови "ru", то для співставлення буде вибраний файл font.properties.ru. Якщо такий файл не знайдено, то використовується файл font.properties, що не відповідає ніякій конкретній локалі. Тому можна залишити в системі тільки один файл font.properties, переписавши в нього зміст потрібного файла або створивши файл заново. Для будь-якої локалі буде використовуватися цей файл. В лістинзі 9.1 показано скорочений зміст файла font.properties.ru із JDK 1.3 для платформи MS Windows. Лістинг 9.1. Примірний файл font.properties.ru : # %W% %E% # Це просто коментарі # AWT Font default Properties for Russian Windows # # Три співставлення логічному імені "Dialog": dialog.0=Arial,RUSSIAN_CHARSET dialog.l=WingDings,SYMBOL_CHARSET,NEED_CONVERTED dialog.2=Symbol,SYMBOL_CHARSET,NEED_CONVERTED # По три співставлення стилям ITALIC, BOLD, ITALIC+BOLD: dialog.italic.0=Arial Italic,RUSSIAN_CHARSET dialog.italic.l=WingDings,SYMBOL_CHARSET,NEED_CONVERTED dialog.italic.2=Symbol,SYMBOL_CHARSET,NEED_CONVERTED dialog.bold.0=Arial Bold,RUSSIAN_CHARSET dialog.bold.l=WingDings,SYMBOL_CHARSET,NEED_CONVERTED dialog.bold.2=Symbol,SYMBOL_CHARSET,NEED_CONVERTED dialog.bolditalic.0=Arial Bold Italic,RUSSIAN_CHARSET dialog.bolditalic.l=WingDings,SYMBOL_CHARSET,NEED_CONVERTED dialog.bolditalic.2=Symbol,SYMBOL_CHARSET,NEED_CONVERTED # По три співставлення імені "Dialoglnput" і стилям: dialoginput.0=Courier New,RUSSIAN_CHARSET dialoginput.l=WingDings,SYMBOL_CHARSET,NEED_CONVERTED dialoginput.2=Symbol,SYMBOL_CHARSET,NEED_CONVERTED dialoginput.italic.0=Courier New Italic,RUSSIAN_CHARSET # і так далі # # По три співставлення імені "Serif" і стилям:  serif.0=Times New Roman,RUSSIAN_CHARSET  serif.l=WingDings,SYMBOL_CHARSET,NEED_CONVERTED  serif.2=Symbol,SYMBOL_CHARSET,NEED_CONVERTED serif.italic.0=Times New Roman Italic,RUSSIAN_CHARSET # і так далі # Інші логічні імена sansserif. CMArial,RUSSIAN_CHARSET sansserif.l=WingDings,SVMBOL_CHARSET,NEED_CONVERTED sansserif.2=Symbol,SYMBOL_CHARSET,NEED_CONVERTED sansserif.italic. 0=Arial Italic,ROSSIAN_CHARSET # і так далі # monospaced.0=Courier New,RUSSIAN_CHARSET monospaced.l=WingDings,SYMBOL_CHARSET,NEED_CONVERTED monospaced.2=Symbol,SYMBOL_CHARSET,NEED_CONVERTED monospaced.italic.0=Courier New Italic,RUSSIAN_CHARSET # і так далі # Default font definition # default.char=2751 # for backword compatibility # Старі логічні імена версії JDK 1.0 timesroman.0=Times New Roman,RUSSIAN_CHARSET helvetica.0=Arial,RUSSIAN_CHARSET courier.0=Courier New,RUSSIAN_CHARSET zapfdingbats.0=WingDings,SYMBOL_CHARSET # font filenames for reduced initialization time # Файли зі шрифтами filename.Arial=ARIAL.TTF filename.Arial_Bold=ARIALBD.TTF filename.Arial_Italic=ARIALI.TTF filename.Arial_Bold_Italic=ARIALBI.TTF filename.Courier_New=COUR.TTF filename.Courier_New_Bold=COURBD.TTF filename.Courier_New_Italic=COURI.TTF filename.Courier_New_Bold_Italic=COURBI.TTF filename.Times_New_Roman=TIMES.TTF filename.Times_New_Roman_Bold=TlMESBD.TTF filename.Times_New_Roman_Italic=TIMES3.TTF filename.Times_New_Roman_Bold Italic=TIMESBI.TTF filename.WingDings=WINGDING.TTF filename.Symbol=SYMBOl.TTF # name aliases # Псевдоіими логічних імен закоментовані # alias.timesroman=serif # alias.helvetica=sansserif # alias.courier=monospaced # Static FontCharset info # # Класи перетворення символів у байти fontcharset.dialog.0=sun.io.CharToByteCP1251 fontcharset.dialog.l=sun.awt.windows.CharToByteWingDings fontcharset.dialog.2=sun.awt.CharToByteSymbol fontcharset.dialoginput.0=sun.io.CharToByteCP1251 fontcharset.dialoginput.l=sun.awt.windows.CharToByteWingDings fontcharset.dialoginput.2=sun.awt.CharToByteSymbol fontcharset.serif.0=sun.io.CharToByteCP1251 fontcharset.serif.l=sun.awt.windows.CharToByteWingDings fontcharset.serif.2=sun.awt.CharToByteSymbol fontcharset.sansserif.0=sun.io.CharToByteCP1251 fontcharset.sansserif.l=sun.awt.windows.CharToByteWingDings fontcharset.sansserif.2=sun.awt.CharToByteSymbol fontcharset.monospaced.0=sun.io.CharToByteCP1251 fontcharset.monospaced.l=sun.awt.windows.CharToByteWingDings fontcharset.monospaced.2=sun.awt.CharToByteSymbol # Exclusion Range info # # He проглядати вцьому шрифті вказані діапазони exclusion.dialog.0=0100-0400,0460-ffff exclusion.dialoginput.0=0100-0400, 0460-ffff exclusion.serif.0=0100-0400,04 60-ffff exclusion.sansserif.0=0100-0400, 0460-ffff exclusion.monospaced.0=0100-0400,0460-ffff # charset for text input # # Введені байтові символи кодуються в кириличний діапазон кодуванняи Unicode inputtextcharset=RUSSIAN_CHARSET Більша частина цього файла зайнята співставленнями логічних і фізичних імен. Ви бачите, що під номером 0: логічномлу імені "Dialog" співставлено імя сімейства Arial; логічному імені "Dialoginput" співставлено імя сімейства Courier New; логічному імені "Serif" співставлено імя сімейства Times New Roman; логічному імені "Sansserif" співставлено імя сімейства Arial; логічному імені "Monospaced" співставлено імя сімейства Courier New. Там, де указаний стиль: dialog.italic, dialog.bold і т.д., підставлений відповідний фізичний шрифт. В рядках лістинга 9.1, що починаються зі слова filename, указані файли з відповідними фізичними шрифтами, наприклад: filename.Arial=ARIAL.TTF Ці рядки необобовязкові, але вони прискорюють пошук файлів зі шрифтами. Теперь подивимося на останні рядки лістинга 9.1. Рядок exclusion.dialog.0=0100-0400, 0460-ffff означає, що в шрифті, співставленому логічному імені "Dialog" під номером 0, а саме, Arial, не стануть відшукуватися накреслення (glyphs) символів з кодами в діапазонах '\u0100' —'\u0400' і '\u0460' —'\uFFFF'. Вони будуть взяті із шрифту, співставленого цьому імени під номером 1, а саме, WingDings. Те ж саме буде відбуватися, якщо потрібні накреслення не знайдені в шрифті, співставленому логічному імені під номером 0. Не всі файли зі шрифтами Unicode містять накреслення (glyphs) всіх символів. Якщо потрібні накреслення не знайдені і в співставленні 1 (в даному прикладі в шрифті WingDings), вони будуть відшукуватися у співставленні 2 (тобто в шрифті Symbol) і т. д. Подібних співставлень можна написати скільки завгодно. Таким чином, кожному логічому імені шрифта можна співставити різні діапазони різних реальних шрифтів, а також застрахуватися від відсутності накреслень деяких символів в шрифтах Unicode. Всі співставлення під номерами 0, 1, 2, 3, 4 належить повторити для всіх стилів: bold, italic, bolditalic. Якщо в графічній системі використовуються шрифти Unicode, як, наприклад, в MS Windows NT/2000, то більше ні про що не треба турбуватися. Якщо ж графічна система використовує байтові ASCII-шрифти як, наприклад, MS Windows 95/98/ME, то треба потурбуватися про їх правильне перекодування
Антиботан аватар за замовчуванням

25.05.2016 15:05-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!