Объявление трехмерного динамического массива



       double m3d1[][][] = new double[3][4][10];

       for(int i=0;i<m2d1.length;i++) {

       //длина каждой строки массива задается динамически в программе

                   m2d2[i] = new double[5];

                   //вывод матрицы на экран

                    for(int j=0;j<m2d1[i].length;j++)

                              System.out.print(m2d1[i][j]+ " ");

       System.out.println();

       }

Задание 1. Напишите программу позволяющую заполнять матрицу случайными вещественным значениями от -1 до 1, используя объект Math и его статический метод random(), возвращающий вещественное значение от 0 до 1: Math.random(). Размер матрицы задается вначале программы как константа.

Задание 2. Напишите программу позволяющую с клавиатуры вводить размер матрицы и затем заполнять ее случайными значениями.

Далее приводится пример программы для ввода строки.

//подключение модуля работы с вводом вывода, например, для работы с исключительными ситуациями ввода-вывода - IOException

import java.io.*;

//Объявление класса с одним статическим методом, то есть методом, который можно вызывать не создавая копии объекта от класса.

class Input {

       //функция возвращает пока просто пустую строку.

       static public String read()

{

       

                  String s="";

   return s;

   }

}

//главный класс, содержащий основную программу.

public class learn1 {

   //главная программа, обработка через исключения

// в качестве аргумента функции main выступает список входных параметров

выступающих как аргументы при вызове программы из консоли

например — java learn1 param1 param2, в данном случае в программу будет переданы строки param1 и param2.

       public static void main(String[] args) throws IOException {

                  // TODO Auto-generated method stub

//объявление переменной строкового типа

   String s="";

//начало цикла

   while(true) {

//считывание из потока ввода (с клавиатуры) символа, так как функция read() возвращает целый тип данных, мы преобразуем его в тип char.

                  char f = (char)System.in.read();                   

//проверяем на символ конца строки, если конец строки, то выходим из цикла

   if(f=='\n') break;

//добавляем к вводимой строке новый символ

   s=s+f;

   }

}

}

Операции ввода в основной программе перенесите в метод класса input, не забудьте в функции read() указать обработку через исключения ввода вывода — throws IOException и затем вызывайте этот метод для ввода данных.

Реализуйте в классе Input еще один статический метод для ввода целых и вещественных чисел. Используйте класс Input и его функции для ввода данных в матрицу, для это используйте функцию перевода строки в значения целого или вещественного типов, а также уже написанную функцию чтения строки с клавиатуры — read().

Работа с графическим интерфейсом пользователя (GUI (Graphic User Interface)).

Компонентные модели для построения графического интерфейса пользователя представляют собой типичную объектно-ориентированную модель взаимодействия, основанную на иерархии объектов и механизме событий. При этом строится иерархия классов и иерархия объектов. Мы уже рассмотрели иерархию на основе наследования, когда объект является экземпляром некоторого класса, при этом каждый класс может быть подклассом другого, при этом свойства и методы класса предка переходят в свойства и методы подкласса потомка, например, класс — сооружение, подкласс класса сооружение — мост, подкласс моста - разводной мост. Например — класс пустое прямоугольное окно, подклассом прямоугольного окна может быть — кнопка, список, метка с именем. Иерархия объектов показывает, что данный объект содержит другой объект, тот в свою очередь еще какой-то объект. Например, Окно содержит Панель, на Панели расположена Кнопка. Обычно в такой иерархии объектов существует общий метод прорисовки окна, который вызывает прорисовку всех расположенных в нем объектов, также при обработке событий, например, события мыши сначала обрабатывается событие общего окна, потом управление передается элементу, который принадлежит данному окну и непосредственно над которым расположен в данный момент курсор мыши. Суть такой компонентной модели, что у каждого окна в массиве указываются ссылки на компоненты расположенные в данном окне, при этом конкретизация каждой ссылки происходит на этапе динамического выполнения программы, а не на этапе компиляции, при этом используются так называемые виртуальные методы.

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

class <nameclass> implements <nameinterface1>, <nameinterface2>..,<nameinterfaceN>.

{}

//объявляем модуль для работы с классами ввода вывода

import java.io.*;

//объявляем модуль для работы с модулем swing — функции работы с графическим интерфейсом пользователя

import javax.swing.*;

//модуль работы с апплетами

import java.awt.*;

//модуль для работы с событями

import java.awt.event.*;

//объявляем наш собственный класс и наследуемые им интерфейсы

//ActionListener предоставляет метод интерфейса actionPerformed(ActionEvent ac), это общий метод обработки событий, применяется при обработке событий от объектов, например, при нажатии кнопки, аргумент ActionEvent содержит имя объекта вызвавшего событие и другие параметры события.

MouseListener содежит интерфейсы для обработки событий от мыши, таких как нажатие кнопки, вращение колесика мыши и т.д., для обработки событий используется, методы mousePressed(MouseEvent me), mouseReleased(MouseEvent me) и т.д., в качестве входного параметра для которого служит MouseEvent — описывающий состояние мышки.

class MyFrame implements ActionListener,MouseListener, MouseMotionListener {

//ссылка на объект Frame - окно

       JFrame Frame;

//логическая переменная показывающая, что мышка нажата

       boolean press;

//координаты мышки при нажатии

       int x,y;

//функция конструктор вызываемая при создании объекта (экземпляра класса)

       MyFrame() {

//Создание объекта JFrame, с помощью функции new и вызова конструктора, оператор new создает экземпляр класса — объект и размещает его в памяти

       Frame = new JFrame("Name of frame");       

//Установка размера окна и его положения

       Frame.setBounds(100, 100 ,400, 400);

//Создание кнопки с именем Ok, ссылка на объект кнопка в переменной but, JButton — имя класса объектов кнопки

       JButton but = new JButton("Ok");

// Установка способа расположения в окне объектов. Если не указывается способ расположения (null), то расположение может быть произвольным, установленным пользователем, в ином случае используются специальные объекты, которые позволяют располагать объект друг за другом по горизонтали, вертикали, или в таблице.

       Frame.setLayout(null);

       // установка размера кнопки и ее положения (задание левого верхнего угла и ширины, высоты)

       but.setBounds(1, 3, 80, 30);

       //установка в качестве обработчика событий объектов данного класса с помощью процедуры actionPerformed

       but.addActionListener(this);

       //добавление к форме (фрейму) объекта кнопки

       Frame.add(but);

       //создание второй кнопки, ссылка на объект кнопки в переменной but1

       JButton but1 = new JButton();

       //задание визуального имени кнопки

       but1.setText("Exit");

       but1.setBounds(1, 40, 80, 30);

       but1.addActionListener(this);

       Frame.add(but1);

       JButton but2 = new JButton();

       but2.setText("Button");

       but2.setBounds(1, 80, 120, 30);

       but2.addActionListener(this);

       Frame.add(but2);

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

       press = false;

       //установка объекта данного класса в качестве класса обработчика событий от движения мыши в окне Frame, this — ссылка на самого себя

       Frame.addMouseMotionListener(this);

       //установка объекта данного класса в качестве класса обработчика событий от мыши в окне Frame, this — ссылка на самого себя

       Frame.addMouseListener(this);

       //отображение окна — окно становится визуально отображаемым

       Frame.setVisible(true);          

       }

       //функция закрытия окна

       public void close()

       { //закрытие окна и останов выполнения программы

       Frame.dispose();    }

//процедура обработки события нажатия кнопки мыши

       public void mousePressed(MouseEvent me) {

//устанавливаем флаг нажатия

       press = true;   

//считываем текущие координаты мыши и запоминаем их

       x = me.getX();

       y = me.getY();

       }

// обработчик события когда кнопка мыши отпускается

       public void mouseReleased(MouseEvent me) {

//указываем, что кнопка уже не нажата

                   press = false;          }

       //процедура обработки движения мыши при не нажатых кнопках

public void mouseMoved(MouseEvent me) {       }

// процедура обработки событий от различных объектов

public void actionPerformed(ActionEvent ac)

{

//выводим информацию об объекте инициировавшем событие на консоль

                   System.out.println(ac.getActionCommand());

//если это кнопка exit, то закрываем окно и выходим из программы

if(ac.getActionCommand().compareTo("Exit")==0) Frame.dispose();

//если это кнопка ok то проводим очистку окна

if(ac.getActionCommand().compareTo("Ok")==0) {

//очищаем окно

       Frame.getGraphics().clearRect(0, 0, Frame.getWidth(), Frame.getHeight());

//проводим перерисовку окна

       Frame.repaint();

 }}

       //обработка события движение курсора мыши при нажатой кнопке

public void mouseDragged(MouseEvent me) {

//рисуем линию на окне в соответствии с координатами мыши

       Frame.getGraphics().drawLine(x,y ,me.getX() , me.getY());

//меняет предыдущие координаты на новые

       x = me.getX();

       y = me.getY();

}

//событие возникающее когда мышка входит в область объекта

public void mouseEntered(MouseEvent me) {      }

//событие возникающее когда мышка покидает область объекта

public void mouseExited(MouseEvent me) { }

//событие возникающее при нажатии кнопки (щелчок)

public void mouseClicked(MouseEvent me) {      }

}

//класс основной программы

public class learn1 {

//статическая главная функция

   public static void main(String[] args) throws IOException {

       // TODO Auto-generated method stub

//создаем объект нашего класса позволяющий отображать окно.

       MyFrame Fr = new MyFrame();

     } }

Задание. Необходимо реализовать данную программу разобраться как она работает, добавить кнопку позволяющую стирать мышкой нарисованные линии с помощью квадрата, размер квадрата увеличивать и уменьшать также дополнительными кнопками.

Ниже приводится пример как можно рисовать с помощью заполненного прямоугольника.

//определение канвы или устройства для рисования окна

Graphics gr = Frame.getGraphics();

//создание объекта — цвет, задание цвета белый по трем цветовым компонентам — красный, зеленый, синий

