Новые книги

Эта книга помогает не просто определить факторы популярности, но и предлагает набор конкретных прикладных методик для создания сообщений или рекламы, которыми люди охотно будут делиться друг с другом.

Чем бы вы ни занимались, эта книга поможет вам сделать так, чтобы о вашем продукте или идее заговорили.

На русском языке публикуется впервые.
В книге?–?описание современных приемов успешных продаж, которые обычно держатся в секрете или раскрываются лишь на дорогостоящих тренингах и семинарах. Автор книги?–?успешный продавец, бизнес-консультант. В отличие от теоретиков торговли, он прекрасно знает то, о чем говорит и пишет: на протяжении более двадцати лет он продавал все?–?от кирпичей до самолетов! Все главы книги представляют собой идеальное руководство для обучения ремеслу успешной торговли. Готовыми рецептами и конкретными решениями вы сможете воспользоваться буквально через несколько минут чтения этой книги!

Аплет FormDemo



Аплет FormDemo

Оглавление

Компоненты
Кнопки
Переключатели
Списки Choice
Списки List
Поле Label
Поле TextField
Поле TextArea
Аплет FormDemo

В аплете FormDemo мы покажем приемы работы с компонентами, такими как переключатели, кнопки, текстовые поля и списки.

Мы разместили несколько таких компонент в окне этого аплета (рис. 7) таким образом, что они образуют собой форму. В этой форме вы можете ввести имя и фамилию, выбрать один из трех режимов работы, а также цвет.

Рис. 7. Окно аплета FormDemo

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

Переключатели First и Second активизируют однострочные текстовые поля редактирования Enter your first name и Enter your second name. После того как пользователь нажмет кнопку Ready, содержимое активных полей, а также состояние переключателей Mode 1, Mode 2 и Mode 3 будет отображено в многострочном поле редактирования. Это поле находится в нижней части окна аплета.

С помощью списка, расположенного справа от переключателя Mode 3, можно задавать цвет фона многострочного поля. Цвет устанавливается сразу после выбора новой строки из этого списка.

К сожалению, при изменении размеров окна аплета находящиеся в нем компоненты изменяют свое расположение. Этот недостаток мы устраним после того, как расскажем вам о системе Layout Manager, с помощью которой вы можете управлять размещением компонент в окне аплета.

Исходный текст аплета FormDemo

Исходный текст аплета FormDemo вы найдете в листинге 1.

Листинг 1. Файл FormDemo.java

import java.applet.Applet;
import java.awt.*;
import java.util.*;
public class FormDemo extends Applet 
{
  Button btReady;

  Checkbox chbox1;
  Checkbox chbox2;  
  CheckboxGroup grRadio;
  Checkbox rd1;
  Checkbox rd2;
  Checkbox rd3;

