Логин:   Пароль:




Новости
Рассылки
Форум
Поиск


Java
- Апплеты
- Вопрос-ответ
- Классы
- Примеры
- Руководства
- Статьи
- IDE
- Словарь терминов
- Скачать

Мобильная Java
- Игры
- Примеры
- Статьи
- WAP, WML и пр.

JavaScript
- Вопрос-ответ
- Примеры
- Статьи

Веб-мастеринг
- HTML
- CSS
- SSI

Разминка для ума
Проекты
Книги
Ссылки
Программы
Юмор :)




Rambler's Top100

РассылкиАрхив Java programmingВыпуск 20-й

Java programming выпуск 20-й

Здравствуйте дорогие читатели!

Открылась новая рассылка "Новости сайта". Подписавшись на эту рассылку вы будете раз в неделю получать прямые ссылки на новые материалы и другую информацию связанную с развитием сайта!
Подписаться можно прямо на сайте.

Начинающим

Иногда возникают ситуации, когда разделы инициализации или итерации цикла for требуют нескольких операторов. Поскольку составной оператор в фигурных скобках в заголовок цикла for вставлять нельзя, Java предоставляет альтернативный путь. Применение запятой (,) для разделения нескольких операторов допускается только внутри круглых скобок оператора for. Ниже приведен пример цикла for, в котором в разделах инициализации и итерации стоит несколько операторов.


class ForExample2
{
 public static void main(String args[])
 {
  int a, b;
  for (a = 1, b = 4; a < b; a++, b--)
  {
   System.out.println("a = " + a);
   System.out.println("b = " + b);
  }
 }
}

Вывод этой программы показывает, что цикл выполняется всего два раза.

а = 1
b = 4
а = 2
b = 3

continue

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


class ContinueExample
{ 
 public static void main(String args[])
 { 
  for (int i=0; i < 10; i++)
  { 
   System.out.print(i + " ");
   if (i % 2 == 0) continue;
   System.out.println("");
  }
 }
} 

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

0 1
2 3
4 5
5 7
8 9

Как и в случае оператора break, в операторе continue можно задавать метку, указывающую, в каком из вложенных циклов вы хотите досроч­но прекратить выполнение текущей итерации. Для иллюстрации служит программа, использующая оператор continue с меткой для вывода треугольной таблицы умножения для чисел от 0 до 9:


class ContinueExample2
{
 public static void main(String args[])
 {
  outer:   for (int i=0; i < 10; i++)
  {
   for (int j = 0; j < 10; j++)
   {
    if (j > i)
    {
     System.out.println("");
     continue outer;
    } 
    System.out.print(" " + (i * j));
   } 
  } 

}} 

Оператор continue в этой программе приводит к завершению внутрен­него цикла со счетчиком j и переходу к очередной итерации внешнего цикла со счетчиком i. В процессе работы эта программа выводит сле­дующие строки:

0
0 1
0 2 4
0 3 6 9
0 4 8 12 16
0 5 10 15 20 25
0 6 12 18 24 30 36
0 7 14 21 28 35 42 49
0 8 16 24 32 40 48 56 64
0 9 18 27 36 45 54 63 72 81

Тема "на заказ"

Модель делегирования событий в JDK 1.1

Большая часть работы по написанию программ пользовательского интерфейса заключает-ся в определении необходимых взаимодействий. Если операционная система определяет, что была нажата клавиша на клавиатуре или кнопка мыши, ее задача — уведомить об этом соот-ветствующее приложение. Оно, в свою очередь, должно выяснить, какой из компонентов интерфейса связан с данным проявлением активности пользователя, и переслать сообщение ему. Начиная с JDK 1.1, фирма SUN реализовала новый метод обмена информацией о собы-тиях—модель делегирования событий. <.p>

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