Color c = new Color(255,255,255);

//установка цвета отображаемых фигур

       gr.setColor(c);

//рисование закрашенного прямоугольника

       gr.fillRect(me.getX(), me.getY(), 5, 5);

 

Ниже приведен еще один пример программы с графическим интерфейсом на Java с комментариями.


import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.awt.image.*;

import javax.swing.Timer;

//объявлениеклассанаследникаФрейм (окно), наследникаинтерфейсапрослушивателясобытий - actionlistener  

//отклассамогутнаследоваться (переходить в подкласс) методы и свойства, отинтерфейса - методы

//свойства и методымогутпереходить и видны в подклассе, если в классеобъявленыкак protected или private

class frame extends JFrame implements ActionListener 

{

//объявление в классесвойства im22, классабуферизованныхизображенийпамяти)      

           BufferedImage im22;

//объявлениеметодаклассадоступногоизосновнойпрограммы и изклассовнаследников, т.к. public          

           public void init()

           {

//установкарежимарасположениявизуальныхэлементовуправления (кнопки, выбор, списки, и т.д.)

// null - самизадаемрасположение, null - пустаяссылка, еслихотим, чтобыбылорасположениезаданоавтоматически

//выбираемодинизобъектов - gridLayout, flowLayout и т.д.

                          this.setLayout(null);

//объявляемссылкунаобъект button (кнопка), создаемобъекткнопка, создаемссылкунаобъект

                          Button b = new Button();

//задаемразмерыкнопки и еерасположение

                          b.setBounds(280, 350, 100, 20);

//задаемвизуальноеимякнопки

                          b.setLabel("Ok");

//устанавливаем в качествеобъектапрослушивателясобытий от кнопки объект текущего класса, т.е. класса frame

                          b.addActionListener(this);

//устанавливаем строку которая будет передаваться при вызове функции обработчика события от нажатия кнопки

                          b.setActionCommand("ok");

//добавляем кнопку на фрейм, this - ссылка на себя

                          this.add(b);

//создаем объект - бфуеризованное изображение, раземеров 200 на 200, и инициализируем ссылку на него

                          im22= new BufferedImage(200,200,BufferedImage.TYPE_INT_RGB);

//вызываем метод объекта im22 getGraphics возвращающий объект для работы с графическими примитивами, вызываем

//метод рисования закрашенного прямоугольника в левом верхнем углу изображения

                          im22.getGraphics().fillRect(0,0,10,10);

 

           }

//переопределяем метод actionPerformed интерфейса ActionListener своим методом 

//ac - ссылка на объект содержащий параметры события, передавается в метод

           public void actionPerformed(ActionEvent ac)

           {

                          //выводим на консоль текущую команду (какое событие сработало, возвращает имя команды, которое мы задали)

                          System.out.println(ac.getActionCommand());

                          //если нажата кнопка то , (сравнение строки комманды со строкой "ок")

                          if(ac.getActionCommand().compareTo("ok")==0)

                          {

                                          //пример как можно считать из файла изображение, можно также потом отобразить рисунок методом drawImage, комментарий

                                          //Image im = Toolkit.getDefaultToolkit().getImage("/home/Photo/1.jpg");

                                          //создаем локальную ссылку на изображение, можно использовать для рисования внутри, например, и потом отобразить на фрейме

                                          BufferedImage im1 = new BufferedImage(200,200,BufferedImage.TYPE_INT_RGB);

                                          //рисуем внутри созданного изображения im1 прямоугольники

                                          im1.getGraphics().fillRect(0,0,50,50);

                                          im1.getGraphics().fillRect(30,30,70,70);

                                          //выводим строку в позиции 40 40

                                     im1.getGraphics().drawString("1233Hello12122Hello", 40, 40);

                                          //в случайной позиции выводим два изображения 200 на 200

                                          //math.random() - возвращает случайное вещественное значение от 0 до 1

                                          // (int) позволяет преобразоваться вещественное значение в целое

                                          this.getGraphics().drawImage(im22,(int)(Math.random()*200),(int)(Math.random()*200),this);

                                          this.getGraphics().drawImage(im1,(int)(Math.random()*200),(int)(Math.random()*200),this);

                          }

                          //в случае если кнопка не была нажата, считаем, что поступило событие от таймера

                          else

                                              

                          {

                                          //выводим на консоль сообщение

                                          System.out.println("start");

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

                                          int x = (int)(Math.random()*200);

                                          int y = (int)(Math.random()*200);

                                          //рисуем прямоугольник не закрашенный

                                          this.getGraphics().drawRect(5,30,100 ,100);

                                          //рисуем строку в случайное позиции

                                          this.getGraphics().drawString("Hello",x,y );

                          }

           }

           //переопределяем стандартные метод jframe на свой метод paint - вызывается при прорисовке окна

           // graphics - класс для работы с графическими примитивами, g -передаваемая ссылка на этот объект

           public void paint(Graphics g)

           {

           //рисуем прямоугольник

                          this.getGraphics().drawRect(5,30,100 ,100);

           }

}

//объявление класса основной программы

public class lab1 {

//объявление статического метода основной программы, статический - не надо создавать сам объект, чтобы вызывать метод

//args - ссылка на массив строк командной строки

           public static void main(String[] args) {

                          System.out.println("Hello");

//создаем наш объект фрейм и инициализируем ссылку на него

                          frame fr = new frame();

//создаем объект таймер, указываем время срабатывание в милисикундах, fr - указываем объект который будет обрабатывать

//события от таймера методом actionPerformed

                          Timer timer = new Timer(500, fr);

//уставнавливаем коммаду которая будет пересылаться в actionPerformed

                          timer.setActionCommand("timer");

//запускаеем таймер

                          timer.start();

//устанавливаем размер окна 400 на 400

           fr.setSize(400, 400);

//указываем фрейму полностью завершать программу после закрытия фрейма     

           fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//вызываем нашу функцию начальной инициализации 

           fr.init();

//вызываем фрейм и он отображается и начинает работать           

           fr.setVisible(true);

           }

 

}

 

9.5. Система Swing

 

Swing API — это набор классов, который обеспечивает более мощные и гибкие компоненты, чем AWT. В дополнение к знакомым компонентам типа кнопок, флажков и меток Swing позволяет несколько интересных добавлений, включая панели со вкладками, панели с прокруткой, деревья и таблицы. Даже знакомые кампоненты, такие как кнопки, имеют в Swing больше возможностей. Например, с кнопкой можно связать как изображение, так и текстовую строку. Кроме того, изображение может изменяться, когда изменяется состояние кнопки.

 

В отличие от AWT-компонентов, Swing-компоненты не реализованы специфическим для платформы кодом. Вместо этого они написаны полностью на Java и, поэтому, платформно-независимы. Для описания таких элементов используется теримн облегченный(lightweight).

 

Число классов и интерфейсов в пакетах Swing достаточно велико, так что в текущей главе приводится краткий обзор только некоторых из них.

 

В табл. 6 показаны классы Swing-компонентов:

Таблица 6 - Классы Swing-компонентов

Класс Описание
AbstractButton Абстрактный суперкласс для кнопок Swing
ButtonGroup Инкапсулирует взаимоисключающий набор кнопок
ImageIcon Инкапсулирует значок
JApplet Swing-версия класса Applet
JButton Класс Swing-кнопок
JCheckBox Класс Swing-флажков
JComboBox Инкапсулирует combo box (комбинация раскрывающегося списка и текстового поля)
JLabel Swing-версия метки
JRadioButton Swing-версия переключателей
JScrollPane Инкапсулирует прокручиваемую панель
JTabbedPane Инкапсулирует панели с вкладками
JTable Инкапсулирует таблицы или сетки
JTextField Swing-версия текстового поля
JTree Инкапсулирует деревья

 

Относящиеся к Swing классы содеражатся в пакете javax. swing и его подпакетах, таких как javax. swing. tree. Существует много других Swing-классов и интерфейсов, которые в данной главе не рассматриваются. Здесь мы разберем лишь некоторые Swing-компоненты и проиллюстрируем их на примерах апплетов.

9.5.1 Класс Japplet

Фундаментальным для Swing является класс JApplet, который расширяет класс Applet. Апплеты, котореы ипсользуют Swing-компоненты, должны быть подклассами JApplet. JApplet богат функциональными возмодностями, который нет в Applet. Например, JApplet поддерживает различные ”панели”, такие как панель содержания (content pane), прозрачная (”стеклянная”) панель (glass pane) и корневая панель (root pane). В примерах этой главы мы не будем пользоваться большинством расширенных свойств JApplet. Однако одно различие между Applet и JApplet важно обсудить, потому что оно используется примерами апплетов текущей главы. При добавлении компонента к экземпляру JApplet не вызывайте метод add() для апплета. Вместо этого, вызовите add() для панели содержания JApplet-объекта. Панель содержания может быть получена с помощью следующего метода:

 

Container getContentPane()

Чтобы добавить компонент в панель содержания, можно использовать метод add() класса Container. Его форма:

void add(comp)

где comp — компонент, который будет добавлен к панели содержания.

 

9.5.2 Значки и метки

В Swing значки инкапсулированы классов ImageIcon, который рисует значок из изображения. Ниже показаны два его конструктора:

 

ImageIcon(String Filename)

ImegeIcon(URL url)

 

Первая форма использует изображение в файле с именем filename, а вторая форма — в ресурсе, расположенном по URL-адресу url.

Класс ImageIcon реализует интерфейс Icon, который объявляет методы, представленные в табл. 7.

 

Таблица 7 - Методы класса ImageIcon

Метод Описание
Int getIconHeight() Возвращает высоту значка в пикселях
int getIconWidth() Возвращает ширину значка в пикселях
void paintIcon(Component comp, Graphics g, int x, int y) Рисует значок в позиции (x,y) с графическим контекстом g. Дополнительная информация об операции рисования обеспечена в comp

 