  Choice ch1;
  Label lbFirstName;
  Label lbSecondName;  
  TextField txtFirstName;
  TextField txtSecondName;
  TextArea  txta; 
  public void init() 
  {
    chbox1 = new Checkbox("First");
    add(chbox1);
    lbFirstName =
     new Label("Enter your first name:");
    add(lbFirstName);    
    txtFirstName = new TextField(" ", 30);
    add(txtFirstName);    
    chbox2 = new Checkbox("Second");
    add(chbox2);
    lbSecondName = 
      new Label("Enter your second name:");
    add(lbSecondName);
    txtSecondName = new TextField(" ", 30);
    add(txtSecondName);
    grRadio = new CheckboxGroup();
    rd1 = new Checkbox("Mode 1", 
      grRadio, true);
    rd2 = new Checkbox("Mode 2",
      grRadio, false);
    rd3 = new Checkbox("Mode 3",
      grRadio, false);    
    add(rd1);
    add(rd2);
    add(rd3);
    ch1 = new Choice();
    ch1.addItem("White");
    ch1.addItem("Green");
    ch1.addItem("Yellow");    
    add(ch1);    
    setBackground(Color.yellow);
    lbFirstName.setBackground(Color.yellow);
    lbSecondName.setBackground(Color.yellow);
    rd1.setBackground(Color.yellow);
    rd2.setBackground(Color.yellow);
    rd3.setBackground(Color.yellow);    
    chbox1.setBackground(Color.yellow);
    chbox2.setBackground(Color.yellow);    
    txta = new TextArea("", 6, 45);
    add(txta);
    txta.setBackground(Color.white);    
    btReady = new Button("Ready");
    add(btReady);
  }
  public String getAppletInfo()
  {
    return "Name: FormDemo";
  }
  public void paint(Graphics g)
  {
    Dimension dimAppWndDimension = 
      getSize();
    g.setColor(Color.black);
    g.drawRect(0, 0, 
      dimAppWndDimension.width  - 1, 
      dimAppWndDimension.height - 1);
  }
  public boolean action(Event evt,
    Object obj)
  {
    Button btn;
    String str1, str2;    
    if(evt.target instanceof Button)
    {
      if(evt.target.equals(btReady))
      {
        btn = (Button)evt.target;
	str1 = txtFirstName.getText();
	str2 = txtSecondName.getText();	
	if(chbox1.getState())
	  txta.append(str1);	  
	if(chbox2.getState())
	  txta.append(str2);	  
	if(rd1.getState())
	  txta.append("\nMode 1\n");	
	if(rd2.getState())
	  txta.append("\nMode 2\n");	
	if(rd3.getState())
	  txta.append("\nMode 3\n");
      }
      else
      {
	return false;
      }
      return true;
    }
    else if(evt.target instanceof Choice)
    {
      if(evt.target.equals(ch1))
      {
	if(ch1.getSelectedIndex() == 0)
	  txta.setBackground(Color.white);	  
	if(ch1.getSelectedIndex() == 1)
	  txta.setBackground(Color.green);	  
	if(ch1.getSelectedIndex() == 2)
	  txta.setBackground(Color.yellow);
      }
    }
    return false;
  }
}

В листинге 2 мы привели исходный текст документа HTML, созданный для нашего аплета системой Java WorkShop.

Листинг 2. Файл FormDemo.tmp.html

<applet
  name="FormDemo"
  code="FormDemo" 
  codebase=
"file:/e:/sun/articles/vol6/src/FormDemo"
  width="500"
  height="600"
  align="Top"
  alt="If you had a java-enabled browser,
 you would see an applet here.">
  <hr>If your browser 
recognized the applet tag,
you would see an applet here.<hr>
</applet>
Описание исходного текста

Приведем краткое описание полей и методов, определенных в  аплете FormDemo.

Поля главного класса

В главном классе нашего аплета мы определили несколько полей.

Поле btReady хранит ссылку на кнопку с надписью Ready:

Button btReady;

В полях chbox1 и chbox2 записаны ссылки на переключатели с независимой фиксацией, которые используются для активизации однострочных текстовых полей:

Checkbox chbox1;
Checkbox chbox2;

Поле grRadio хранит ссылку на группу переключателей с зависимой фиксацией, определяющих режимы работы Mode 1, Mode 2 и Mode 3:

CheckboxGroup grRadio;

Ссылки на эти переключатели находятся в следующих трех полях:

Checkbox rd1;
Checkbox rd2;
Checkbox rd3;

В поле ch1 хранится ссылка на список, предназначенный для выбора цвета:

Choice ch1;

Слева от однострочных полей редактирования в нашем окне имеются подписи, реализованные как объекты класса Label. Ссылки на эти объекты находятся в полях lbFirstName и lbSecondName:

Label lbFirstName;
Label lbSecondName;

Ссылки на однострочные поля редактирования записаны в поля с именами txtFirstName и txtSecondName:

TextField txtFirstName;
TextField txtSecondName;

И, наконец, ссылка на многострочное текстовое поле хранится в поле с именем txta:

TextArea  txta;

Метод init

Метод init занимается созданием компонент и добавлением их в окно алпета. Кроме того, этот метод изменяет цвет фона окна аплета и окон добавляемых компонент.

Прежде всего метод init создает два переключателя с независимой фиксацией, два объекта класса Label и два однострочных поля редактирования текста:

chbox1 = new Checkbox("First");
add(chbox1);
lbFirstName =
   new Label("Enter your first name:");
add(lbFirstName);    
txtFirstName = new TextField(" ", 30);
add(txtFirstName);    
chbox2 = new Checkbox("Second");
add(chbox2);
lbSecondName = 
  new Label("Enter your second name:");
add(lbSecondName);
txtSecondName = new TextField(" ", 30);
add(txtSecondName);

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

Для группы переключателей с зависимой фиксацией мы создаем объект класса CheckboxGroup:

grRadio = new CheckboxGroup();

Ссылка на этот объект затем передается в качестве второго параметра конструкторам, создающим переключатели:

rd1 = new Checkbox("Mode 1", 
    grRadio, true);
rd2 = new Checkbox("Mode 2",
    grRadio, false);
rd3 = new Checkbox("Mode 3",
    grRadio, false);

Переключатели добавляются в окно аплета при помощи метода add:

add(rd1);
add(rd2);
add(rd3);

Список цветов создается как объект класса Choice:

ch1 = new Choice();

После создания списка мы добавляем в него три элемента, вызывая для этого метод addItem:

ch1.addItem("White");
ch1.addItem("Green");
ch1.addItem("Yellow");

Вслед за этим мы добавляем сформированный список в окно аплета:

add(ch1);

Для установки цвета фона мы вызываем метод setBackground без указания объекта:

setBackground(Color.yellow);

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

lbFirstName.setBackground(Color.yellow);
lbSecondName.setBackground(Color.yellow);
rd1.setBackground(Color.yellow);
rd2.setBackground(Color.yellow);
rd3.setBackground(Color.yellow);    
chbox1.setBackground(Color.yellow);
chbox2.setBackground(Color.yellow);

Многострочное текстовое поле создается как объект класса TextArea. В нем 6 строк и 45 столбцов:

txta = new TextArea("", 6, 45);
add(txta);

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

txta.setBackground(Color.white);

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

И, наконец, последнее что делает метод init перед тем как вернуть управление, - создает кнопку с надписью Ready и добавляет ее в окно аплета:

btReady = new Button("Ready");
add(btReady);

Метод action

В методе action мы определили рабочие поля btn, str1 и str2:

Button btn;
String str1, str2;

В начале своей работы метод action определяет, какой компонент вызвал событие. Для этого анализируется поле evt.target:

if(evt.target instanceof Button)
{
  . . .
  return true;
}
else if(evt.target instanceof Choice)
{
  . . .
  return true;
}
return false;

Наш метод action обрабатывает события, вызываемые объектами классов Button и Choice. Если событие вызвано компонентом, относящимся к какому-либо другому классу, метод возвращает значение false. Этим он сигнализирует, что обработка события не выполнялась.

В случае успешной обработки события метод action возвращает значение true.

Если событие вызвано кнопкой, наш метод action проверяет, какой именно. Обработка выполняется только в том случае, если через поле evt.target передается ссылка на кнопку btReady:

if(evt.target.equals(btReady))
{
  . . .
}
else
{
  return false;
}
  return true;

В противном случае метод action возвращает значение false, отказываясь от обработки события.

Что делает обработчик события, создаваемого кнопкой?

Прежде всего, он сохраняет ссылку на кнопку в рабочей переменной (просто для того чтобы показать, как это делается):

btn = (Button)evt.target;

Далее наш обработчик события извлекает текстовые строки из однострочных текстовых полей, вызывая для этого метод getText. Эти строки записываются в рабочие переменные str1 и str2:

str1 = txtFirstName.getText();
str2 = txtSecondName.getText();

Затемметод action проверяет состояние переключателей с независимой фиксацией chbox1 и chbox2. Если они включены, содержимое соответствующих временных переменных добавляется в многострочное текстовое поле txta:

if(chbox1.getState())
   txta.append(str1);	  
if(chbox2.getState())
   txta.append(str2);

Для добавления мы вызываем метод append.

Аналогичным образом преверяется состояние переключателей с зависимой фиксацией:

if(rd1.getState())
  txta.append("\nMode 1\n");	
if(rd2.getState())
  txta.append("\nMode 2\n");	
if(rd3.getState())
  txta.append("\nMode 3\n");

Если событие вызвано списокм цветов ch1, то метод action определяет, какая строка списка стала выделенной и устанавливает в многострочном поле редактирования соответствующий цвет фона. Для определения выделенной строки применяется метод getSelectedIndex:

if(evt.target.equals(ch1))
{
  if(ch1.getSelectedIndex() == 0)
    txta.setBackground(Color.white);	  
  if(ch1.getSelectedIndex() == 1)
    txta.setBackground(Color.green);	  
  if(ch1.getSelectedIndex() == 2)
    txta.setBackground(Color.yellow);
}

Работу остальных методов приложения FormDemo вы сможете разобрать самостоятельно.