Архив Java programming
Выпуск 12-й
Здравствуйте дорогие читатели!
Содержание
1. Начинающим2. Тема "на заказ"
3. Вопрос - ответ
4. Программный код…
5. JavaScript
Начинающим
Операторы
Операторы в языке Java — это специальные символы, которые сообщают транслятору о том, что вы хотите выполнить операцию с некоторыми операндами. Некоторые операторы требуют одного операнда, их называют унарными. Одни операторы ставятся перед операндами и называются префиксными, другие — после, их называют постфиксными операторами. Большинство же операторов ставят между двумя операндами, такие операторы называются инфиксными бинарными операторами. Существует тернарный оператор, работающий с тремя операндами.
В Java имеется 44 встроенных оператора. Их можно разбить на 4 класса - арифметические, битовые, операторы сравнения и логические.
Сегодня мы рассмотрим арифметические операторы
Арифметические операторы
Арифметические операторы используются для вычислений так же как в алгебре. Допустимые операнды должны иметь числовые типы. Например, использовать эти операторы для работы с логическими типами нельзя, а для работы с типом char можно, поскольку в Java тип char — это подмножество типа int.
| Оператор | Результат |
| + | Сложение |
| - | Вычитание (также унарный минус) |
| * | Умножение |
| / | Деление |
| % | Деление по модулю |
| ++ | Инкремент |
| -- | Декремент |
| += | Сложение с присваиванием |
| -+ | Вычитание с присваиванием |
| *= | Умножение с присваиванием |
| /= | Деление с присваиванием |
| %= | Деление по модулю с присваиванием |
Четыре арифметических действия
Ниже, в качестве примера, приведена простая программа, демонстрирующая использование операторов. Обратите внимание на то, что операторы работают как с целыми литералами, так и с переменными.
class BasicMath
{
public static void int a = 1 + 1;
int b = a * 3;
main(String args[])
{
int c = b / 4;
int d = b - а;
int e = -d;
System.out.println("a = " + а);
System.out.println("b = " + b);
System.out.println("c = " + c);
System.out.println("d = " + d);
System.out.println("e = " + e);
}
}
Исполнив эту программу, вы должны получить приведенный ниже результат:
C: \> java BasicMath a = 2 b = 6 c = 1 d = 4 e = -4
Оператор деления по модулю
Оператор деления по модулю, или оператор mod, обозначается символом %. Этот оператор возвращает остаток от деления первого операнда на второй. В отличие от C++, функция mod в Java работает не только с целыми, но и с вещественными типами. Приведенная ниже программа иллюстрирует работу этого оператора.
class Modulus
{
public static void main (String args [])
{
int x = 42;
double у = 42.3;
System.out.println("x mod 10 = " + x % 10);
System.out.println("y mod 10 = " + у % 10);
}
}
Выполнив эту программу, вы получите следующий результат:
С:\> Modulus x mod 10 = 2 y mod 10 = 2.3
Арифметические операторы присваивания
Для каждого из арифметических операторов есть форма, в которой одновременно с заданной операцией выполняется присваивание. Ниже приведен пример, который иллюстрирует использование подобной разновидности операторов.
class OpEquals
{
public static void main(String args[])
{
int a = 1;
int b = 2;
int с = 3;
a += 5;
b *= 4;
c += a * b;
с %= 6;
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("c = " + c);
}
}
А вот и результат, полученный при запуске этой программы: С:> Java OpEquals
а = 6 b = 8 с = 3
Инкремент и декремент
В С существует 2 оператора, называемых операторами инкремента и декремента (++ и --) и являющихся сокращенным вариантом записи для сложения или вычитания из операнда единицы. Эти операторы уникальны в том плане, что могут использоваться как в префиксной, так и в постфиксной форме. Следующий пример иллюстрирует использование операторов инкремента и декремента.
class IncDec
{
public static void main(String args[])
{
int a = 1;
int b = 2;
int c = ++b;
int d = a++;
c++;
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("c = " + c);
System.out.println("d = " + d);
}
}
Результат выполнения данной программы будет таким:
C:\ java IncDec a = 2 b = 3 c = 4 d = 1
Тема "на заказ"
Печать из Java-приложений.
Java 1.1 и последующие версии предлагают несколько простых методов печати, которые можно вызвать из Java-приложений.
Сначала мы рассмотрим относительно примитивные методы печати, которые предлагает Java, а затем изучим технологию объектно-ориентированного программирования. Знание данной технологии позволит нам построить более полезный и надежный объект Printer.
Основы печати на Java
Java 1.1 представляет класс PrintJob и дополнительный метод print(Graphics g) класса Container, которые образуют систему печати. Вы получаете объект класса PrintJob из класса Toolkit, взятого из класса Frame.
PrintJob pj = getToolkit().getPrintJob(frm, "printing", null);
Первым аргументом является фрейм приложения, вторым - любое имя задания для печати, а третьим - либо объект класса Properties, либо null. Поскольку система печати на Java не поддерживает никакие свойства, поэтому в качестве объекта вполне можно использовать null.
Класс PrintJob включает следующие методы:
| end() | Заканчивает процесс печати и выполняет необходимую чистку. |
| finalize() | Заканчивает процесс печати, как только к нему перестают поступать обращения. |
| GetGraphics() | Получает объект Graphics, который изображается на следующей странице. |
| GetPageDimension() | Возвращает размеры страницы в пикселах. |
| GetPageResolution() | Возвращает разрешение страницы в пикселах на дюйм. |
| LastPageFirst() | Возращает "true" ("истинно"), при условии что последняя страница печатается первой. |
Простая программа печати
Самой простой программой печати является та, которая:
- Создает фрейм;
- Получает объект PrintJob;
- Получает объект принтера Graphics;
- Передаёт данные для печати объекту принтера Graphics;
- Удаляет объект принтера Graphics, что приводит к выбросу страницы;
- Завершает процесс печати.
Пример подобной программы приводится далее:
import java.awt.*;
public class Printer1 extends Frame
{
public Printer1()
{
//Получаем объект PrintJob
PrintJob pjob = getToolkit().getPrintJob(this, "Printer", null);
//Получаем объект Graphics
Graphics pg = pjob.getGraphics();
//Печатаем
pg.setFont(new Font("SansSerif",Font.PLAIN,12));
pg.drawString("Hello!!!", 100, 100);
pg.dispose(); //Конец страницы
pjob.end(); //Завершаем работу
System.exit(0); //Выходим
}
static public void main(String argv[])
{
new Printer1();
}
}
- Данная программа поможет нам создать больше общих классов печати:
- Задание на печать должно создаваться во фрейме. Поэтому задания на печать почти всегда являются визуальными приложениями.
- Когда вы создаете класс PrintJob, появляется системный диалог принтера; после чего вы можете выбрать тип принтера и желаемое количество копий.
- Хотя задание на печать создается во фрейме, необязательно чтобы данный фрейм был визуальным или имел ненулевой размер.
- Прежде чем отправлять текст на принтер, вы должны выбрать шрифт.
- Процесс печати происходит путем передачи данных объекту принтера Graphics.
- Каждая страница распечатывается сразу и имеет свой собственный объект Graphics. А метод dispose() позволяет распечатать страницу до конца.
Недостатки простых способов печати
Данная простая программа печати выглядит достаточно примитивно. Мы должны печатать каждую строку текста, в конце каждой строки ставить символ переноса, сами задавать шрифт, а также задавать каждую страницу отдельно.
В следующем номере мы создадим более функциональный объект Printer, который сможет сам задавать, типы шрифтов и конец строки и к тому же, этот процесс будет скрыт от нас.
Вопрос - ответ
Вопрос:
В Graphics2D надо чтобы три картинки вращались независимо друг от друга. Я когда rotate делаю крутятся все, а надо для одной.
Серж
Ответ:
В Graphics2D всё прорисовывается последовательно, т.е. для прорисовки нескольких картинок относительно начальных координат необходимо:
Выполняем поворот на Phi1
Рисуем картинку1
Выполняем поворот на -Phi1 (приводи координатную плоскость в начальное положение)
Выполняем поворот на Phi2
Рисуем картинку2
Выполняем поворот на –Phi2 (приводи координатную плоскость в начальное положение)
Выполняем поворот на Phi3
Рисуем картинку3
Выполняем поворот на –Phi3 (приводи координатную плоскость в начальное положение)
Пример помещаю в раздел “Программный код…”
Вопрос:
Как из аплета перейти по заданной ссылке?
Сергей
Ответ:
try
{
AppletContext ap = getAppletContext();
ap.showDocument(new URL("http://my-site/"), "_self");
}
catch(Exception e)
{
}
Вместо параметра _self можешь подставить _blank для открытия ссылки в новом окне или указать имя фрейма.
Программный код…
Вот простинький пример поворота изображения.
import java.awt.*;
import java.awt.event.*;
class RotateImg extends Frame
{
public RotateImg()
{
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
dispose();
System.exit(0);
}
});
}
public static void main(String args[])
{
System.out.println("Starting RotateImg...");
RotateImg mainFrame = new RotateImg();
mainFrame.setSize(400, 400);
mainFrame.setTitle("RotateImg");
mainFrame.setVisible(true);
}
public void paint(Graphics g)
{
Image img1 = getToolkit().getImage("1.gif");
Graphics2D g2= (Graphics2D)g;
g2.drawImage(img1,120,120,this);
g2.rotate(Math.PI/10);
g2.drawImage(img1,120,120,this);
g2.rotate(-Math.PI/10);
g2.translate(120,120);
g2.rotate(Math.PI/2);
g2.translate(-120,-120);
g2.drawImage(img1,120,120,this);
}
}
JavaScript
Вопрос:
Не могли бы Вы предложить код JavaScript (для вставки на html-страницу), который выполнял бы следующую операцию:
Страница на сайте состоит из нескольких фреймов (fr1.html, fr2.html, fr3.html ).
В том случае, если посетитель открывает один из фреймов напрямую (допустим, получив ссылку из поискового каталога), JavaScript проверяет, что фрейм открыт отдельно от остальных фреймов и производит перезагрузку таким образом, чтобы страница показывалась с учетом всех фреймов (открывается файл index.html ) .
Структура страницы:
index.html - главный файл (разбивка на фреймы);
fr1.html - фрейм 1;
fr2.html - фрейм 2;
fr3.html - фрейм 3.
Виктор
Ответ:
Допустим, имена фреймов fr1, fr2, fr3, то необходимо в файл который загружается во фрейм fr1 вставить между тегами <head;> </head> следующие:
<script; language="JavaScript"> <!-- if(this.name!="fr1")document.location="index1.html" //--> </script>Подробнее на /javascript/examples/frame1.html
Вопросы присылайте на E-mail [email protected] с пометкой "вопрос по Java".
Жду вопросов и предложений.
Юрий Ладик.
Подписаться на эту рассылку можно тут /subs/subs.html



Узнай о чем ты на самом деле сейчас думаешь


