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




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


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

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

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

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

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




Rambler's Top100

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

Java programming выпуск 25-й

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

После полуторамесячного молчания, наконец-то я смог выпустить в свет этот номер. Но зато и номер получился приличный по объему!

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

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

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

Как дальше выпускать рассылку?
Большими объемами каждую неделю:)
Большими объемами раз в месяц.
Выпускать, как и было, нерегулярно и разными объемами.
Небольшими объемами каждую неделю.
Вообще не выпускать.

Ваш комментарий:


Ваш E-mail (не обязателен):


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

Начинающим

Классы (продолжение)

Замещение методов

Новый подкласс Point3D класса Point наследует реализацию метода distance своего суперкласса. Проблема заключается в том, что в классе Point уже определена версия метода distance(int х, int у), которая возвращает обычное расстояние между точ­ками на плоскости. Мы должны заместить (override) это определение метода новым, пригодным для случая трехмерного пространства. В сле­дующем примере проиллюстрировано и совмещение (overloading), и за­мещение (overriding) метода distance.


class Point
{ 
 int х, у; 
 Point(int х, int у)
 { 
  this.x = х; 
  this.у = у; 
 } 
 double distance(int х, int у)
 { 
  int dx = this.x - х; 
  int dy = this.у - у: 
  return Math,sqrt(dx*dx + dy*dy); 
 } 

 double distance(Point p)
 { 
  return distance(p.х, p.y); 
 } 
} 

class  Point3D extends Point
{ 
 int z; 
 Point3D(int х, int y, int z)
 { 
  super(x, y); 
  this.z = z; 
 } 

 double distance(int х, int y,  int z)
 { 
  int dx = this.x - х; 
  int dy = this.y - y; 
  int dz = this.z -  z; 
  return Math.sqrt(dx*dx + dy*dy + dz*dz); 
 } 

 double distance(Point3D other)
 { 
  return distance(other.х, other.y, other.z); 
 } 

 double distance(int х, int y)
 { 
  double dx = (this.x / z) - х; 

  double dy = (this.у / z) - y; 
  return Math.sqrt(dx*dx + dy*dy); 
 } 
} 

class Point3DDist
{ 
 public static void main(String args[])
 { 
  Point3D p1 = new Point3D(30, 40, 10); 
  Point3D p2 = new Point3D(0, 0, 0); 
  Point p = new Point(4, 6); 
  System.out.println("p1 = " + p1.x +  ", " + p1.y + ", " + p1.z); 
  System.out.println("p2 = " + p2.x +  ", " + p2.y + ", " + p2.z); 
  System.out.println("p = " + p.x + ", " + p.y); 
  System.out.println("p1.distance(p2) = " + p1.distance(p2)); 
  System.out.println("p1.distance(4, 6) = " + p1.distance(4, 6)); 
  System.out.println("p1.distance(p) = " + p1.distance(p)); 
 }
} 

Ниже приводится результат работы этой программы:

С:\> Java Point3DDist
p1 = 30, 40, 10
р2 = 0, 0, 0
р = 4, 6
p1.distance(p2) = 50.9902
p1.distance(4, 6) = 2.23607
p1.distance(p) = 2.23607

Обратите внимание — мы получили ожидаемое расстояние между трехмерными точками и между парой двумерных точек. В примере используется механизм, который называется динамическим назначением методов (dynamic method dispatch).

Динамическое назначение методов

Давайте в качестве примера рассмотрим два класса, у которых имеют простое родство подкласс / суперкласс, причем единственный метод суперкласса замещен в подклассе.


class A
{ 
 void callme()
 { 
  System.out.println("Inside A's callrne method"); 
 }
}

class В extends A
{
 void callme()
 { 
  System.out.println("Inside B's callme method"); 
 }
} 

class Dispatch
{ 
 public static void main(String args[])
 { 
  A a = new B(); 
  a.callme(); 
 }
} 