Существует два различных типа событий — низкоуровневые и семантические, Все классы этих событий являются производными от класса java.awt.AWTEvent. Низкоуровневые события связаны с физическими аспектами интерфейса пользователя — щелчками мыши, нажа-тиями клавиш клавиатуры и т.д. Семантические события строятся на базе низкоуровневых событий. Например, для выбора команды меню пользователю может потребоваться раскрыть список команд первым щелчком мыши, а затем вторым щелчком выбрать в нем требуемую команду. Щелчок мышью означает нажатие кнопки мыши с последующим ее отпусканием. Эта серия низкоуровневых событий (нажатие кнопки мыши над панелью меню, отпускание кнопки мыши над панелью меню, нажатие кнопки мыши над командой меню, отпускание кнопки мыши над командой меню) может быть объединена в одно семантическое событие.

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


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class ExampleCloseWindow extends JFrame
{
 public ExampleCloseWindow()
 {
  addWindowListener(new WindowAdapter()
  {
   public void windowClosing(WindowEvent e)
   {  
    int result = JOptionPane.showConfirmDialog(getParent(),
     "Close window?","Close window",JOptionPane.YES_NO_OPTION);
    if(result == JOptionPane.YES_OPTION)System.exit(0);
    else setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
   }
  });
 }
 public static void main(String args[])
 {
  System.out.println("Starting ExampleCloseWindow...");
  ExampleCloseWindow mainFrame = new ExampleCloseWindow();
  mainFrame.setSize(400, 400);
  mainFrame.setTitle("ExampleCloseWindow");
  mainFrame.setVisible(true);
 }
}

При создании нового объекта класса JFrame данная программа сообщает ему, что он заинтересован в обработке определённых событий. Однако вместо того, чтобы известить его об этом прямо, конструктор организует посылку ему предупреждения через объект класса adapter—промежуточный класс, который обрабатывает только один тип событий. В дан-ном случае промежуточный объект принадлежит клас-су WindowAdapter, обрабатывающему событие класса WindowEvent. Когда объект фрейма ге-нерирует событие WindowEvent, объект анализирует, является ли оно со-бытием WindowClosing. Если это не так, объект игнорирует его. Если получено ожидаемое событие, в программе запускается процесс описанный в данном обработчике событий.

Вопрос - ответ

Вопрос: Работаю в JBuilder6. Такая проблема, когда создаю апплет с использованием только ATW(AWT) компонентов, то все работает нормально, а если использую SWING IE пишет:
Applet can't be instantiated

Роман - Oduvan

Ответ: В семнадцатом номере был подобный вопрос и ответ на него следующий:
Просто до ближайшего времени броузеры не держали библиотеки Swing. Сейчас с JDK 1.4 идет plug-in с которым работает и Swing.

Вопрос:


public class MyTrees extends JApplet
{ 
JLabel ct=new JLabel("Надпись",new ImageIcon("1.jpg"),JLabel.CENTER);
Container cp = getContentPane();
String[] data={ "Colors", "Red", "Blue", "Green" };
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Корень");
JTree tr= new JTree(root);
JButton but= new JButton("Привет") ;
JTextArea txt=new JTextArea();
boolean fack=true;
public void init()
{
for(int i=0;i<data.length;i++)
{
DefaultMutableTreeNode subtree1= new DefaultMutableTreeNode(data[i]);
root.add(subtree1);
}
final JPanel p = new JPanel();
final JPanel pt = new JPanel();
final JPanel pt2 = new JPanel();
p.add(but);
pt.add(tr);
but.addActionListener(new
ActionListener()
{
public void actionPerformed(ActionEvent e)
{
pt2.add(ct) ; 
txt.append("Была нажата кнопка\n");
}
});
cp.add(p, BorderLayout.SOUTH);
cp.add(pt,BorderLayout.EAST) ;
cp.add(pt2,BorderLayout.NORTH) ;
cp.add(new JScrollPane(txt));
}
public static void main(String args[])
{
BeerGo.run(new MyTrees(),1000,1000);
} 
}

У меня никак не получается нормальная работа кнопки... , чтобы нажав на нее отображалась картинка.
Sasha

Ответ:

Необходимо утвердить произошедшие изменения в контейнере:


but.addActionListener(new
ActionListener()
{
 public void actionPerformed(ActionEvent e)
 {
  pt2.add(ct) ; 
  txt.append("Была нажата кнопка\n");
  cp.validate();  
 }
});

Вопрос: Как убрать мерцание при перерисовке repaint()? Вся картинка рисуется в painte.
Antonina Vracinska

Ответ: Посмотрите пример Устранение мерцаний с помощью двойной буферизации

Вопрос: Я начинающий программист, сейчас самостоятельно изучаю язык Java по книгам, а также Ваши уроки, вопросы простые:
1. Нужно ли ещё изучать языки HTML, JavaScript или ещё другие технологии типа PHP, JSP, XML, Servlets и др.?
2. Почему почти во всех учебниках пишутся програмные коды в DOSе, ( это ведь "дедовский" метод ), а не в визуальной среде, там ведь есть прекрасный встроеннный редактор? (например "Visual Cafe").

Крис