Метки swing — экземпляры класса JLabel, который расширяет JComponent. Он может отображать тексты и/или значки. Вот некоторые из его конструкторо:

 

JLabel (Icon I)

Label (String s)

JLabel (String s, Icon i, int align)

 

Здесь s и i — текст и значок, используемый для метки. Параметр align определяет выравнивание и имеет значения LEFT, RIGHT или CENTER. Эти константы определены в интерфейсе SwingConstants, наряду с несколькими другими, испоьзуемыми Swing-классами.

 

Значок и текст, связанный с меткой, можно считывать и записывать следующими методами:

 

Icon getIcon ()

String getText ()

void setIcon (Icon i)

void setText (String s)

 

Здесь i и s — значок  и текст, соответственно.

 

Следующий пример показывает, как можно создать и отобразить метку, содержащую как зачок, так и строку. Апплет начинается с получения панели содержания. Затем, создается объект ImageIcon для файла frace.gif. Он используется как второй параметр конструктора JLable. Первый и последний параметры для конструктора JLable — текст метки и выравнивание. Наконей, метка добавляется к панели содержания.

 

import java.awt.*;

import javax.swing.*;

/*

<applet code=”JLableDemo” height=150>

</applet>

*/

 

public class JLableDemo extends JApplet {

    

public void init() {

    // получить панель содержания

    Container contentPane = getContentPane () ;

 

    // создать значок

    ImageIcon ii = new ImageIcon (“france.gif”) ;

 

    // создать метку

    JLabel jl = new JLabel (“France”, ii, JLabel.CENTER) ;

 

    // дабавить метку к панели сожержания

    contentPane.add(jl) ;

}

}

 

Вывод этого апплета представлен на рисунке 66.

 

 

9.5.3 Текстовые поля

 

Поле текста Swing инкапсулировано классрм JTextComponent, который расширяет JComponent. Он обеспечивает функциональные возможности, которые являются общими для текстовых Swing-компонентов. Один из его подклассов - JTextField, позволяет редактировать одну строку текста. Вот некотореы из его конструкторов:

 

JTextField ()

JTextField (int cols)

JTextField (String s, int cols)

JTextField (String s)

 

Здесь s — строка, которая будет представлена; cols — число позиций в тектовом поле.

 

Следющий пример показывает, как можно создать текстовое поле. Апплет начинается с получения его панели содеражния и затем для нее устанавливается поточное размещение в качестве менеджера компоновки. Далее, создается объект JtextField и добавляется к панели содержания.

 

import java.awt.*;

import javax.swing.*;

/*

<applet code=”JTextFieldDemo” height=50>

</applet>

*/

 

public class JTextFieldDemo extends JApplet {

JTextField jtf;

 

public void init () {

 

    // получить панель содержания

    Container contentPane = getContentPane () ;

    contentPane.setLayout (new FlowLayout ()) ;

 

    // добавить тектовое поле к панели содержания

    jtf = new JtextField(15) ;       

    contentPane.add(jtf) ;

}

}

 

Вывод этого апплета представлен на рисунке 67.

 

 

9.5.4 Кнопки

Кнопки Swing обладают свойствами, которых нельзя найти в классе Button, опреленном в AWT. Например, с кнопкой Swing можно связать изображение. Кнопки Swing — это подклассы класса AbstractButton, который расширяет JComponent. AbstractButton содержит много методов, которые позволяют управлять поведением кнопок, флажков и переключателей. Например, можно определять различные пиктограммы для отображения компонента, когда она отжат (disebled), нажат (pressed), или выбран (selected). Некоторую пиктограмму можно использовать как занчок ”наезда” (rollover), который отображается, когда курсор мыши установлен поверх этого компонента (”наехал” на него. Ниже следуют описания форматов, которые управляют этим поведением:

 

void setDisabledIcon (Icon di)

void setPressedIcon (Icon pi)

void setSelectedIcon (Icon si)

void setRolloverIcon (Icon ri)

 

Здесь di, pi, si и ri – пиктограммы, которые нужно использовать для этих различных состояний.

 

Текст, свяханный с кнопкой, можно читать и записывать с помощью следующих методов:

 

String getText ()

void setText (string s)

 

Здесь s — текст, который нужно связать с кнопкой.

 

При нажатии кнопки конкретные подклассы AbstractButton генерируют action-события. Блоки прослушивания регистрируют и отменяют регистрацию для этих событий с помощью следующих методов:

 

void addActionListener (ActionListener al)

void removeActionListener (ActionListener al)

 

Здесь al — блок прослушивания событий действия.

AbstractButton — это суперкласс для кнопок, флажков и переключателей. Рассмотрим каждый из них.

9.5.5 Класс JButton

 

Класс JButton обеспечивает функциональные возможности кнопки. JButton позволяет связать с кнопкой изображение, строку или и то и другое. Некоторые из его конструкторов:

 

JButton(Icon i)

JButton(String s)

JButton(String s. Icon I)

 

Здесь s и i — строка и изображение, используемые для кнопки.

 

Следующий пример демонстрирует четыре кнопки и текстовое поле. Каждая кнопка отображает пиктограмму, которая представляет флажок страны. Когда кнопка нажимается, в текстовом поле выводится название этой страны. Апплет начинается с получения панели содержания и установки для нее менеджера компоновки. Создаются четыре кнопки-изображения и добавляются к панели содержания. Затем апплет регистрируется, чтобы принимать генерируемые кнопками action-события. Далее, создается текстовое поле и добавляется к апплету. Наконец, обработчик action-событий отображает командную строку, которая связана с кнопкой. Для представления этой строки используется текстовое поле.

 

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

/*

<applet code="JButtonDemo" height=300>

</applet>

/*

public class JButtonDemo extends JApplet

implements ActionListener {

JTextField jtf;

 

public void init() {

 

// Получить панель содержания

Container contentPane = getContentPane();

contentPane.setLayout(new FlowLayout() ) ;

 

// Добавить кнопки в панель содержания

Imagelcon franee = new Imagelcon("franee.gif");

JButton jb = new JButton(franee);

jb.setActionCommand("France");

jb.addActionListener(this);

contentPane.add(jb);

 

Imagelcon germany = new Imagelcon("germany.gif");

jb = new JButton(germany);

jb. setActionCommand("Germany");

jb.addActionListener(this);

content Pane.add(j b);

 

Imagelcon italy = new Imagelcon("italy.gif");

jb = new Jbutton(italy);

 

jb.setActionCommand("Italy");

jb.addActionListener(this);

contentPane.add(jb);

 

Imagelcon japan = new Imagelcon("japan.gif");

jb = new JButton(japan);

jb.setActionCommand("Japan");

jb.addActionListener(this);

cont ent Pane.add(j b);

 

// Добавить текстовое поле в панель содержания

jtf = new JTextField{15);

content Pane.add(jtf);

}

public void actionPerformed(ActionEvent ae) {

jtf .setText (ae.getActionCommand () ) ;

}

}

 

Вывод этого апплета представлен на рис. 68.

 

 

9.5.6 Флажки

Класс JCheckBox, который обеспечивает функциональные возможности флажка, является конкретной реализацией класса AbstractButton. Некоторые из его конструкторов:

 

JCheckBox(Icon i)

JCheckBox(Icon i, boolean state)

JCheckBox(String s)

JCheckBox(String s, boolean state)

JCheckBox(String s, Icon i)

JCheckBox(String s, Icon z, boolean state)

 

Здесь используются следующие параметры: i — изображение для кнопки, s — текст. Если state — true, флажок первоначально выбран. В противном случае — нет.

Состояние флажка может быть изменено с помощью следующего метода:

 

void (boolean state)

 

Здесь параметр state должен быть true, если нужно, чтобы флажок был установлен (помечен).

 

Следующий пример показывает, как можно создать апплет, отображающий четыре флажка и текстовое поле. Когда флажок помечается, его подпись отображается в текстовом поле. Сначала получена панель содержания для объекта JAppiet, и в качестве ее менеджера компоновки устанавливается поточное размещение. Затем к панели содержания добавлены четыре флажка, и назначены пиктограммы для нормального (без метки), rollover- (с "на­ездом" указателя мыши) и выбранного (с меткой) состояний. Далее апплет регистрируется, чтобы принимать item-события. Наконец, в панель содержания добавляется текстовое поле.

 

Когда флажок помечается (выбирается) или сбрасывается (отменяется выбор), генерируется item-событие. Оно обрабатывается методом itemStateChanged (). Внутри itemStateChanged () метод getltem () получает объект JCheckBox, который генерирует событие. Метод getText () получает подпись для этого флажка и использует его для вывода внутри текстового поля.

 

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

/*

 

<applet code="JCheckBoxDemo" height=50>

</applet>

*/

 

public class JCheckBoxDemo extends JAppiet

implements ItemListener {

JTextField jtf;

 

public void init() {

 

// получить панель содержания

Container contentPane = getContentPane ();

contentPane.setLayout(new FlowLayout () );

 

// создать пиктограммы

Imagelcon normal = new Imagelcon("normal.gif");

Imagelcon rollover = new ImageIconCrollover.gif");

Imagelcon selected = new Imagelcon("selected.gif");

 

// добавить флажки в панель содержания

JCheckBox cb = new JCheckBox("C", normal);

cb. setRolloverlcon(rollover);

cb. setSelectedlcon(selected);

cb.addltemListener(this);

contentPane.add(cb);

 

cb = new JCheckBox("C++", normal);

cb.setRolloverlcon(rollover);

cb.setSelectedlcon(selected) ;

cb.addltemListener(this);

contentPane.add(cb);

 

cb = new JCheckBox("Java", normal);

cb.setRolloverlcon(rollover);

cb.setSelectedlcon(selected);

cb.addltemListener(this);

contentPane.add(cb);

 

cb = new JCheckBox("Perl", normal);

cb.setRolloverlcon(rollover);

cb.setSelectedlcontselected) ;

cb.addltemListener(this);

contentPane.add(cb) ;

 

// добавить текстовое поле в панель содержания

jtf = new JTextField(15);

contentPane.add(jtf);

}

 

public void itemStateChangeddtemEvent ie) {

JCheckBox cb = (JcheckBox)ie.getltem ();

jtf.setText(cb.getText () ) ;

}

}

 