Обратите внимание — внутри метода main мы объявили переменную а класса А, а проинициализировали ее ссылкой на объект класса В. В следующей строке мы вызвали метод callme. При этом транслятор про­верил наличие метода callme у класса А, а исполняющая система, уви­дев, что на самом деле в переменной хранится представитель класса В, вызвала не метод класса А, а callme класса В. Ниже приведен результат работы этой программы:

С:\> Java Dispatch
Inside B's calime method

Программистам Delphi / C++ следует отметить, что все Java по умолчанию являются виртуальными функциями (ключевое слово virtual).

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

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

Вывод сжатых HTML документов из сервлета

Как-то раз мне попался довольно интересный пример осуществления вывода сжатого HTML документа, генерируемого сервлетом. Что, по утверждению его автора, позволяет уменьшать траффик в среднем на 60-80%.

Решение смотрите в коде - вроде бы всё понятно. Замечание - этот пример сам определяет, поддерживает ли браузер сжатые документы.


import javax.servlet.*;
import javax.servlet.http.*;
import java.util.zip.*;

public class ZipServlet extends HttpServlet
{
 public void doGet(HttpServletRequest request, 
                   HttpServletResponse response) 
                throws ServletException, IOException
 {
  response.setContentType("text/html");
  String encodings = request.getHeader("Accept-Encoding");
  String encodeFlag = request.getParameter("encoding");
  PrintWriter out;

  if((encodings != null)&&
        (encodings.indexOf("gzip") != -1)&&
         !"none".equals(encodeFlag))
  {
   OutputStream out1 = response.getOutputStream();
   out = new PrintWriter(new GZIPOutputStream(out1), false);
   response.setHeader("Content-Encoding", "gzip");
  }
  else out = response.getWriter();

   out.println("writing HTML document"); //пишем тело документа
   out.close();
 }
}

JNI: взаимодействие Java с другими языками

На сайте появились четыре статьи по данной теме:

Переход к реализованной IBM 64-разрядной JVM для 64-разрядного издания Windows 2000
JNI: взаимодействие Java с другими языками
C++ и Java: совместное использование
Совместная отладка Java и C/C++ кода

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

Вопрос: Как сделать чтобы при открытии окна в таблице показывались не первые строки а последние?

Ответ:


jScrollPane1.getViewport().setViewPosition(
       jTable1.getCellRect(
       jTable1.getRowCount()-1,0,true).getLocation());
С учетом того что таблица находится в JScrollPane.

Вопрос: Можно ли проигрывать звуки в java 1.1.* в приложениях (не Applet-ах и без использования Swing)?
ALIEN

Ответ: Я делаю следующим образом


import java.applet.*; 
...... 
AudioClip aClip=Applet.newAudioClip(
     getClass().getResource("/sounds/1234.wav")); 
aClip.play()

Вопрос: Как мне в Java округлить число типа double или float с заданной точностью или просто отбросить дробную часть, например, начиная с 3-го знака после запятой?
zerg

Ответ: Стандартной функции не припомню но вот один вариант:


double formatDouble(double d, int dz) 
{ 
 double dd=Math.pow(10,dz); 
 return Math.round(d*dd)/dd; 
} 
где dz -количество знаков после запятой.

Вопрос: Начал jsp изучать. Вот такой вопрос :
first.jsp


<form method="post" action="enter.jsp">
<br>Введите имя : <input name="sample"><br>
<br><br>
<input type="submit" name="Submit" value="OK">
</form> 
а в enter.jsp надо вывести значение поля.
Zed

Ответ: В enter.jsp:


Value of sample is: <%= request.getParameter("sample") %>

Вопрос: 1. Можно ли как-нибудь, в SWING-приложении (или апплете) рисовать не только компоненты, а, скажем, в некотором JPane отобралить линию, круг, или еще какой примитив, как в обычном апплете? Если да, то каким макаром?
2. JLabel - единственный способ отображать картинки?

Praetorian

Ответ: 1.Если в самом компоненте то


public void paintComponent(Graphics g) 
{ 
 super.paintComponent(g); 
 g.drawLine(0,0,100,100); 
} 
Если из другого компонента хочешь нарисовать на panel то так

