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




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


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

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

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

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

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




Rambler's Top100

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

Java programming выпуск 23-й

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

По вашим просьбам, наконец, на сайте открылся форум!!!

Приглашаю вас посетить форум, задать свои вопросы и ответить на вопросы других.

Начинающим

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

Совмещение методов

Язык Java позволяет создавать несколько методов с одинаковыми именами, но с разными списками параметров. Такая техника называется совмещением методов (method overloading). В качестве примера при­ведена версия класса Point, в которой совмещение методов использовано для определения альтернативного конструктора, который инициализиру­ет координаты х и у значениями по умолчанию (-1).


class Point
{ 
 int х, у; 
 
 Point(int х, int у)
 { 
  this.x = х; 
  this.у = у; 
 } 

 Point()
 { 
  х = -1; 
  у = -1; 

 }
} 

class PointCreateAlt
{ 
 public static void main(String args[])
 { 
  Point p = new Point(); 

  System.out.println("x = " + p.x + " у = " + p.y); 

 }
} 

В этом примере объект класса Point создается не при вызове первого конструктора, как это было раньше, а с помощью второго конструктора без параметров. Вот результат работы этой программы:

х = -1 у = -1

ЗАМЕЧАНИЕ
Решение о том, какой конструктор нужно вызвать в том или ином случае, принимается в соответствии с количеством и типом параметров, указанных в операторе new. Недопустимо объявлять в классе методы с одинаковыми именами и сигнатурами. В сигнатуре метода не учитываются имена формальных параметров учитываются лишь их типы и количество.

this в конструкторах

Очередной вариант класса Point показывает, как, используя this и со­вмещение методов, можно строить одни конструкторы на основе других.


class Point
{ 
 int х, у; 

 Point(int х, int у)
 { 
  this.x = х; 
  this.у = у; 
 } 

 Point()
 { 
  this(-1, -1); 

 }
} 

В этом примере второй конструктор для завершения инициализации объекта обращается к первому конструктору.

Методы, использующие совмещение имен, не обязательно должны быть конструкторами. В следующем примере в класс Point добавлены два метода distance. Функция distance возвращает расстояние между двумя точками. Одному из совмещенных методов в качестве параметров передаются координаты точки х и у, другому же эта информация пере­дается в виде параметра-объекта Point.


class Point 
{ 
 int х, у; 

 Point(int х, int у)
 { 

  this.x = х; 
  this. y = y; 
 } 

 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.x, p.y); 
 }
} 

class PointDist
{ 

 public static void main(String args[])
 { 
  Point p1 = new Point(0, 0); 
  Point p2 = new Point(30, 40); 

  System.out.println("p1 = " + p1.x + ", " + p1.y); 
  System.out.println("p2 = " + p2.x + ", " + p2.y); 
  System.out.println("p1.distance(p2) = " + p1.distance(p2)); 
  System.out.println("p1.distance(60, 80) = " + p1.distance(60, 80)); 
 }
} 

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

р1 = 0, 0
р2 = 30, 40
р1.distance(p2) = 50.0
p1.distance(60, 80) = 100.0

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

Продолжая разговор о проекте векторного редактора

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

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

Вот предлагаю вашему вниманию два варианта предложенных читателями:

  1. По аналогии с тем, что эмблемой Линюкса в какой-то степени считается пингвин, в качестве символа можно принять симпатичную собачку (только не слащавую болонку). Во-первых собака - друг человека, а во-вторых, из аббревиатуры DOG можно при желании получить разные варианты - например (не уверена в грамматической правильности и точности перевода, но все же) - Design(er) Of Graphics, Dayly Our Graphics, Draw Own Graph, Developer Of Graphis.
    Елена
  2. У меня возникла сумасшедшая идея названия: GROLD (Graphic Objects Library for Developers). Можно как-нибудь модифицировать.
    Дмитрий
Присылайте свои идеи и предложения.

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

В прошлом номере задавался вопрос:
Как переменной присвоить значение ровное текущему году. Другими словами как системный год узнать? Артем Золочевский.