Вывод этого апплета представлен на рис. 69.

9.5.7 Переключатели

Переключатели поддерживаются классом JRadioButton, который является конкретной реализацией класса AbstractButton. Некоторые из его конструкторов:

 

JRadioButton(Icon i)

JRadioButton(Icon z, boolean state)

JRadioButton(String s)

JRadioButton(String s, boolean state)

JRadioButton (String s, Icon i.)

JRadioButton(String s, Icon f, boolean state)

 

где используются параметры: i — изображение для кнопки; s — текст. Если statetrue, кнопка первоначально выбрана. Иначе — нет.

 

Переключатели должны быть объединены в группу, где в каждый момент может быть выбран только один элемент. Например, если пользователь щелкает по переключателю, который находится в группе, любой предварительно нажатый переключатель в этой группе автоматически сбрасывается. Чтобы создать группу кнопок, строится экземпляр класса ButtonGroup. Для этой цели вызывается его умалчиваемый конструктор. Элементы к группе кнопок добавляются с помощью следующего метода:

 

void add(AbstractButton ab)

 

Здесь ad — ссылка на кнопку, которая будет добавлена к группе.

 

Следующий пример иллюстрирует, как можно использовать переключатели. Создаются три переключателя и одно текстовое поле. Когда выбирается переключатель, его подпись отображается в текстовом поле. Сначала для объекта JAppiet создается панель содержания, и в качестве ее менеджера компоновки устанавливается поточное размещение. Далее, в панель содержания добавляются три радиокнопки. Затем определяется группа кнопок, в которую добавляются кнопки. Наконец, к панели содержания добавляется текстовое поле.

 

Выбор переключателя генерирует action-событие, которое обрабатывается

методом actionPerf ormed (). Метод getActionCommand () получает подпись,

которая связывается с переключателем и использует ее для вывода в текстовое поле.

 

import java.awt.*;

import j ava.awt.event.*;

import javax.swing.*;

/*

 

<applet code="JRadioButtonDemo" height=50>

</applet>

*/

 

public class JRadioButtonDemo extends JAppiet

implements ActionListener {

JTextField tf;

 

public void initO {

 

// получить панель содержания

Container contentPane = getContentPane();

contentPane.setLayout(new FlowLayout());

 

// добавить переключатели в панель содержания

JRadioButton Ы = new JRadioButton ("А") ;

bl.addActionListener(this) ; contentPane.add(bl);

 

 

JRadioButton Ь2 = new JRadioButton("В") ;

b2.addActionListener(this);

contentPane.add(b2);

 

JRadioButton b3 = new JRadioButton("C");

b3.addActionListener(this);

contentPane.add(b3);

 

// определить группу кнопок

ButtonGroup bg = new ButtonGroup();

bg.add(bl);

bg.add(b2) ;

bg.add(b3);

 

// создать текстовое поле и добавить его

//в панель содержания

tf = new JTextField(5);

contentPane.add(tf);

}

public void actionPerformed(ActionEvent ae) {

tf. setText (ae. GetActionCoiranand () ) ;

}

}

 

Вывод этого апплета представлен на рис. 70.

 

9.5.8 Поля со списком

Swing обеспечивает комбинированное поле (combo box) — комбинацию тек­стового поля и раскрывающегося списка, через класс JComboBox, который расширяет JComponent. Комбинированное поле обычно отображает один вход (элемент) списка. Однако оно может также отображать и раскрывающийся список, который дает возможность пользователю выбирать различные входы. Вы также можете ввести (с клавиатуры) свое значение элемента списка в текстовое поле. Ниже показаны два конструктора JcomboBox:

 

JComboBox <)

JComboBox(Vector v)

 

Здесь v — вектор, который инициализирует комбинированное поле.

 

Элементы добавляются к списку выборов с помощью метода additem (), чья сигнатура имеет вид:

 

void addltem(Object dbj)

 

Здесь obj — объект, который будет добавлен к комбинированному полю.

 

Следующий пример содержит комбинированное поле и метку. На метке отображается пиктофамма. Комбинированное поле содержит элементы "France", "Germany", "Italy" и "Japan". Когда выбирается название страны, метка обновляется так, чтобы отобразить флажок этой страны.

 

import java.awt.*;

impo rt j ava.awt.event.*;

import javax.swing.*;

/*

 

<applet code="JComboBoxDemo" height=100>

</applet>

*/

 

public class JComboBoxDemo extends JApplet

implements ItemListener {

JLabel jl;

Imagelcon france, germany, italy, japan;

 

public void init() {

 

// получить панель содержания

Container contentPane = getContentPane();

contentPane.setLayout(new FlowLayout());

 

// создать комбинированный список

//и добавить его в панель

JComboBox j с = new JComboBox();

jс.addltem("France");

jс.addltem("Germany");

jс.addltem("Italy");

jc.addltem("Japan");

jc.addltemListener(this);

content Pane.add(jс);

 

// создать метку

jl = new JLabel(new Imagelcon("franee.gif"));

content Pane.add(j1);

}

 

public void itemStateChangedfltemEvent ie) {

String s = (String)ie.getltemO;

jl.setlcontnew ImageIcon(s + ".gif"));

}

}

 

Вывод этого апплета представлен на рис. 71.

 

9.5.9 Панели со вкладками

Панель со вкладками (tabbed pane) — компонент, который появляется как группа папок в САВ-файле (file cabinet). Каждая папка имеет заголовок. Когда пользователь выбирает папку, ее содержимое становится видимым. Только одна из папок может быть выбрана одновременно. Панель со вкладками обычно используется для установки параметров конфигурации.

 

Панель со вкладками инкапсулирована классом JTabbedPane, который расширяет JComponent. Мы будем использовать его умолчиваемый конструктор. Вкладки определяются с помощью следующего метода:

 

void addTab(String str, Component camp)

 

Здесь str — заголовок вкладки; comp — компонент, который должен быть добавлен во вкладку. Как правило, добавляются объекты класса JPanel или его подклассов.

 

Общая процедура использования в апплете панели со вкладками:

 

Создать объект JtabbedPane.

Вызвать addTab () для добавления вкладки в панель. (Аргументы этого метода определяют заголовок вкладки и компонента, который она содержит.)

Повторить шаг 2 для каждой вкладки.

Добавить панель со вкладками в панель содержания апплета.

 

Следующий пример иллюстрирует, как можно создать панель со вкладками. Первая вкладка названа Cities (Города) и содержит четыре кнопки с названиями городов. Вторая вкладка названа Colors (Цвета) и содержит три флажка, отображающих название цвета. Третья вкладка названа Flavors (аромат, привкус) и содержит одно комбинированное поле. Оно дает возможность пользователю выбрать одну из трех разновидностей аромата.

 

import javax.swing.*;

/*

 

<applet code="JTabbedPaneDemo" height=100>

</applet>

*/

 

public class JTabbedPaneDemo extends JApplet {

public void init() {

 

JTabbedPane jtp = new JTabbedPane();

jtp.addTab("Cities", new CitiesPanel());

jtp.addTab("Colors", new ColorsPanel());

jtp.addTab("Flavors", new FlavorsPanel());

getContentPane () . add(jtp);

}

}

class CitiesPanel extends JPanel {

public CitiesPanel() {

JButton bl = new JButton("New York");

add(bl);

JButton b2 = new JButton("London");

add(b2);

JButton b3 = new JButton("Hong Kong");

add(b3);

JButton b4 = new JButton("Tokyo");

add(b4);

}

}

class ColorsPanel extends JPanel {

public ColorsPanel() {

JCheckBox cbl = new JCheckBox("Red");

add(cbl);

JCheckBox cb2 = new JCheckBox("Green");

add(cb2);

JCheckBox cb3 = new JCheckBox("Blue");

add(cb3);

}

}

class FlavorsPanel extends JPanel {

public FlavorsPanel() {

JComboBox j cb = new JComboBox();

jcb.addltem("Vanilla");

jcb.addltemC'Chocolate") ;

jcb.addltemC'Strawberry") ;

add(jcb) ;

}

}

 

Вывод этого апплета показан на рис. 72 — 74.

 

 

 

 

 

9.5.10 Панели прокрутки

Панель прокрутки (scroll pane) — компонент, который представляет прямоугольную область, в которой компонент может быть просмотрен. В случае необходимости в панель можно добавить горизонтальную и/или вертикаль­ную полосы прокрутки. Панели прокрутки реализованы в Swing классом JScrollPane, который расширяет JComponent. Вот некоторые из его конструкторов:

 

JScrollPane(Component camp)

JScroiiPane(int vsb, int hsb)

JScrollPane(Component camp, int vsb, int hsb)

 

Здесь comp — компонент, который будет добавлен в панель прокрутки; vsb и hsbint-константы, которые определяются; когда нужно показывать вертикальные и горизонтальные полосы прокрутки в панели прокрутки. Эти константы определены интерфейсом ScrollPaneConstants. Некоторые примеры этих констант описаны в табл. 8.

 

Таблица 8 - Константы интерфейса ScrollPaneConstants

Класс Описание
horizontal_scrollbar_always Всегда обеспечивает горизонтальную полосу прокрутки
horizontal_scrollbar_as_needed Обеспечивает горизонтальную полосу прокрутки, если необходимо
vertical_scrollbar_always Всегда обеспечивает вертикальную полосу прокрутки
vertical_scrollbar_AS_needed Обеспечивает вертикальную полосу прокрутки, если необходимо

 

Для алгоритма создания апплета с панелью прокрутки необходимо:

 

1. Создать Объект JComponent.

2. Создать объект JScrollPane. (Аргументы конструктора определяют компонент и установку вертикальных и горизонтальных полос прокрутки.)