panel.getGraphics().drawLine(0,0,100,100); 
Но при перерисовке компонента во втором варианте линия исчезнет.

2. Нет в том же компоненте

public void paintComponent(Graphics g) 
{ 
 g.drawImage(img,x,y,this); 
}

Вопрос: Как работать с куками из сервлета?
Андрей

Ответ: Вот посмотрите небольшой пример по установке, чтению и удалению кукисов.

Вопрос: Подскажите мне как сравнить два объекта и отсортировать их? Есть интерфейс Comparable, но я так и не понял как все это работает.

Ответ: Что бы разрешить этот вопрос ознакомьтесь с небольшими статьями:
Сортировка в Java - легко!
Сравнение объектов в Java.

Вопрос: Расскажите немного о библиотеках custom тэгов.

Ответ: Java Server Pages (JSP) и библиотеки custom тэгов.

Вопрос: Где должны хранится файлы картинок в MIDlete?

Ответ:

Например у вас есть jar файл вашего мидлета:
..
\icons
\META-INF
\mypackage

И в нем у вас есть поддиректории:
META-INF - где лежит MANIFEST.MF файл
mypackage - где находятся ваши класс файлы

И к примеру поддиректория "icons" где лежат картинки (image1.png, image2.png...), тогда что бы создать объект Image вы в мидлете пишите следующий код:


try
{
 Image image = Image.createImage("/icons/image1.png");
 ...
}
catch (IOException ex)
{
 ...
} 

Вопрос: Как узнать ситемные свойства ОС? Версию например?
Алексей

Ответ: Ниже приведен код, который выводит на консоль все! системные свойства о которых знает JVM и их значения, после знака "=".


 public static void main(String[] args)
 {
  Properties prop = System.getProperties();
  String str="";
  for(Enumeration en = prop.propertyNames(); en.hasMoreElements();)
  {
   str=en.nextElement().toString();
   System.out.println(str+" = "+System.getProperty(str));
  }
 }

Вопрос: Не могу понять, как вывести простое диалоговое окно с кнопкой "ОК" и "Отмена"? Есть ли функция типа MessageBox в Джаве?

Ответ: JOptionPane.showConfirmDialog();

Вопрос: Vожно ли уменьшить размеры фонтов по умолчанию. Дмитрий

Ответ:

Да, это можно сделать с помощью look and feel.

В классе UIManager есть метод put который служит для того, что бы устанавливать параметры того как будет веглядеть какой-либо визуальный компонент. Например для того, что бы изменить шрифт которым отрисовываются статический текст (Label), надо создать объект класса Font и написать что-то вроде:


Font youFontObject = new Font("Helvetica", Font.BOLD, 17);
UIManager.put( "Label.font", youFontObject);
Для изменения размера шрифта в меню:

UIManager.put( "MenuBar.font", youFontObject);
или

UIManager.put( "MenuItem.font", youFontObject);

Вопрос:

Ответ:


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

