>import java.io.*;
>class FileOutputStreamS {
>public static byte getlnput()[] throws Exception {
>byte buffer[] = new byte[12];
>for (int i=0; i
>buffer[i] = (byte) System.in.read();
>}
>return buffer;
>}
>public static void main(String args[]) throws Exception {
>byte buf[] = getlnput();
>OutputStream f() = new FileOutputStream("filel.txt");
>OutputStream f1 = new FileOutputStream("file2.txt");
>OutputStream f2 = new FileOutputStream("file3.txt");
>for (int i=0; i < 12; i += 2) {
>f0.write(buf[i]);
>}
>f0.close();
>f1.write(buf);
>f1.close();
>f2.write(buf, 12/4,12/2);
>f2.close();
>}
>}
12. ПРОГРАММИРОВНИЕ ГРАФИЧЕСКИХ ПОЛЬЗОВАТЕЛЬСКИХ ИНТЕРФЕЙСОВ
>12.1. Компоненты
Component — это абстрактный класс, который инкапсулирует все атрибуты визуального интерфейса - обработка ввода с клавиатуры, управление фокусом, взаимодействие с мышью, уведомление о входе/выходе из окна, изменения размеров и положения окон, прорисовка своего собственного графического представления, сохранение текущего текстового шрифта, цветов фона и переднего плана (более 10 методов). Перейдем к некоторым конкретным подклассам класса Component.
>12.2. Класс Container
Container — это абстрактный подкласс класса Component, определяющий дополнительные методы, которые дают возможность помещать в него другие компоненты, что дает возможность построения иерархической системы визуальных объектов. Container отвечает за расположение содержащихся в нем компонентов с помощью интерфейса LayoutManager.
12.3. Класс Canvas
Основная идея использования объектов Canvas в том, что они являются семантически свободными компонентами. Вы можете придать объекту Canvas любое поведение и любой желаемый внешний вид. Его имя подразумевает, что этот класс является пустым холстом, на котором вы можете «нарисовать» любой компонент — такой, каким вы его себе представляете.
Произведем от Canvas подкласс GrayCanvas, который будет просто закрашивать себя серым цветом определенной насыщенности. Наш апплет будет создавать несколько таких объектов, каждый со своей интенсивностью серого цвета.
>import java.awt.*;
>import java.applet. *;
>class GrayCanvas extends Canvas {
>Color gray;
>public GrayCanvas(float g) {
>gray = new Color(g, g, g);
>}
>public void paint(Graphics g) {
>Dimension size = size();
>g.setColor(gray);
>g.fillRect(0,0, size.width, size.height);
>g.setColor(Color.black);
>g.drawRect(0, 0, size.width-1, size.height-1);
>}
>}
>public class PanelDemo extends Applet {
>static final int n = 4;
>public void init() {
>setLayout(null);
>int width = Integer.parseInt(getParameter("width"));
>int height = Integer.parseInt(getParameter("height"));
>for (int i = 0; i < n; i++) {
>for (int j = 0; j < ri; j++) {
>float g = (i * n + j) / (float) (n * n);
>Canvas с = new GrayCanvas(g);
>add(c);
>c.resize(width / n, height / n);
>c.move(i * width / n, j * height / n);
>}
>}
Мы устанавливаем размер каждого из объектов Canvas на основе значения, полученного с помощью метода size, который возвращает объект класса Dimension. Обратите внимание на то, что для размещения объектов Canvas в нужные места используются методы resize и move. Такой способ станет очень утомительным, когда мы перейдем к более сложным компонентам и более интересным вариантам расположения. А пока для выключения упомянутого механизма использован вызов метода setLayout(null).
12.4. Класс Label
Функциональность класса Label сводится к тому, что он знает, как нарисовать объект String — текстовую строку, выровнив ее нужным образом. Шрифт и цвет, которыми отрисовывается строка метки, являются частью базового определения класса Component. Для работы с этими атрибутами предусмотрены пары методов getFont/setFont и getForeground/setForeground. Задать или изменить текст строки после создания объекта с помощью метода setText. Для задания режимов выравнивания в классе Label определены три константы — LEFT, RIGHT и CENTER. Ниже приведен пример, в котором создаются три метки, каждая — со своим режимом выравнивания.
>import java.awt.*;
>import java.applet. *;
>public class LabelDemo extends Applet {
>public void init() {
>setLayout(null);
>int width = Integer.parseInt(getParameter("width"));