3. Добавить панель прокрутки в панель содержания апплета.

 

Следующий пример иллюстрирует панель прокрутки. Сначала получена панель содержания объекта jApplet, и в качестве ее менеджера компоновки назначено граничное размещение. Потом создан объект JPanel, и к нему добавлены четыре сотни кнопок, размещенных в двадцати столбцах. Затем создается панель прокрутки и добавляется в панель содержания. Это приводит к появлению вертикальной и горизонтальной полос прокрутки, которые вы можете использовать для листания набора кнопок в этом представлении.

 

import java.awt.*;

import javax.swing.*;

/*

<applet code="JScrollPaneDemo" height=250>

</applet>

*/

public class JScrollPaneDemo extends JAppiet {

 

public void init () {

 

// получить панель содержания

Container contentPane = getContentPane();

contentPane.setLayout(new BorderLayout());

 

// добавить в панель 400 кнопок .

JPanel jp = new JPanelO;

jp.setLayout(new GridLayout(20, 20)};

int b = 0;

 

for(int i = 0; i < 20; i++) {

 for(int j = 0; j < 20; j++) {

jp.addjnew JButton("Button " + b));

++b;

}

}

 

// создать панель прокрутки с полосами прокрутки

int v = ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;

int h = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED; J

ScrollPane jsp = new JScrollPane(jp, v, h);

 

// добавить панель прокрутки в центр панели содержания

content Pane, add (jsp, Border-Layout .CENTER) ;

}

}

Вывод этого апплета представлен на рис. 75.

 

 

9.5.11 Деревья

Дерево (tree) — компонент, который представляет иерархический вид данных. Пользователь имеет возможность развернуть или свернуть индивидуальные поддеревья в этом показе. Деревья реализованы в Swing классом JTree, который расширяет JComponent. Вот некоторые из его конструкторов:

 

JTree (Hashtable ht)

JTree(Object abj[ ])

JTree(TreeNode tn)

JTree (Vector v)

 

Первая форма создает дерево, в котором дочерней вершиной является каждый элемент хэш-таблицы ht. Во второй форме дочерней вершиной является каждый элемент массива obj. В третьей форме параметр tn указывает корневой узел дерева. Наконец, последняя форма использует элементы векторного параметра v как дочерние вершины.

 

Когда узел разворачивается или сворачивается, объект JTree генерирует события. Методы AddTreeExpansionListener() и removeTreeExpansionListener() позволяют блокам прослушивания регистрировать или отменять регистра­цию для этих уведомлений. Сигнатуры этих методов:

 

void addTreeExpansionListener(TreeExpansionListener tel)

void removeTreeExpansionListener (TreeExpansionListener tel)

 

Здесь tel — объект блока прослушивания.

 

Чтобы транслировать щелчок мыши на определенной точке дерева в ветвь (путь) дерева используется метод GetPathForLocation (). Его сигнатура:

 

TreePath getPathForLocation(int х, int у)

Здесь х и у — координаты указателя мыши, где выполнен щелчок. Возвращаемое значение — объект TreePath, который инкапсулирует информацию относительно узла дерева, выбранного пользователем.

 

Класс TreePath инкапсулирует информацию о пути к специфическому узлу дерева. Он обеспечивает несколько конструкторов и методов. В этой книге используется только метод toString (). Он возвращает строковый эквивалент пути дерева.

 

Интерфейс TreeNode объявляет методы, которые получают информацию относительно узла дерева. Например, возможно получить ссылку к родительскому узлу или перечислению дочерних узлов. Интерфейс MutabieTreeNode расширяет TreeNode. Он объявляет методы, которые могут вставлять и уда­лять дочерние узлы или изменять родительский узел.

 

Класс DefaultMutableTreeNode реализует интерфейс MutabieTreeNode. Он

представляет узел в дереве. Ниже показан один из его конструкторов:

 

DefaultMutableTreeNode(Object obj)

 

Здесь obj — объект, который будет включен в этот узел дерева. Новый узел дерева не имеет родительского или дочернего узла.

 

Чтобы создавать иерархию узлов дерева, можно использовать метод add () класса DefaultMutableTreeNode. Его сигнатура:

 

void add(MutabieTreeNode child)

 

Здесь child — изменяемый узел дерева, который должен быть добавлен как дочерний к текущему узлу.

 

События расширения дерева (tree expansion events) описаны классом

TreeExpansionEvent в пакете javax. swing. event. Метод getPath () этого класса возвращает объект TreePath, который описывает путь к измененному узлу. Его сигнатура:

 

TreePath getPath ()

 

Интерфейс TreeExpansionListener обеспечивает следующие два метода:

 

void treeCollapsed(TreeExpansionEvent tee)

void (TreeExpansionEvent tee)

 

Здесь tee — событие расширения дерева. Первый метод вызывается, когда поддерево сворачивается, а второй — когда поддерево становится видимым (разворачивается).

 

Шаги алгоритма создания апплета с деревом таковы:

1. Создать Объект Jtree.

2. Создать объект JScrollPane. (Аргументы конструктора определяют дерево и установку вертикальных и горизонтальных полос прокрутки.)

3. Добавить дерево к панели прокрутки.

4. Добавить панель прокрутки к панели содержания апплета.

Следующий пример иллюстрирует, как можно создавать дерево и распознавать щелчки мыши на нем.

 

import j ava.awt.*;

 import j ava.awt.event.*;

import j avax.swing.*;

import javax.swing.tree.*;

/*

<applet code="JTreeEvents" height=200>

</applet>

*/

 

public class JTreeEvents extends JApplet {

JTree tree;

JTextField jtf;

 

public void init () {

 

// получить панель содержания

Container contentPane = getContentPane();

 

// установить менеджер компоновки

contentPane.setLayout(new BorderLayout());

 

// создать корневой узел дерева

DefaultMutableTreeNode top = new DefaultMutableTreeNode("Options");

 

II создать поддерево "А"

DefaultMutableTreeNode а = new DefaultMutableTreeNode("A");

top.add(a);

DefaultMutableTreeNode al = new DefaultMutableTreeNode ("Al");

a.add(al) ;

DefaultMutableTreeNode a2 = new DefaultMutableTreeNode ("A2");

a.add(a2);

 

II создать поддерево "В"

DefaultMutableTreeNode b = new DefaultMutableTreeNode (“B”);

top.add(b);

DefaultMutableTreeNode bl = new DefaultMutableTreeNode (“B1”);

b.add(b1);

DefaultMutableTreeNode b2 = new DefaultMutableTreeNode (“B2”);

b.add(b2) ;

DefaultMutableTreeNode b3 = new DefaultMutableTreeNode (“B3”);

b.add(b3);

 

// создать дерево

tree = new Jtree(top);

 

// добавить дерево в панель прокрутки

int v = ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;

int h = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED;

JScrollPane jsp = new JScrollPane(tree, v, h);

 

II добавить панель прокрутки в панель содержания

contentPane.add(jsp, BorderLayout.CENTER);

 

// добавить текстовое поле к апплету

jtf = new JTextFieldC", 20);

contentPane.add(jtf, BorderLayout.SOUTH);

 

// анонимный внутренний класс для обработки щелчков мыши

tree.addMouseListener(new MouseAdapter() {

public void mouseClicked(MouseEvent me) {

doMouseClicked(me);

}

}};

}

 

void doMouseClicked(MouseEvent me) {

TreePath tp = tree.getPathForLocation(me.getX(), me.getYO);

if(tp != null)

jtf.setText(tp.toString () );

else

jtf.setText ('");

}

}

 

Метод init () получает панель содержания для апплета. Затем создается объект DefaultMutabieTreeNode, маркированный как Options (Параметры). Это — корневой узел иерархии дерева. Далее создаются дополнительные узлы дерева, и вызывается метод add (), чтобы подключить эти узлы к дереву. В качестве аргумента конструктора JTree используется ссылка к корневому узлу дерева. Затем дерево пересылается как аргумент конструктору JSscrollPane. Потом эта панель прокрутки добавляется к апплету. После чего создается и добавляется к апплету текстовое поле. В нем представлена информация от­носительно событий щелчка мыши. Чтобы принимать события мыши от дерева, вызывается метод addMouseListener () объекта JTree. Аргумент этого метода — анонимный внутренний класс, который расширяет MouseAdapter и переопределяет метод mouseClicked ().

 

Метод doMouseClicked () обрабатывает щелчки мыши. Он вызывает метод getPathForLocation (), чтобы транслировать координаты щелчка мыши в объект TreePath. Если кнопка мыши нажата в точке, которая не вызывает выбор узла, возвращаемое значение этого метода — null. В противном случае, путь дерева может быть конвертирован в строку и представлен в текстовом поле.

 

Вывод этого апплета представлен на рис. 76.

 

Строка, представленная в текстовом поле, описывает путь от вершины дере­ва к выбранному узлу.

 

9.5.12 Таблицы

Таблица (table) — компонент, который отображает строки и столбцы данных. Для изменения размеров столбцов можно перемещать курсором их границы. Можно также перетаскивать столбцы в новую позицию. Таблицы реализованы классом JTable, который расширяет JComponent. Вот один из его конструкторов:

 

JTable(Object data [ ][ ], Object colHaads [ ])

 

Здесь data — двухмерный массив информации, которая будет представлена в форме таблицы; colHeads — одномерный массив с заголовками столбца.

 

Шаги алгоритма для создания таблицы в апплете таковы:

1. Создать объект Jtable.

2. Создать объект JScroiiPane. (Аргументы конструктора определяют таб­лицу и установку для вертикальных и горизонтальных полос прокрутки.)

3. Добавить таблицу в панель прокрутки.

4. Добавить панель прокрутки в панель содержания апплета.


Следующий пример показывает, как можно создать и использовать таблицу.

 

import j ava.awt.*;

import javax.swing.*;

/*

<applet code="JTableDemo" height=200>

</applet>

*/

 

public class JTableDemo extends JApplet {

public void init() {

// получить панель содержания

Container contentPane = getContentPane();

 

// установить менеджер компоновки c

ontentPane.setLayout(new BorderLayout());

 

// инициализировать заголовки столбцов

final String[ ] colHeads = { "Name", "Phone", "Fax" };

 

// инициализировать данные

final Object [ ] [ ] data = {

{ “Gail”, “4567”, “8675” },

{ “Ken”, “7566”, “5555” },

{ “Viviane”, “5634”, “5887” },

{ “Melanie”, “7345”, “9222” },

{ “Anne”, “1237”, “3333” },

{ “John”, “5656”, “3144” },

{ “Matt”, “5672”, “2176” },

{ “Claire”, “6741”, “4244” },

{ “Erwin”, “9023”, “5159” },

{ “Ellen”, “1134”, “5332” },

{ “Jennifer”, “5689”, “1212” },

{ “Ed”, “9030”, “1313” },

{ “Helen”, “6751”, “1415” }

};

// создать таблицу

JTable table = new JTable(data, coileads);

 

II добавить в панель прокрутки полосы прокрутки

int V = ScrollPaneConstants.VERTICAL_SCROLLBAR_AS__NEEDED;

int h = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED;

JScrollPane jsp = new JScrollPane(table, v, h);

 

// добавить панель прокрутки в панель содержания

contentPane.add(jsp, BorderLayout.CENTER);

}

}

 

Здесь сначала считывается (с помощью метода getContentPane ()) панель содержания объекта JApplet и в качестве ее менеджера компоновки назначается граничное размещение. Таблица содержит три столбца. Для заголовков столбцов используется одномерный строчный массив (colHeads), а для ячеек таблицы — двухмерный строчный массив (data). Не трудно видеть, что каждый элемент в этом массиве является, в свою очередь, массивом из трех строк. Эти массивы передаются конструктору JTable. Затем в таблицу добавляется полоса прокрутки, и панель прокрутки добавляется в панель содержания.

 

Вывод этого апплета представлен на рис. 77.

 

9.5.13 Использование GridBagLayout

Размещение элементов управления на форме может быть как заданным пользователем с помощью указания соответствующих координат и размеров, а также автоматическим подчиняющихся определенному принципу расположения объектов, например, слева-направо, сверху-вниз, мозаикой и так далее, все эти способы могут быть установлены у с помощью объекта contentPane и его свойства layout. Ниже приведена программа где осуществляется работа с layout, где расположение объектов осуществляется в таблице, ячейки таблицы, их структура может быть задана программистом, таким образом все элементы будут расположены в необходимой позиции заданной таблицы. Изучите текст программы, комментарии к ней, затем реализуйте ее, попробуйте добавить свой элемент управления и изменить структуру таблицы. После чего сделайте задание следующее после текста программы.

 

//подключение модуля awt

import java.awt.*;

//подключение модуля swing

import javax.swing.*;

//подключение модуля swingborder

import javax.swing.border.*;

//объявление класса Grid с основной программой

public class Grid {

//основная программа, args — аргументы командной строки