Vitaly Landa прислал свой вариант ответа и немного меня покритиковал:)

Я считаю, что это не совсем правильный ответ.

Во-первых, класс Date использовать не желательно, так как класс Date почти полностью является deprecated, а следовательно он не рекомендуем к "употреблению". И оставлен он в основном для поддержки предыдущих версий. Вместо Date следует пользоваться классом Calendar.

А во-вторых, вопрос состоял в том, как узнать системный год? А для этого следует воспользоваться классом System или Runtime.

И тогда ответом на вопрос Артема будет:


  • Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis( System.currentTimeMillis() );
  • Caledar calendar = Calendar.getInstance( new Date( System.currentTimeMillis() ) ); int year = calendar.get( Calendar.YEAR );
  • Вопрос:

    Существует некоторый апплет Interf. Необходимо к нему прикрепить компонент, реализующий секундомер. Его заголовок

    
    class Timer extends java.awt.Canvas implements Runnable { 
    ... 
    } 
    

    Когда добавляю этот компонент к апплету делаю следующее:

    
    class Interf extendes Applet { 
    Timer t; 
    Thread timer; 
    ... 
    public void init() { 
    setLayout(new GridLayout(1, 1)); 
    t = new Timer(); 
    add(t); 
    timer = new Thread(t); 
    } 
    ... 
    public void start() { 
    timer.start(); 
    } 
    ... 
    } 
    

    Все конечно хорошо, Timer работает как надо. Однако, он закрашивает всю область и моего апплета не видно. Но это еще не весь вопрос. Я понимаю можно использовать менеджер компоновки, например, setLayout(new GridLayout(2, 1)); и наш Timer будет находиться в первой строке. И тем самым не будет перекрывать апплет. НО, НУЖНО СДЕЛАТЬ ТАК, ЧТОБЫ TIMER РАСПОЛАГАЛСЯ В ТОМ МЕСТЕ, ГДЕ Я ПОЖЕЛАЮ И ИМЕЛ ТЕ РАЗМЕРЫ, КОТОРЫЕ ОПЯТЬ ЖЕ Я ПОЖЕЛАЮ. Что посоветуете?


    Анатолий

    Вопрос:

    Не пойму в чем дело. В JBuilder7 делаю New...->Application ... и получаю проект с формой.

    Перехожу на вкладку Design. Далее, беру JButton кладу на форму. Пытаюсь взятся мышкой за уголки JButton, чтобы сузить площадь кнопки - не получается (Я пытаюсь перелесть с Delphi на JBuilder и знаю что можно мышкой изменять размеры и растановку визуальных компонентов прямо на форме). Получается только перетаскивать кнопку с положения Center в North,South,East,West.

    А как же визуально изменять размеры компонентов. Эта проблема касается и всех остальных компонентов.


    Николай

    Ответ:

    Это просто у вас менеджер размещения такой стоит.:) Поставьте в layout значение null и размещайте компоненты как хотите.

    В коде это можно сделать:

    
    setLayout(null); 
    button.setLocation(x,y); 
    button.setSize(w,h); 
    
    либо
    
    button.setBounds(new Rectangle(x, y, w, h)); 
    

    Вопрос: Я работаю в сети и хочу, чтобы когда пользователь заходил на мою страницу было бы приветствие вроде " Добро пожаловать на страницу <имя компа>". Просто много думал как мне узнать имя компа зашедшего на сайт, но не получилось. Может вы мне поможете, буду очень рад.
    MJ

    Ответ: Можно сделать апплет и в нем вывести строку:

    String a=InetAddress.getLocalHost().getHostName();

    Вопрос: Каким образом в JAVA можно вывести на печать документ.
    Андрей Дежурный

    Ответ: Есть класс PrintJob из класса Toolkit. Мы рассматривали пример печати в 12, 13 и 14 выпусках.

    Вопрос: Подскажите пожалуйста, почему в скачанной версии JDK ( j2re-1_4_1_01-windows-i586-i.exe ), в каталоге BIN нет компилятора javac, наверное от этого javac у меня не идет? Система вин2кей

    Ответ: Втом то и дело что это не JDK (SDK), а Java 2 Runtime Environment, т.е. вы скачали только виртуальную машину. Вам необходимо скачать пакет для разработчика j2sdk-1_4_1_01-windows-i586

    Вопрос: Пытаюсь сварганить самый простой swing-апплет. У меня этот паразит никак не хочет к внешним ресурсам обращаться... Т.е. всякие элементы управления располагает нормально, а картинку вывести - ни в какую.
    Praetorian

    Ответ: Вот вариант, работает везде безотказно.

    Вопрос: Можно ли вообще организовывать базы данных с помощью Java-сервлетов на бесплатных хостингах (например, на narod.ru)?

    Ответ: На бесплатном хостинге нет, я не знаю бесплатных с БД, да и еще с поддержкой Java.

    Вопрос: При подписывании JAR файлов кто именно будет выдавать мне сертификат? Мне как-то надо связаться с Verisign ?
    А.С.

    Ответ: Можете сами создать свой сертификат, но вопрос в том будут ли доверять вашему сертификату конечные пользователи.
    Подробнее можете посмотреть цикл статей по данной теме:
    1. Создание и использование архивов Java
    2. Системы безопасности для клиентов. Создание доверенного апплета в JDK1.3
    3. Системы безопасности для клиентов. Создание доверенного апплета для реализации цифровой подписи с использованием криптосистем открытого ключа
    4. Шифрование с помощью открытого ключа

    Вопрос: У меня вопросы насчет привилегий апплетов.
    1)можно прочитать файл на машине?
    2)можно создать исходящее соединение? (почему-то ie выдает ошибку, говорит не запрещено соединяться, скажем с smtp.yandex.ru - почему ?)
    3)Можно получить доступ к реестру?
    все это зависит от браузера, подписи апплетов и О/с ?

    Михаил

    Ответ: Какие права даны апплету смотрите в таблице документации java.sun.com/jdk1.3/docs/tooldocs/win32/jarsigner.html.

    Вопрос: Почему на вашем сайте не используется технология JSP, а используется PHP или CGI ? Перспективно ли JSP ?

    Ответ: Перспективно ли JSP? Я считаю что да.
    Вот можете посмотреть статью Смертельная схватка: .Net против J2EE, и сделать свои выводы.
    Предлагаю обсудить данную тему и высказать свое мнение на форуме в ветке посвященной данной теме.

    А почему на сайте использую php? Неохота переезжать к другому хостеру, да и кто знает хорошего с поддержкой Java. Да и обещают вроде как реализовать поддержку в ближайшем будущем.

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

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

    1. Как присвоить кнопке горячею клавишу.
    2. Как объединить JRadioButton в группу.
    3. Как сменить LookAndFeel.
    4. Как нескольким кнопкам присвоить один обработчик событий.

    
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class SimpleExample extends JPanel
    {
     static JFrame frame;
    
     static String metal= "Metal";
     static String metalClassName = 
            "javax.swing.plaf.metal.MetalLookAndFeel";
    
     static String motif = "Motif";
     static String motifClassName = 
            "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
    
     static String windows = "Windows";
     static String windowsClassName = 
            "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
    
     JRadioButton metalButton, motifButton, windowsButton;
    
     public SimpleExample()
     {
      // Создаем кнопки
      JButton button = new JButton("Hello, world");
      button.setMnemonic('h'); //задаем горячею клавишу
    
      metalButton = new JRadioButton(metal);
      metalButton.setMnemonic('o');
      //каждой кнопке устанавливаем свою команду
      metalButton.setActionCommand(metalClassName);
    
      motifButton = new JRadioButton(motif);
      motifButton.setMnemonic('m'); 
      motifButton.setActionCommand(motifClassName);
    
      windowsButton = new JRadioButton(windows);
      windowsButton.setMnemonic('w'); 
      windowsButton.setActionCommand(windowsClassName);
    
      // Объединяем кнопки в группу
      ButtonGroup group = new ButtonGroup();
      group.add(metalButton);
      group.add(motifButton);
      group.add(windowsButton);
    
      // Регистрируем обработчик событий для кнопок
      RadioListener myListener = new RadioListener();
      metalButton.addActionListener(myListener);
      motifButton.addActionListener(myListener);
      windowsButton.addActionListener(myListener);
    
      //Добавляем кнопки
      add(button);
      add(metalButton);
      add(motifButton);
      add(windowsButton);
     }
    
    
     /** Класс обработчика событий для кнопок */
     class RadioListener implements ActionListener
     {
      public void actionPerformed(ActionEvent e)
      {
       //для каждой кнопки получаем свою команду
       String lnfName = e.getActionCommand();
       try
       {
        //устанавливаем LookAndFeel
        UIManager.setLookAndFeel(lnfName);
        //обновляем форму
        SwingUtilities.updateComponentTreeUI(frame);
        frame.pack();
       } 
       catch (Exception exc)
       {
        //на случай ошибки при смене LookAndFeel
        //делаем кнопку соответствующею этому LookAndFeel
        //не активной
        JRadioButton button = (JRadioButton)e.getSource();
        button.setEnabled(false);
        //обновляем состояние кнопок
        updateState();
        System.err.println("Could not load LookAndFeel: " + lnfName);
       }
      }
     }
     //функция обновления состояния кнопок
     public void updateState()
     {
      String lnfName = UIManager.getLookAndFeel().getClass().getName();
      if (lnfName.indexOf(metal) >= 0)
      {
       metalButton.setSelected(true);
      }
      else if (lnfName.indexOf(windows) >= 0)
      {
       windowsButton.setSelected(true);
      } 
      else if (lnfName.indexOf(motif) >= 0)
      {
       motifButton.setSelected(true);
      }
      else
      {
       System.err.println("SimpleExample is using an unknown L&F;: " + lnfName);
      }
     }
    
     public static void main(String s[])
     {
      SimpleExample panel = new SimpleExample();
    
      frame = new JFrame("SimpleExample");
      frame.addWindowListener(new WindowAdapter()
      {
       public void windowClosing(WindowEvent e) {System.exit(0);}
      });
      frame.getContentPane().add("Center", panel);
      frame.pack();
      frame.setVisible(true);
      panel.updateState();
     }
    }
    
    
    

    JavaScript

    В прошлом номере был вопрос :
    Подскажите пожалуйста можно ли сделать на javascript чтобы отрисовывалась одна таблица и по нажатию на определенную кнопку или ссылку отображалась либо скрывалась строка(строки) в таблице
    Alex

    Я дал ответ, что мне не видится это возможным.

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

    
    <html;>
    <table; border=0 cellspacing=0 cellpadding=0 width=50%>
    <tr;><td;>1;</td></tr>
    <tr;><td; onmouseover="this.style.cursor='hand'" bgcolor="cccccc"
    onclick="Ne.display=(Ne.display==''?'none':'')" id="ne">
    2</td></tr>
    <tr;><td;>3;</td></tr>
    <tr;><td;>4;</td></tr>
    <tr;><td;>5;</td></tr>
    </table>
    <script;>Ne;=document.all.ne.style;</script>
    </html>
    

    Работает только в IE4-6.

    Вопрос: Как из JavaScript вызвать метод апплета и под какиим браузерами это работает?
    Victor V

    Ответ:

    
    document.applets.имя_апплета.метод(параметры)
    
    Должно работать во всех современных браузерах.

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

    Ответ:
    YourImage.width
    YourImage.height
    Где YourImage идентификатор картинки.

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

    Вопрос: Как мне вывести сообщение при нажатии определенной клавиши?
    Максим

    Ответ: Вот посмотрите пример определения нажатой клавиши

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

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

    Юрий Ладик.


    Ален Лиссуар
    "WMI: программирование на JavaScript и VBScript"
    Подробнее>>
    Заказать>>


    Е. Е. Аккуратов
    "Знакомьтесь: 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-й