русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Программа 113. Выравнивание многострочного текста


Дата добавления: 2015-06-12; просмотров: 983; Нарушение авторских прав


В программе происходит следующее: строка, которая будет выравниваться, разбивается на отдельные слова. Для каждого слова программа следит за его длиной в текущем шрифте и автоматически продвигается к следующей строке, если слово не будет помещаться в текущую строку. Каждая законченная строка отображается в окне в выбранном в текущий момент стиле выравнивания. После каждого щелчка мыши в окне апплета, стиль выравнивания изменяется. Пример вывода этой программы представлен на рис.20.

а б в г

Рис. 20. Выравнивание текста: а – влево, б – вправо, в – по центру,
г – по ширине

// Файл TextLayout.java

// Демонстрирует выравнивание текста.

import java.applet.*;

import java.awt.*;

import java.awt.event.*;

import java.util.*;

/*

<title> Text Layout </title>

<applet code = "TextLayout" width = 200 height = 200>

<param name = "text" value =

"Output to a Java window is actually quite easy.

As you have seen, the AWT provides support for fonts,

colors, text, and graphics.

<p> Of course, you must effectively utilize these items if you are to

achieve professional results.">

<param name = "fontname" value = "Serif">

<pararn name = "fontSize" value = "14">

</applet>

*/

public class TextLayout extends Applet {

final int LEFT = 0;

final int RIGHT = 1;

final int CENTER = 2;

final int LEFTRIGHT = 3;

int align;

Dimension d;

Font f;

FontMetrics fm;

int fontSize;

int fh, bl;

int space;

String text;

public void init() {

setBackground(Color.white);

text = getParameter("text");

try {

fontSize = Integer.parseInt(getParameter("fontSize"));

}

catch (NumberFormatException e)

{

fontSize = 14;



}

align = LEFT;

addMouseListener(new MyMouseAdapter(this));

}

public void paint(Graphics g) {

update(g);

}

public void update(Graphics g) {

d = getSize();

g.setColor(getBackground());

g.fillRect(0, 0, d.width, d.height);

if(f == null)

f = new Font(getParameter("fontname"), Font.PLAIN, fontSize);

g.setFont(f);

if(fm == null) {

fm = g.getFontMetrics();

bl = fm.getAscent();

fh = bl + fm.getDescent();

space = fm.stringWidth(" ");

}

g.setColor(Color.black);

StringTokenizer st = new StringTokenizer(text);

int x = 0;

int nextx;

int y = 0;

String word, sp;

int wordCount = 0;

String line = "";

while (st.hasMoreTokens()) {

word = st.nextToken();

if(word.equals("<p>")) {

drawString(g, line, wordCount, fm.stringWidth(line), y + bl);

line = "";

wordCount = 0;

x =0;

y = y + (fh * 2);

}

else {

int w = fm.stringWidth(word);

if(( nextx = (x + space + w)) > d.width) {

drawString(g, line, wordCount, fm.stringWidth(line), y + bl);

line = "";

wordCount = 0;

x = 0;

y = y + fh;

}

if(x != 0)

sp = " ";

else

sp = "";

line = line + sp + word;

x = x + space + w;

wordCount++;

}

}

drawString(g, line, wordCount, fm.stringWidth(line), y+bl);

}

public void drawString(Graphics g, String line,

int wc, int lineW, int y) {

switch(align) {

case LEFT:

g.drawString(line, 0, y);

break;

case RIGHT:

g.drawString(line, d.width - lineW,y);

break;

case CENTER:

g.drawString(line, (d.width - lineW)/2, y);

break;

case LEFTRIGHT:

if (lineW < (int) (d.width * .75))

g.drawString(line, 0, y);

else {

int toFill = (int)((d.width - lineW)/wc);

int nudge = d.width - lineW - (toFill * wc);

int s = fm.stringWidth(" ");

StringTokenizer st = new StringTokenizer(line);

int x = 0;

while(st.hasMoreTokens()) {

String word = st.nextToken();

g.drawString(word, x, y);

if(nudge > 0) {

x = x + fm.stringWidth(word) + space + toFill + 1;

nudge--;

}

else

x = x + fm.stringWidth(word) + space + toFill;

}

}

break;

}

}

}

class MyMouseAdapter extends MouseAdapter {

TextLayout tl;

public MyMouseAdapter (TextLayout tl) {

this.tl = tl;

}

public void mouseClicked(MouseEvent me) {

tl.align = (tl.align + 1) % 4;

tl.repaint();

}

}

Посмотрим, как работает апплет. Сначала он создает несколько констант, которые будут использоваться для определения стиля выравнивания, и затем объявляет несколько переменных. Метод init() получает текст, который будет отображен. Затем апплет инициализирует размер шрифта в блоке try-catch, который установит размер шрифта в 14 пунктов, если в документе HTML отсутствует параметр fontSize. Параметр text является длинной строкой текста с HTML-тегом <р> в качестве абзаца-разделителя.

Двигателем этого примера является метод update(). Он устанавливает шрифт и получает базовую линию и высоту шрифта от объекта шрифтовой метрики (FontMetrics fm). Затем создается объект StringTokenizer, который используется, чтобы извлечь следующую лексему (строку, ограниченную пробелами) из строки, определенной в переменной text. Если следующая лексема есть <р>, метод увеличивает интервал строк. Иначе, он выясняет, выходит ли длина этой лексемы за ширину колонки. Если строка заполнена текстом или нет больше лексем, строка выводится методом drawString().

Три первых направления в переключателе метода drawString() работают идентично: каждое выравнивает строку, которая передана через параметр line, по левому, правому краю или по центру окна, в зависимости от стиля выравнивания. Направление LEFTRIGHT выравнивает как левую, так и правую стороны строки. Для этого вычисляется остаточный пробел (разность между шириной строки и шириной колонки) и распределяется между всеми словами. Последний метод в этом классе изменяет стиль выравнивания каждый раз, когда вы щелкаете мышью в окне апплета.

Для запуска программы надо подготовить файл RunTextLayout.html:

<title> Text Layout </title>

<applet code = "TextLayout" width = 200 height = 200>

<param name = "text" value =

"Output to a Java window is actually quite easy.

As you have seen, the AWT provides support for fonts,

colors, text, and graphics.

<P> Of course, you must effectively utilize these items if you are to

achieve professional results.">

<param name = "fontname" value = "Serif">

<pararn name = "fontSize" value = "14">

</applet>

Запускается ааплет или утилитой appletviewer или браузером. На рис.21 показано окно браузера Mozilla Firefox с апплетом с выравнивание текста по левому и по ширине.

Рис. 21. Апплет в окне браузера с выравниванием текста по левому краю и по ширине

 



<== предыдущая лекция | следующая лекция ==>
Программа 112. Центрирование текста | Использование элементов управления, менеджеров компоновки и меню AWT


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.698 сек.