       public static void main(String[] args) {

                   //создание стандартного фрейма, это может быть и ваш собственный класс наследник

                   JFrame frame = new JFrame("name");

                   //установление размера фрейма

                   frame.setBounds(0, 0, 500, 500);

                   //объявление ссылки на класс контейнер

                   Container cp;

                   //инициализация ссылки на контейнер фрейма

                   cp=frame.getContentPane();

       //создание слоя управляющего расположением объектов в таблице

   GridBagLayout grid = new GridBagLayout();

 

//установка данного слоя

  cp.setLayout(grid);

//создание ограничителей таблицы

   GridBagConstraints c = new GridBagConstraints();

       

//создание нескольких объектов меток и кнопок

   JLabel j1 = new JLabel("Metka1"); 

   JLabel j2 = new JLabel("Metka2");

   JLabel j3 = new JLabel("Metka3");

   JLabel j4 = new JLabel("Metka4");

   JButton b1 = new JButton("button1");

   JButton b2 = new JButton("button2");

       

//создание границ черного цвета

   LineBorder brd = new LineBorder(Color.black);

 

    //установка границ меток

   j1.setBorder(brd);

   j2.setBorder(brd);

   j3.setBorder(brd);

   j4.setBorder(brd);

    // задание ячейки таблицы начиная с позиции 0,0, шириной 2 ячейки и высотой 1 ячейка

   c.gridx =0 ;

   c.gridy =0 ;

   c.gridwidth = 2;

   c.gridheight = 1;

       

   c.insets = new Insets(-1,-1,0,0);

   // 

добавление ячейки к таблице и помещение туда метки 1

   cp.add(j1,c);

// задание ячейки таблицы начиная с позиции 0,1, шириной 1 ячейка и высотой 1 ячейки помещение туда метки 2

   c.gridx =0 ;

   c.gridy =1 ;

   c.gridwidth = 1;

   c.gridheight = 1;

  cp.add(j2,c);

 

 // задание ячейки таблицы начиная с позиции 1,1, шириной 1 ячейки и высотой 1 ячейки помещение туда метки 3

   c.gridx =1 ;

   c.gridy =1 ;

   c.gridwidth = 1;

   c.gridheight = 1;

   cp.add(j3,c);

 // задание ячейки таблицы начиная с позиции 0,2, шириной 1 ячейки и высотой 1 ячейки помещение туда метки 4, то-есть объект будет расположен в третьей строке и в первом столбце

   c.gridx =0 ;

   c.gridy =2 ;

   c.gridwidth = 1;

   c.gridheight = 1;

   cp.add(j4,c);

 

 // задание ячейки таблицы начиная с позиции 1,2, шириной ячейки 2 и высотой ячейки 2 и помещение туда кнопки, то-есть объект будет расположен в третьей строке, начиная со второго столбца и занимать две ячейки по высоте и по ширине

   c.gridx =1 ;

   c.gridy = 2 ;

   c.gridwidth = 2;

   c.gridheight = 2;

   cp.add(b1,c);

 

//Расположение дале в таблице меток по строкам

  JLabel[] j6 = new JLabel[7];

   for(int i=0;i<7;i++)

                   {

      j6[i] = new JLabel(data[i][0]);

                     c.gridx =0 ;

       c.gridy = i+3 ;

              c.gridwidth = 1;

       c.gridheight = 1;

          j6[i].setBorder(brd);

           cp.add(j6[i],c);

         }

   frame.setVisible(true);

}

}

 

Таким образом задавая координаты ячеек можно располагать элементы управления в ячейках таблицы или отводить место под объект, задавая число ячеек, которые он будет занимать.

 

Создать следующий проект.

Дана таблица.

Дисциплина:

Математическое моделирование

Фио трех человек с максимальным баллом в среднем по мат. Моделированию

Студенты, количество

2

Кнопка добавить студента

ФИО

Номер. Студ Билета

Оценка

Иванов 101; Петров 102

Семестр1 Семестр2 Средняя
Иванов

101

5 4 4,5
Петров

102

4 4 4
 

 

     

Максимальный балл

5 4 4,5

Средний для всех балл

4,5 4 4,25
             

 

Необходимо реализовать программу, которая позволяет вводить и рассчитывать данные по студентам в соответствии с таблицей, сделать возможным добавление студентов, поля семестровая оценка — входные данные, средняя, максимальный балл — расчетные. Фио трех человек также находятся и выводятся в соответствующий объект. Количество студентов — меняется путем нажатия кнопки добавить студента. Использовать gridbaglayout.

 

 

10 Приложения — Помощь при выполнении первой и второй лабораторных работ, изучение Writer и Calc. 


10.1. LibreOffice

LibreOffice Writer это текстовый процессор, предназначенный для создания, просмотра и редактирования текстовых документов, с возможностью применения простейших форм алгоритмов в виде макросов. LibreOffice это свободный независимый офисный пакет с открытым исходным кодом, разрабатываемый The Document Foundation как ответвление от разработки OpenOffice.org, в который входит и текстовый процессор Writer. Довольно подробную информацию о пакете LibreOffice можно найти на сайте http://help.libreoffice.org/Writer/Welcome_to_the_Writer_Help/ru.

Любой текстовый процессор представляет собой прикладную компьютерную программу, предназначенную для производства, включая операции набора, редактирования, форматирования, печати, любого вида печатной информации. Иногда текстовый процессор называют текстовым редактором второго рода.

Текстовыми процессорами в 1970-е — 1980-е годы называли предназначенные для набора и печати текстов машины индивидуального и офисного использования, состоящие из клавиатуры, встроенного компьютера для простейшего редактирования текста, а также электрического печатного устройства. Позднее наименование «текстовый процессор» стало использоваться для компьютерных программ, предназначенных для аналогичного использования. Текстовые процессоры, в отличие от текстовых редакторов, имеют больше возможностей для форматирования текста, внедрения в него графики, формул, таблиц и других объектов. Поэтому они могут быть использованы не только для набора текстов, но и для создания различного рода документов, в том числе официальных. Программы для работы с текстами также можно разделить на простые текстовые процессоры, мощные текстовые процессоры и издательские системы.

10.1.1 Запуск LibreOffice Writer

Прежде всего нужно запустить программу LibreOffice Writer.

В зависимости от используемой операционной системы, например, Linux или Windows нужно действовать по следующему алгоритму, во многом он одинаков для указанных операционных систем:

В меню Пуск(Windows) выбрать Программы+LibreOffice (рисунок 1) и запустить WordProcessor LibreOffice Writer или Office LibreOffice (рисунок 2). При выборе LibreOffice откроется окно создания документов LibreOffice (рисунок 3), среди которых документы Writer, в указанном окне документы Writer отмечены как Text Document. При выборе WordProcessor LibreOffice Writer сразу же откроется окно с пустым бланком документа

Рисунок 1.

Рисунок 2.

Рисунок 3.

10.1.2 Ввод текста

Основной составляющей документов LibreOffice Writer: писем, записок, плакатов, деловых бумаг — обычно является текст. Введите какой-нибудь текст в новый документ Writer, который открывается при запуске программы.

1 . Введите какое-нибудь предложение.

2. Нажмите клавишу Enter.

Чтобы переключиться с русской раскладки клавиатуры на английскую, нужно нажать клавиши Ctrl+Shift или Alt+Shift — в зависимости от настроек Windows или Linux. Индикатор клавиатуры отображается в панели задач рядом с часами. Вы можете переключить раскладку также с помощью мыши. Для этого щелкните левой кнопкой мыши на индикаторе и выберите нужную раскладку в появившемся меню. Чтобы удалить символ слева от курсора (мерцающая вертикальная черта), нажмите клавишу Backspace. Чтобы удалить символ справа от курсора, нажмите клавишу Delete.

10.1.3 Правка текста

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

По умолчанию Writer работает в режиме вставки. Это значит, что при вводе весь текст справа от курсора сдвигается, чтобы освободить место для нового текста.

1.Дважды щелкните на каком-нибудь слове.

2. Нажмите клавишу Delete.

Существующий текст сдвинется обратно и заполнит освободившееся место.

10.1.4 Форматирование текста

1. Щелкните левой кнопкой мыши на поле страницы.

2. Щелкните на пункте Символы в строке меню.

3. Выберите вкладку Шрифт (Character).

4. В списке Family (Семейство шрифтов) выберите шрифт с названием Liberation Serif.

5. В списке Начертание (Style) выберите пункт Полужирный (Bold).

6. Прокрутите список Размер (Size) с помощью полосы прокрутки и выберите значение 24.

7. В области Эффекты (Font Effects) установите флажок С тенью (Shadow).

8. Щелкните на кнопке ОК.

9. Щелкните в любом месте документа, чтобы снять выделение с текста.

Рисунок 4. Текст до форматирования

Рисунок 5. Текст после форматирования

Кроме того, можно уплотнить шрифт, это делается, например, чтобы текст занимал определенное число страниц или определенный объем, если вдруг полученный объем больше чем требуемый (Вкладка Положение и Интервал, выбрать разреженный или уплотненный (Scale Width)).

Ту же страницу параметров символов можно выбрать в меню Формат.

Кроме того, можно отдельно форматировать параметры абзаца и страницы, их также можно выбрать в меню Формат. Параметры страницы и абзаца рассматриваются далее.

10.1.5 Сохранение документа

Документы обязательно нужно сохранять. Частота сохранения документа соответствует времени, которое вам не жалко тратить на восстановление данных, потерянных в случае сбоя компьютера.

1. Выберите в строке меню пункт Файл (File).

2. Выберите команду Сохранить (Save). На экране появится окно диалога Сохранение документа (Save As), показанное на рисунке 6.

Рисунок 6. Сохранение документа.

3. Writer автоматически предлагает имя для документа (обычно Untitled 1 или Без имени 1).

Рисунок 7. Изменение имени документа

4. В текстовом поле Имя файла (name) введите имя файла.

Вводимый вами текст заменит текст, выделенный в поле Имя файла (name).

Рисунок 8. Изменение имени документа при сохранении

5. Кроме того, для удаления текста здесь также можно использовать клавиши Backspace и Delete.

6. Раскройте список Папка (Save in) в верхней части окна диалога.

7. Выберите любой ваш диск или папку.

Рисунок 9. Выбор папки при сохранении документа.

Предположим, что вы решили добавить еще пару слов в свой документ. Как снова его открыть?

1. Выберите в строке меню пункт Файл (File).

2. Выберите команду Открыть (Open).

Рисунок 10 . Открытие файла

3. Выберите диск. Раскройте список Папок и файлов.

4. Щелкните на значке своей папки.

5. Выделите значок своего документа

6. Щелкните на кнопке Открыть (Open).

Рисунок 11. Выбор документа в папке

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

Вывод панели инструментов на экран Word содержит множество панелей инструментов, которые обычно объединяют кнопки, относящиеся к какой-нибудь большой теме, например, Таблицы и границы (Tables and Borders), Рисование (Drawing), Базы данных (Database) и Веб-узел (Web).

Их можно выводить на экран и убирать с него по мере необходимости.

1. Щелкните правой кнопкой мыши на любой панели инструментов или строке меню и выберете Customize Toolbar. На экране появится выпадающий список всех панелей инструментов и текущая панель на которой вы открыли меню, причем флажками будут помечены те инструменты, которые в данный момент отображаются на экране.

Рисунок 12. Панель инструментов

2. Панели Стандартная (Standard) и Форматирование (Formatting) занимают одну строку. Обычно Панель Рисование (Drawing) закреплена в нижней части экрана, Панель Таблицы и границы (Tables and Borders) «плавает» на экране.

Рисунок 13. Стандартная панель

Рисунок 14. Панель форматирования

3. В списке панелей выберете имя необходимой панели инструментов, например, на строке Рисование (Drawing). На экране появится еще одна панель инструментов.

Рисунок 15. Выбор панели Рисование.

10.1.6 Использование панелей инструментов

Давайте посмотрим, как создать, сохранить, закрыть, а затем снова открыть документ и отправить его по электронной почте, пользуясь кнопками панелей инструментов. Названия кнопок отображаются на экране, если ненадолго задержать на них указатель мыши.

1. Щелкните на кнопке New (New Blank Document). Writer создаст новый документ. Его название появится в строке заголовка окна.

2. Введите слово Пример.

3. Щелкните на кнопке Сохранить (Save). На экране появится окно диалога сохранения документа. В поле Имя файла (File name) Writer предлагает свой вариант имени для файла.

4. Щелкните на кнопке Сохранить (Save) в окне диалога Сохранение документа (Save As).

5. Выберите команду Файл > Закрыть (File > Close). Только что созданный нами документ будет закрыт.

6. Щелкните на кнопке Открыть (Open).

7. В окне диалога Открытие документа (Open) выделите последний сохраненный документ и щелкните на кнопке Открыть (Open).

8. Введите слова Мой первый и щелкните на кнопке Сохранить (Save). Теперь документ будет автоматически сохранен.

9. Выберите команду Файл Закрыть (File > Close).

10.1.7 Добавление новых возможностей на панель инструментов.

Иногда удобно вынести на панель инструментов какие-то дополнительные функциональные возможности, например, средство для обрезки рисунков, возможность писать подстрочные и надстрочные знаки, формулы. Для этого необходимо выбрать Tools, Customize .

Например, для того, чтобы добавить верхний или нижний индекс, нужно навести курсором на стандартную панель и нажать на правую кнопку мыши, затем выбираем пункт «показать кнопки» и выбираем «верхний индекс» или «нижний индекс».

Рисунок 16. Добавление кнопок на панель инструментов.

Для быстрого ввода формул на панель можно добавить редактор формул, или знак отображения невидимых, если нет необходимости добавлять всю панель, можно добавить нужный элемент на уже отображенную. При этом выбираем на панели «Таблица», затем «Формула», так же чтобы вывести «Формулу» на панель можно нажать кнопку на клавиатуре F2.

Рисунок 17. Добавление редактора формул

Кроме того можно сделать видимой одну из панелей инструментов выбрав соответствующую вкладку отметив нужную панель во View-Toolbars.

10.1.8 Редактирование текста

Приемы выделения текста

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

Сочетание клавиш или прием для выделения текста.

Один символ справа от курсора Shift+→

Один символ слева от курсора Shift+←

Одно слово справа от курсора Shift+Ctrl+→

Одно слово слева от курсора Shift+Ctrl+←

Одну строку выше курсора Shift+↑

Одну строку ниже курсора Shift+↓.

Весь текст от курсора до конца строк-: Shift+End

Весь текст от курсора до начала строки Shift+Home

Весь текст от курсора до конца документа Shift+Ctrl+End

Весь текст от курсора до начала документа Shift+Ctrl+Home

Для выделения одного слова можно воспользоваться двойным щелчком левой кнопки мыши на слове, для выделения предложения повторение двойного щелчка.

Для выделения колонки текста можно воспользоваться переходом в режим копирования блока текста Ctrl+Shift+F8.

Выделить весь текст Ctrl+A.

Удаление, копирование и вставка текста для удаления текста мы пользовались клавишами Backspace и Delete.

Можно просто выделить ненужный фрагмент и нажать клавишу Delete (или Backspace).

Для отмены удаления можно воспользоваться кнопкой Undo (отмена ввода)

Копирование выделенного текста в буфер — Ctrl+Ins, Ctrl + C

Вставка из буфера – Shift+Ins, Ctrl + V

Удаление и копирование в буфер — Shift+Del.

10.1.9 Параметры страницы

Меню Формат(Format)+Страница(Page) позволяет задать такие свойства как отступы от краев листа , колонтитулы, поворот страницы – альбомная или книжная, тип печатаемой страницы, например, А4, стандартный лист для принтера, А5 – половина данного листа, А3 - два листа А4.

Рисунок 18. Формат страницы

10.1.10 Оформление абзацев (Paragraphs)

Чаще всего требуется менять такие параметры оформления абзаца, как выравнивание по левому, правому краю, выравнивание по ширине страницы, центрирование абзаца, изменение межстрочного расстояния и отбивка абзаца. Для того, чтобы переформатировать текущий абзац, выберите команду в меню Формат(Format)+Абзац (Paragraph) (рисунок 9). Если необходимо переформатировать более одного абзаца, необходимо их предварительно выделить.

Координатная линейка, которая отображается по команде в меню Вид (View)+Линейка (Ruler), позволяет менять отступы и величину красной строки, средний – меняет абзацный отступ, нижний сдвигает красную строку и абзацный отступ одновременно. Правый маркер служит для изменения правого отступа.

Рисунок 19. Формат абзаца

10.1.11 Разделы (Sections) и разрывы

Для изменения разметки документов на одной странице или на разных страницах можно использовать разделы. Чтобы создать область с разделом, вставьте раздел и затем задайте формат для каждого из разделов. Например, можно при создании отчета отформатировать раздел введения как одну колонку, а затем отформатировать следующий раздел, представляющий собой текст отчета как две колонки.

Для вставки раздела нужно выбрать Вставка+Раздел (Insert+Section) и соответствующие параметры нового раздела, где он начинается (рисунок 20). В новом разделе можно установить другое количество колонок текста, чем то, количество, что было в другом разделе, настроить количество колонок можно во вкладке Колонки (Columns).

Рисунок 20. Окно выбора вставки раздела

Рисунок 21. Установление параметров нового раздела

Для вставки разрыва необходимо выбрать Вставка+Разрыв (Insert + Manual Break) (рисунок 22), в этом случае можно выбрать разрыв на следующую страницу, строку.

Рисунок 22. Окно выбора вставки разрыва

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

1. Выберите команду Формат.

2. Щелкните значок Стили страницы ( F 11) (Рисунок 23).

Рисунок 23. Окно выбора Стилей

3. Щелкните стиль страницы правой кнопкой мыши и выберите Создать. Новый стиль страницы изначально получает все свойства выбранного стиля страницы. (Рисунок 24)

Рисунок 24. Окно создания нового стиля

4. На вкладке Управление введите имя для стиля страницы в поле Имя, например "Моя альбомная ориентация".

5. В поле Следующий стиль выберите стиль страницы, который требуется применить к странице, следующей за страницей с новым стилем. (Рисунок 25)

Рисунок 25. Окно вкладки Управление

6. Откройте вкладку Страница. (Рисунок 25)

7. В пункте Формат бумаги выберите “A4” или “Альбомный”.

8. Нажмите кнопку ОК. (Рисунок 26)

Рисунок 26. Окно выбора Ориентации страницы

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

Рисунок 27. Применение стиля Моя альбомная ориентация

Одностраничные стили

Стиль страницы можно применить только к одной странице. В качестве примера рассмотрим стиль “Первая страница”. Для установки этого свойства определите другой стиль страницы в качестве "следующего стиля" на вкладке Формат - Страница – Управление (Рисунок 28).

Рисунок 28. Установка стиля обычный

Одностраничный стиль начинается с нижней границы текущего диапазона стиля страницы и применяется до следующего разрыва страницы. Следующий разрыв страниц появляется автоматически, когда текст переходит на следующую страницу, что иногда называется "мягкий разрыв страницы". В качестве альтернативы можно вставить разрыв страниц вручную.

Для вставки разрыва страницы вручную в положении курсора нажмите Ctrl+Enter или выберите Вставка – Разрыв (Рисунок 29) и просто нажмите кнопку "OK"(Рисунок 30).

Рисунок 29. Окно выбора вставки разрыва страницы

Рисунок 30. Вставка разрыва страницы

10.1.12 Оглавление и указатели.

Добавление оглавления и указателей требует предварительной установки свойств текста, который будет выступать в качестве заголовка в оглавлении. Обычно это название параграфа или какой-то главы. Можно воспользоваться кнопкой на панели инструментов – стили и форматирование или стиль (Apply Style), обычно они находятся рядом с полями – название шрифта и размер шрифта. Выделив нужный текст, можно задать ему уровень заголовка, например Заголовок 1, или Заголовок 2. Заголовок 1 (Рисунок 31) обычно указывает введение, главы, а Заголовок 2 (Рисунок 32) параграфы в этих главах.

Рисунок 31. Выделение в тексте Заголовка 1

Рисунок 32. Выделение в тексте Заголовка 2

После того как будут отмечены соответствующие главы и параграфы документа, текст будет полностью напечатан и отформатирован, можно воспользоваться Вставка - Оглавления и указатели - Оглавления и указатели (Рисунок 33), чтобы вставить соответствующее оглавление (содержание) в начале документа (Рисунок 34) .

Рисунок 33. Окно выбора вставки оглавления

Рисунок 34. Вставка оглавления

Рисунок 35. Оглавление

10.1.13 . Вставка рисунка в текст.

Для вставки рисунка можно воспользоваться меню Вставка-Изображение-Из файла (Рисунок 36) (Insert-Picture-From File), либо можно скопировать изображение в буфер и вставить из буфера с помощью Shift-Ins или меню выбираемого правой кнопкой мыши (вставить - paste), либо сделать скриншот экрана или окна, скопировав его в буфер и затем осуществить вставку.

Рисунок 36. Вставка изображения из файла

Положение в тексте рисунка можно редактировать Формат – Привязка (Рисунок 37) , привязав его к странице (To Page), параграфу (To paragraph), или символу (To Character), или сделать воспринимаемым как символ (As Character) , в этом случае к рисунку можно принимать стили присущие тексту, выравнивание по ширине или по левому и правому краю и т.д.

Рисунок 37. Привязка изображения к абзацу