Ответ:
Изучая язык программирования Java вы сами неволей стакнетесь с HTML при создании тех же апплетов. А раз вы читаете книги по Java, то наверняка там есть описание, хотя бы поверхностное, технологий JSP и Servlets. А уже заинтересуют они вас или нет это ваше дело. А если уж заинтересуют то там доберетесь и до XML и до других альтернативных технологий как PHP, ASP и др.

Что касается написания программ, как вы выражаетесь в “ДОСе”, просто иногда различные IDE добавляют излишний программный код который может быть непонятен начинающим программистам. Да и написать программу с нуля, а не с шаблона предоставляемого визуальной средой разработки, будет намного поучительней и даст возможность вникнуть в ход написания текста программы.

Например чтобы написать простое приложение состоящее из одного окошка достаточно:


import java.awt.*;
import java.awt.event.*;

class FirstApplication extends Frame
{
 public FirstApplication()
 {
  addWindowListener(new WindowAdapter()
  {
   public void windowClosing(WindowEvent e)
   {
	System.exit(0);
   }
  });
 }
 public static void main(String args[])
 {
  FirstApplication mainFrame = new FirstApplication();
  mainFrame.setSize(400, 300);
  mainFrame.setTitle("First Application");
  mainFrame.setVisible(true);
 }
}

При выполнении той же задачи в JBuilder используя встроенный конструктор получим два класса:


package untitled1;

import javax.swing.UIManager;
import java.awt.*;

public class Application1
{
 boolean packFrame = false;
 /**Construct the application*/
 public Application1()
 {
  FirstApplication frame = new FirstApplication();
  //Validate frames that have preset sizes
  //Pack frames that have useful preferred size info, 
  //e.g. from their layout
  if (packFrame)
  {
   frame.pack();
  }
  else
  {
   frame.validate();
  }
  //Center the window
  Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
  Dimension frameSize = frame.getSize();
  if (frameSize.height > screenSize.height)
  {
   frameSize.height = screenSize.height;
  }
  if (frameSize.width > screenSize.width)
  {
   frameSize.width = screenSize.width;
  }
  frame.setLocation((screenSize.width - frameSize.width) / 2, 
  (screenSize.height - frameSize.height) / 2);
  frame.setVisible(true);
 }
 /**Main method*/
 public static void main(String[] args)
 {
  try
  {
   UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  }
  catch(Exception e)
  {
   e.printStackTrace();
  }
  new Application1();
 }
}


package untitled1;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class FirstApplication extends JFrame
{
 JPanel contentPane;
 BorderLayout borderLayout1 = new BorderLayout();
 /**Construct the frame*/
 public FirstApplication()
 {
  enableEvents(AWTEvent.WINDOW_EVENT_MASK);
  try
  {
   jbInit();
  }
  catch(Exception e)
  {
   e.printStackTrace();
  }
 }
 /**Component initialization*/
 private void jbInit() throws Exception 
 {
  contentPane = (JPanel) this.getContentPane();
  contentPane.setLayout(borderLayout1);
  this.setSize(new Dimension(400, 300));
  this.setTitle("First Application");
 }
 /**Overridden so we can exit when window is closed*/
 protected void processWindowEvent(WindowEvent e)
 {
  super.processWindowEvent(e);
  if (e.getID() == WindowEvent.WINDOW_CLOSING)
  {
   System.exit(0);
  }
 }
}

Такая конструкция, мне кажется, сложновата для начинающего.

Вопрос: Не подскажите как в Java реализовать что-то на подобии стека?
Сергей

Ответ: Если вас интересует сам стек то есть стандартный класс Stack.

Вопрос: Как мне сохранить содержимое JTextArea в файл?
Fly

Ответ: Привожу пример метода записи в файл ниже в разделе "Программный код…".

Программный код…

Пример сохранения содержимого текстового поля в файл


public boolean saveToFile(String namefile)
 {
  try
  {
   File file = new File (namefile);
   FileWriter out = new FileWriter(file);
   String text = jTextArea1.getText();
   out.write(text);
   out.close();
   return true;
  }
  catch (IOException e)
  {
   System.out.println("Error saving file.");
  }
  return false;
 }

JavaScript

Вопрос: Нужен скрипт, который будет в зависимости от типа браузера перенаправлять на ту или иную страницу. Конкретно: если IE 5+, то url1 ; иначе url2.
Антон

Ответ:


<html;>
<head;>
<script; language="JavaScript">
<!-- 
browserName=navigator.appName;
browserVer=parseInt(navigator.appVersion);
document.write(browserName);
document.write(" "+browserVer);
if(browserName=="Microsoft Internet Explorer" && browserVer>=4)
 location.href="url1"
else location.href="url2"
//-->
</script>
</head>
</html>

Вопрос: При открытие окна необходимо управлять его параметрами.
Открыть новое окно с помощью window.open() с новыми параметрами проблем не составляет.
Но есть ли возможность изменить размеры в момент загрузки окна, что бы скрипт отрабатывал раскрытие окна во весь экран и убирал меню-бар и пр.?

Running

Ответ:

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

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

Вопрос: Я очень хотел бы узнать коды самого банального, простого Ticker или что-то подобное название, окошечко в котором время от времени меняется текст!!!
А так же код для того чтобы пролистать страницу наверх, лишь нажав на кнопку.

Mr.m.a.x.

Ответ: Код бегущей строки вы можете посмотреть тут или тут

Для прокрутки страницы не требуется использование JavaScript это делается средствами HTML: В начале страницы помещаем ссылку <a; name=”top”></a> И при нажатии на ссылку в конце документа ссылаемся на ссылку с именем top: <a; href="#top">Наверх</a>


<html;>
<body;>
<a; name=”top”></a>
<p;>
Текст
</p>
<p;>
Текст
</p>

.............

<p;>
Текст
</p>
<p;>
Текст
</p>
<a; href="#top">Наверх</a>
</html>
</body>

Вопрос: Я хотелбы заняться изучением Javascript? Но незнаю на чем его писать (всысле редактор) и подскажи пожалуйста, что мне как для новичка нужно скачать из сети.
simon

Ответ: Писать скрипты можно в любом HTML-редакторе. Я например пользуюсь HTML-редактором 1st Page 2000 или пишу в блокноте. Для новичков вполне подойдёт ВВЕДЕНИЕ В JAVASCRIPT ДЛЯ МАГА © 1996, 1997 Стефан Кох (Stefan Koch)

Вопрос: Нет ли у вас скрипта отсчитывающего количество оставшихся дней до какой-либо даты?
Андрей

Ответ: Вот посмотрите скрипт отсчитывающий количество дней оставшихся до нового года.

Вопрос: Надо по кнопке открывать новое окно и из окна родителя закидывать в новое окно текст.
вот код окна-родитля


<SCRIPT; language=JavaScript1.2>
function newwin(dummy, w, h)
{
 myWin=window.open("","nz","width=" + w + ",height=" + h +
 ",status=no,toolbar=no,menubar=no,scrollbars=yes,resizable=yes");
}
</SCRIPT>
есть текст допустим "вперед" и я так открываю новое окно:

<a; href="zakaz.htm" onclick="newwin('вперед' , 400, 520 )" target="nz">
<img; border="0" src="img/bott.gif" width="104" height="22"></a>
этот текст мне надо записать в поле "T1" нового окна

<form; name="form1"><input; type="text" name="T1" size="30"></form>
Подскажите, как мне это сделать?


Михаил

Ответ: Вот посмотрите реализацию вашей задачи.





Вопросы присылайте на E-mail [email protected] с пометкой "Вопрос по Java".

Жду вопросов и предложений.

Юрий Ладик.

Подписаться на эту рассылку и посмотреть архив можно тут /subs/subs.html


Вадим Дунаев
"JavaScript. Самоучитель"
Подробнее>>
Заказать>>


Е. Е. Аккуратов
"Знакомьтесь: Java. Самоучитель"
Подробнее>>
Заказать>>

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


[an error occurred while processing this directive]



Apache Struts 2.0.11
Apache MyFaces Trinidad Core 1.2.3.
Sun переводит мобильные устройства с Java ME на Java SE
Хакерская атака!



Выпуск 29-й
Выпуск 28-й
Выпуск 27-й
Выпуск 26-й
Выпуск 25-й
Выпуск 24-й
Выпуск 23-й
Выпуск 22-й
Выпуск 21-й
Выпуск 20-й
Выпуск 19-й
Выпуск 18-й
Выпуск 17-й
Выпуск 16-й
Выпуск 15-й
Выпуск 14-й
Выпуск 13-й
Выпуск 12-й
Выпуск 11-й
Выпуск 10-й
Выпуск 9-й
Выпуск 8-й
Выпуск 7-й
Выпуск 6-й
Выпуск 5-й
Выпуск 4-й
Выпуск 3-й
Выпуск 2-й
Выпуск 1-й