Рассмотрим пример создания "круглой" SWING кнопки (http://java.sun.com/jdc/TechTips/index.html).
На основе этого примера можно создать кнопки и других форм.

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

public class RoundButton extends JButton
{
 public RoundButton(String label)
 {
  super(label); 
  Dimension size = getPreferredSize();
  // Делаем нашу кнопочку вписанной в квадрат.
  // Дабы не получился у нас овал:)
  size.width = size.height = Math.max(size.width, size.height);
  setPreferredSize(size);
  // Не закрашиваем кнопочку.
  setContentAreaFilled(false);
 }
 // Рисуем нашу кнопочку.
 protected void paintComponent(Graphics g)
 {
  if (getModel().isArmed())
  {
   // Устанавливаем цвет по умолчанию.
   g.setColor(Color.lightGray);
  } 
  else
  {
   g.setColor(getBackground());
  }
  // Рисуем окружность.
  g.fillOval(0, 0, getSize().width-1, getSize().height-1);
  // Прорисовываем сам JButton.
  super.paintComponent(g);
 }
 // Рисуем бордюр кнопочки.
 protected void paintBorder(Graphics g)
 {
  g.setColor(getForeground());
  g.drawOval(0, 0, getSize().width-1, getSize().height-1);
 }

 // Определяем принадлежность точки к нашей кнопочки.
 Shape shape;
 public boolean contains(int x, int y)
 {
  // Если кнопка изменилась в размере
  // создаем новый объект shape.
  if (shape == null ||!shape.getBounds().equals(getBounds()))
  {
   shape = new Ellipse2D.Float(0, 0, getWidth(), getHeight());
  }
  // Возвращаем true если точка принадлежит
  // и false если не принадлежит кнопке.
  return shape.contains(x, y);
 } 
 
 // Тестируем полученную кнопку.
 public static void main(String[] args)
 {
  // Создаем кнопку с надписью "Jackpot".
  JButton button = new RoundButton("Jackpot");
  button.setBackground(Color.green); 
  // Создаем фрейм и помещаем в него кнопку.
  JFrame frame = new JFrame();
  frame.getContentPane().setBackground(Color.yellow);
  frame.getContentPane().add(button);
  frame.getContentPane().setLayout(new FlowLayout());
  frame.setSize(150, 150);
  frame.setVisible(true);
 }
}


JavaScript

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

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

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

Вопрос: Как определить наличие plugin-а (jre 1.N.i, где N >= 2) в IE с помощью JS?
BAlex

Ответ: помощью JavaScript такое сделать нельзя, но есть выход с использованием апплета.

Вопрос: Здравствуйте ! Как с помощью JS определить есть ли в броузере пользователя, который зашел на мой сайт , Flash Player. И какой он версии?
Сергей

Ответ: Посмотрите вот этот пример.

Вопрос: Можете ли подсказать где можно найти большую коллекцию скриптов и информации по JavaScript?
Bobir

Ответ: Я и пытаюсь собрать коллекцию скриптов на сайте JavaPortal.ru в разделе JavaScript: Примеры

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

Ответ: Воспользуйтесь следующей функцией


function pause (mSec)
{
 clock = new Date();
 justMinute = clock.getTime();
 while (true)
 {
  just = new Date();
  if (just.getTime() - justMinute > mSec) break;
 }
}

Вопрос: На всех сайтах с обоями приходится с картинками грузить кучу всяких банеров и прочей чепухи. Можно ли как ни будь вытащить только одни картинки??
Дмитрий

Ответ: Ну и задали вы мне задачку:) Конечно можно!
Вот одно из решений:


<html>
<script language="javascript">
for(i=15;i<229;i++)
{

if(i<100)document.write("<a href=http://omen.ru/f/
  wallpapper/models/0"+i+".jpg>"+i+"</a><br>");
else document.write("<a href=http://omen.ru/f/
  wallpapper/models/"+i+".jpg>"+i+"</a><br>");
}
</script>
</html>
Генерите страничку с ссылками на все картинки и потом закачиваете их любым менеджером закачек (я пользуюсь FlashGet).

Вопрос: Как отключить кэширование страниц в браузере с помощью Javascript?

Ответ: Вообще то это делается с помощью HTML тэга meta:


<head>
<meta http-equiv="pragma" content="no-cache">
</head>

Вопрос: Как проверить с какова адреса(WWW) пришел посетитель и если не с заданного то закрыть страницу.(javascript)

Ответ: document.referrer – возвращает URL документа из которого был вызван текущий документ. Закрыть окно можно window.close(), но при этом выскочит предупреждение, что скрипт хочет закрыть окно (если только окно не создано скриптом). Это сделано из-за соображений безопасности и для предотвращения умышленного закрытия всех окон.

Вопросы присылайте на E-mail [email protected] с пометкой "Вопрос по Java".
А лучше задавайте их в форуме.

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

Юрий Ладик.


Дэвид Флэнаган
"Java в примерах. Справочник"
Подробнее>>
Заказать>>


H. Мухамедзянов
"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-й