 В тексте отчетов или больших текстах с нумеруемыми рисунками изображение лучше вставлять как символ, также можно задать подпись рисунка — Caption, для этого можно щелкнуть правой кнопкой мыши на рисунке или в меню Вставка-Название (Insert-Caption)(Рисунок 38).

Рисунок 38. Вставка названия изоборажения

Можно заменить стандартную надпись на свою, при этом при вставке нового рисунка с надписью он автоматически нумеруется в соответствии со своим номером в тексте.

Рисунок 39. Изменение надписи на изображении

Рисунок 40. Измененное имя изображения.

10.1.14 . Формулы

Вставка формулы осуществляется с помощью выбора Вставка-Объект-Формула (Рисунок 41) (Insert-Object-Formula), либо объект формула можно выбрать на панели управления.

Рисунок 41. Вставка формулы в документ

Запишем формулу для расчета информационной энтропии:

 

где  - вероятность встречи символа в сообщении.

Таким образом формула выглядит в редакторе формул:

H=sum from{i=1} to{n} {p_{i} cdot log_{2}({1} over {p_{i}} ) }.

Редактирование формулы можно осуществить так же с использованием программы LibreOffice Math, так же входящую в пакет LibreOffice. Для этого нужно открыть окно программы (Рисунок 42), затем осуществить следующие действия.

Рисунок 42. Окно LibreOffice Math

Первым делом открываем окно «Элементы» , как показано на Рисунке 43. Для этого нужно нажать: Вид - Элементы.

.

Рисунок 43. Открытие окна «Элементы»

После выполнения предыдущего действия на экране появится следующее окно «Элементы» (Рисунок 44).

 

Рисунок 44. Окно LibreOffice Math «Элементы»

Саму формулу мы вводим в нижнее окошко в LibreOffice Writer как показано на рисунке 42.

Рисунок 42.Ввод формулы в окно LibreOffice Writer

При редактировании может быть использовано окно элементов редактирования. Например, чтобы выбрать значок суммы выбираем соответствующую вкладку, она будет соответствовать стандартной форме записи sum <?>, необходимо заменить последовательность <?> на свои данные в соответствии с вашей формулой, можно также указать элементы from и to определяющие нижнюю и верхнюю границы изменения индекса формулы суммы. Фигурные скобочки объединяют последовательность символов в один элемент формулы.

Для создания и вставки формулы использовалось автоматическая нумерация формул. В этом случае можно создать таблицу из двух столбцов и одной строки, сделать границы таблицы невидимыми, в правый столбец вставить формулу и в левый записать скобочки. Выровнять формулу первый и второй столбец по левому и правому краю соответственно, положение в ячейке по высоте задать — по середине. Затем с помощью Вставка-Поля-Дополнительно (Рисунок 43) вызвать окно редактирования представленное на рисунке 44.

Рисунок 43. Окно Вставка – Поля – Дополнительно

Рисунок 44. Окно редактирования

Вставить в список Выбор-Название переменную Нумфор, в значение записать нумфор+1. Если необходима нумерация внутри параграфа, то выбрать уровень 1. Ниже приведен пример.

   

Затем можно копировать созданную таблицу формулы в нужно место и затем редактировать формулу, так же можно сделать авто-вставку.

Также для автоматической нумерации формул можно воспользоваться вставкой в тексте документа последовательности двух символов fn и затем нажав F3. В этом случае также, но уже автоматически создастся таблица из двух столбцов и одной строки в первом столбце будет указана стандартная формула, ее можно заменить и во втором столбце будет указан номер формулы, данный номер вставляется автоматически, при вставке формулы выше произойдет перенумерация формул. Нумерацию можно делать и не сквозной, щелкнув на соответствующем номере формулы и задав уровень при настройке поля.

10.1.15 Стили и форматирование

При работе в Writer лучше заранее создать набор стилей для различного типа объектов, рисунков, формул, текста, списков, заголовков и затем применять данные стили к тексту, а не настраивать все вручную.

Для создания своего стиля можно выбрать Формат-Стили (Рисунок 45) и форматирование (Format-Styles and Formatting), в окне стилей выбрать нужный стиль блока текста (параграфа, символа, фрейма или страницы) , затем с помощью правкой кнопки мыши и выпадающего меню выбрать Создать (New) (Рисунок 46).

Рисунок 45. Окно выбора Формат-Стили

Рисунок 46. Создание нового стиля

Например, при создании стиля будет вызвано окно, показанное на рисунке 47, если мы назначим до фрейма указанный стиль, то он будет применен к данному фрейму, для применения стиля можно выделить нужный объект и щелкнуть левой кнопкой мыши на имени стиля два раза, или выбрать стиль и нажать Применить.

Рисунок 47. Окно Стиль абзаца

 Кроме того, можно создать стиль с аналогичным именем во вкладке paragraphs и characters в свою очередь описывая для данного стиля все характеристики текста. При создании соответствующего текста в данном фрейме он будет отформатирован в соответствии с параметрами данного стиля, а текст внутри фрейма в соответствии с тем же стилем заданным во вкладках characters (стили символа) и paragraphs (стили параграфа).


Дата добавления: 2019-01-14; просмотров: 288; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!