пʼятницю, 22 червня 2012 р.

Вкладки Java

За створенням вкладок відповідає клас JTabbedPane. Це контейнер з поміченими вкладками. Кожна вкладка має ім’я і є звичайним контейнером. Щоб додати вкладку до JTabbedPane, просто викличте addTab(мітка_вкладки, екземпляр_контейнера). Зауважте, що хоча одночасно показується одна вкладка, всі інші вкладки також завантажені в пам’ять. Тому, якщо пам’ять для вас є критичним ресурсом, то необхідно вжити відповідних заходів із звільнення пам’яті. Результат виконання TestTabbedPane.java

import javax.swing.*;
 
public class TestTabbedPane {
 
    public static final int FRAME_WIDTH = 350;
    public static final int FRAME_HEIGHT = 200;
 
    public static void main(String[] args) {
        //створюємо вкладку
        JFrame frame = new JFrame();
        frame.setTitle ("Test Tabbed Pane");
        frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
        JTabbedPane tabby = new JTabbedPane();
 
        //створюємо панелі для вкладок
        JPanel panel1= new JPanel();
        JPanel panel2 = new JPanel();      
 
        //додаємо на першу вкладку групу радіокнопок
        ButtonGroup radioGroup=new ButtonGroup();
        panel1.add(new JLabel("Ваш вік?"));
        JRadioButton radioButton;
        panel1.add(radioButton=new JRadioButton("12..18"));
        radioGroup.add(radioButton);
        panel1.add(radioButton=new JRadioButton("19..30"));
        radioGroup.add(radioButton);
        panel1.add(radioButton=new JRadioButton("30..60"));
        radioGroup.add(radioButton);
 
        //на другу панель додаємо просто напис
        panel2.add(new JLabel("Друга вкладка"));
 
        //додаємо панелі у JTabbedPane
        tabby.addTab("Перша", panel1);
        tabby.addTab("Друга", panel2);
 
        // додаємо вкладки у фрейм
        frame.add(tabby);
        frame.setVisible(true);
 
    }
}


Повний варіант книги знаходиться на Вікіпідручнику

середу, 20 червня 2012 р.

Меню в Java

Стандартне меню в java реалізоване в класі JMenu. Меню може містити інші меню у вигляді підменю. Для того щоб розмістити пункти меню в горизонтальну смугу використовується інший клас JMenuBar.

Рядок меню можна розмістити не тільки зверху вікна, але і знизу і посередині.

Таким чином спочатку створюється рядок меню:

JMenuBar menuBar = new JMenuBar();
Щоб помістити рядок меню у верхню частину фрейму пишеться:
frame.SetJMenuBar(menuBar);
Далі залишається заповнити його відповідними меню. Для цього для кожного меню створюється свій об’єкт:
JMenu fileMenu=new JMenu(“Файл”);
JMenu editMenu=new JMenu(“Редагувати”);
Далі усі основні меню додають до рядка меню:
menuBar.add(fileMenu);
menuBar.add(editMenu);
Аналогічно додємо до меню пункти підменю:
JMenu fileMenu = new JMenu("Файл");
menuBar.add(fileMenu);
JMenuItem openItem = new JMenuItem ("Відкрити");
fileMenu.add(openItem);
Також до пунктів меню можна додати розділювачі:
fileMenu.addSeparator().
До кожного пункту меню можна додати зображення та свій обробник події. Наступна програма демонструє створення меню та роботу з ним. ProgramMenu.java
import java.awt.Event;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.*;
 
public class ProgramMenu {
         public static final int DEFAULT_WIDTH = 300;
         public static final int DEFAULT_HEIGHT = 200;
 
    public static void main(String[] args) {
        //створюємо фрейм
        JFrame frame = new JFrame();
        frame.setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //додаємо меню
        frame.add(new Menu(frame));
        frame.setVisible(true);
 
 
    }
}
 
class Menu extends JMenuBar{  
    public Menu(JFrame frame ){
       //створюємо рядок меню
       JMenuBar menuBar = new JMenuBar();
       //додаємо рядок меню у фрейм
       frame.setJMenuBar(menuBar);
 
       //Меню "Файл"
       JMenu fileMenu = new JMenu("Файл");
       menuBar.add(fileMenu);
       //додаємо пункти в меню файл
       JMenuItem openItem = new JMenuItem ("Відкрити");
       fileMenu.add(openItem);
       //додаємо розділювач
       fileMenu.addSeparator();
 
 
       JMenuItem saveItem = new JMenuItem ("Зберегти");
       fileMenu.add(saveItem);
 
       //створити меню "закрити" в якому поряд з написом буде зображення
       JMenuItem closeItem = new JMenuItem ("Закрити", new ImageIcon("CloseIcon.jpg"));
       fileMenu.add(closeItem);
       //додаємо обробник подій використавши безіменний внутрішній клас
       closeItem.addActionListener(new ActionListener( ) {
            @Override
            public void actionPerformed(ActionEvent e) { System.exit(0); }
        });
 
 
       // додаємо гарячу клавіші Ctrl-X до пункту "Закрити" 
        closeItem.setMnemonic(KeyEvent.VK_X);
        closeItem.setAccelerator(
                KeyStroke.getKeyStroke(KeyEvent.VK_X, Event.CTRL_MASK));
 
       // меню "Вигляд"
       JMenu viewMenu = new JMenu("Вигляд");
       menuBar.add(viewMenu);
 
       // меню "Допомога"
       JMenu helpMenu = new JMenu("Допомога");
       menuBar.add(helpMenu);
       // можна використати метод add() 
       // для додавання пунктів в меню зразу ж при створенні
       JMenuItem helpItem = helpMenu.add("Довідка");
       JMenuItem aboutItem = helpMenu.add("Про програму");      
    }   
}
Повний варіант книги знаходиться на Вікіпідручнику

вівторок, 19 червня 2012 р.

Кнопки Java

У Swing кнопки реалізовує компонент JButton. Кнопка генерує подію ActionEvent, коли на неї натискають. Щоб обробити цю подію в програмі реєструється відповідний обробник ActionListener, який повинен реалізовувати метод actionPerformed(). Метод actionPerformed отримує в якості аргумента подію, що відбулася. Крім мітки на кнопці може бути розміщене зображення. Клас JButton має відповідний конструктор для задання напису, зображення або обох зразу. Завантаження зображення здійснює зручний у використанні клас ImageIcon. Наступний приклад демонструє створення кнопки із зображенням та обробки події натиснення кнопки.
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
 
public class PictureButton {
 
    public static void main(String[] args) {
     ButtonFrame frame = new ButtonFrame();
     frame.setSize(300, 100);
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     frame.setVisible(true);
    }
}
 
class ButtonFrame extends JFrame{
 
    JLabel label=new JLabel();
    int i=0;
 
  ButtonFrame(){
    Icon icon = new ImageIcon("icon.gif");
    JButton button = new JButton(icon);
    // додаємо обробник подій, що визначається у внутрішньому класі
    button.addActionListener(new ActionListener( ) {
      public void actionPerformed(ActionEvent ae) {
          i++;
          label.setText("Натиснуто разів: "+ i);
      }  
    }); 
    //встанолюємо менеджер розташування
    setLayout(new FlowLayout( ));
    add(button);
    add(label);
    }
}
 
Якщо ми не використовуємо панелі, то при розміщенні компонентів напряму у фрейм необхідно встановити менеджер розташування, який керує розміщенням елементів один відносно одного (дивіться розділ про менеджери розташування). JFrame немає менеджера розташування по замовчуванню. У JPanel використовується по замовчуванню FlowLayout. Це найпростіший менеджер, який розміщує компоненти один за одним.
Необхідно зазначити, що при натисненні кнопки чи іншого компонента в джава генерується відповідний рядок «діюча команда» чи по іншому «команда дії» (action command). Це просто рядок (String), що дозволяє ідентифікувати компонент, що надсилає подію. По замовчуванню у JButton діюча команда та ж, що і мітка кнопки.
Щоб отримати діючу команду з події, необхідно викликати метод getActionCommand() для відповідної події. Наступний код визначає чи натиснута клавіша Yes:
public void actionPerformed(ActionEvent e){
if (e.getActionCommand( ).equals("Yes") {
 //the user pressed "Yes"; do something
 ...
}
}

Можна змінити діючу команду викликавши метод кнопки setActionCommand(). Наступний рядок змінює команду на «confirm»:
myButton.setActionCommand("confirm");
Використання для кнопок відмінних від їхніх міток діючих команд дозволяє полегшити інтернаціоналізацію інтерфейсу команд. Тобто переведення інтерфейсу з однієї мови на іншу. Так назви кнопок можуть бути записані у файл, який запросто може модифікуватися і його зміна не призведе до необхідності переписування коду програми. Таким чином перекладом інтерфейсу на іншу мову можуть здійснювати і непрограмісти.
Як і у компонента JLabel, написи у JButton можна задавати за допомогою HTML:
JButton htmlButton = new JButton( "<html>"
        + "В<font size=-1>икористовуємо<font size=+0> "
        + "<br> HTML ");

 Повний варіант книги знаходиться на Вікіпідручнику

Мітки Java

Мітка (JLabel) – це рядок тексту або зображення, що розміщується в компоненті. Це один з найпростіших компонентів графічного інтерфейсу. Вони дозволяють задавати вирівнювання тексту (вправо, зліва, по-центру) в середині компонента та не мають особливих подій, які б асоціювалися з ними. Наступний код демонструє різноманітні способи створення міток.
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
 
public class Labels {
    public static void main(String[] args) {
     LabelFrame frame = new LabelFrame();
     frame.setSize(150, 200);
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     frame.setVisible(true);
    }
}
 
class LabelFrame extends JFrame{
    //створюємо панель
    JPanel panel=new JPanel();
 
    LabelFrame(){
     // вирівнювання за замовчуванням (CENTER)
    JLabel label1 = new JLabel("Багато левів, ");
    // вирівнювання вліво
    JLabel label2 = new JLabel("тигрів з тигрицями", SwingConstants.LEFT); 
    // мітка без тексту, вирівнювання за замовчуванням
    JLabel label3 = new JLabel(); 
    // створюємо іконку
    Icon icon = new ImageIcon("icon.gif");
    // створюємо мітку із зображенням
    JLabel label4 = new JLabel(icon); 
    // задаємо текст для label3
    label3.setText("і ведмедів");
    // встановлюємо вирівнювання
    label3.setHorizontalAlignment(SwingConstants.RIGHT);
    //додаємо мітки в панель
    panel.add(label1);
    panel.add(label2);
    panel.add(label3);
    panel.add(label4);
    //додаємо панель у фрейм
    this.add(panel);
    }
}
Константи вирівнювання визначені в інтерфейсі SwingConstants. Щоправда вирівнювання тексту відбувається всередині компоненти Label, тому коли компонента підганяється під розмір вмісту, вирівнювання непомітне. Для зміни кольору і шрифту в класі Component існують методи setFont() та setColor(), які застосовуються не тільки для міток, але й для будь-яких компонентів. В тексті мітки можливе також застосування HTML:
JLabel label=new JLabel ("<html>"+ "S<font size=-2>MALL");

Повний варіант книги знаходиться на Вікіпідручнику

вівторок, 12 червня 2012 р.

Вступ в класи та методи

Клас, метод, ООП

Класи

Класи – це спеціального виду конструкції, які, дозволяють об’єднати ряд змінних різних типів в одне ціле. Крім власне даних, класи зазвичай включають підпрограми (в термінології java - методи) і можуть включати блоки(сукупність інструкцій між фігурними дужками {}) та інші класи(внутрішні класи). Таким чином утворюються нові типи даних.
Роз’яснення принципів побудови і роботи з класами доволі громіздка тема, тому тут розглянемо лише спрощені основи їх роботи і створення. Детальніше дивіться розділ присвячений класам. Розглянути зараз необхідно через те, що Java повністю об’єктно-орієнтована мова і з класами та пов’язаними з ними методами Ви стикатиметесь на кожному кроці. Зокрема навіть вивід даних System.out.prinln(); - здійснюється за допомогою класу System та методу println().
Для прикладу розглянемо наступну задачу: «Ви фанат збору 1 гривневих монет:). Назбирали їх чимало і хочете купити невеличкий сейф, щоб туди вмістилася ваша вся колекція і вбудувати цей сейф у стіну, щоб його з вашою колекцією не вкрали:). В інтернет-магазині вказані розміри сейфу. Постає питання, який же сейф вибрати? Оскільки сейф не один, то щоб не розраховувати вручну кожного разу об'єм сейфу, Ви захотіли написати відповідну програму.»
І так маємо:
/** 
 * CoinVoume.java
 */
public class CoinVolume {
    public static void main(String[] args) {
    double width1=10, height1=15, depth1=20;
    double width2=15, height2=20, depth2=15;
    double width3=15, height3=25, depth3=15;
 
    int    cointAmount=15000; //кількість монет - непогано зібрав :)
    double coinVolume=2*2*0.1; //приблизний об'єм монети=2*діаметр*товщину
    double safeVolume1;
    double safeVolume2;
    double safeVolume3;
    double totalCoinVol;
 
    totalCoinVol=cointAmount*coinVolume; // заг. об'єм, який займають монети
 
    safeVolume1=width1*height1*depth1; //об'єм першого сейфу
    safeVolume2=width2*height2*depth2;  //об'єм другого сейфу
    safeVolume3=width3*height3*depth3;  //об'єм третього сейфу
 
 
    System.out.println("Об'єм 1-го сейфу="+safeVolume1);
    System.out.println("Об'єм 2-го сейфу="+safeVolume2);
    System.out.println("Об'єм 3-го сейфу="+safeVolume3);
 
    System.out.println("Загальний об'єм монет="+totalCoinVol);
    }
}

Результат виконання:
Об'єм 1-го сейфу=3000.0
Об'єм 2-го сейфу=4500.0
Об'єм 3-го сейфу=5625.0
Загальний об'єм монет=6000.0 
Як бачимо з трьох не підійшов жоден, потрібен більший. Проте додавання кожного нового сейфу вимагає дописування доволі багатьох інструкції. Потрібно оголошувати три змінні для довжини, ширини та глибини сейфу, також потрібна змінна для об’єму та додавати інструкції обчислення та виводу на екран результатів. Звичайно, можна оцінювати по одному змінюючи значення змінних, але тоді прийдеться кожного разу перекомпільовувати і запускати програму. А якщо ви захочете ще раз оцінити розміри деяких сейфів, прийдеться виконувати роботу ще раз. Ось тут в пригоді і стане нам клас Safe. Зверніть увагу, що назва класу пишеться з великої букви. Рекомендовано давати назви класів з великої. Таким чином дуже просто розрізнити його від інших складових програми, наприклад назву класу від назви змінної, які прийнято називати з маленької букви.
Оголосити найпростіший клас можна так:
class Safe{
    double width;
    double height;
    double depth;
    double safeVolume;
}
Для його оголошення використовується ключове слово class та назва класу, далі іде тіло класу у фігурних дужках {}. Проте, хоч клас існує, ми не можемо так просто його використовувати. Ми повинні спочатку створити екземпляр даного класу (об’єкт). Для цього необхідно написати наступну інструкцію:
Safe mySafe1=new Safe();
де Safe – назва класу, mySafe – назва змінної, яка посилатиметься на наш об'єкт, new Safe() – створює об’єкт(при цьому відбувається виділення пам’яті під об’єкт). Таким чином ми створили перший сейф. Щоб створити другий сейф використовується аналогічна інструкція:
Safe mySafe2=new Safe(); //як бачимо змінилась лише назва змінної
Інколи класи порівнюють з формочкою для випічки печива, а саме печиво – це уже конкретний створений екземпляр (об’єкт). Форма може бути одна, а печива на її основі можна зробити безліч із різною начинкою. Так сама і з класом – це шаблон, а на його основі можемо створити безліч екземплярів даного класу.
Проте як же ми можемо звернутися до змінних об’єкту? Для цього використовується операція «.»(точка), а сама інструкція звернення в такій формі - назваОб’єкту.змінна:
mySelf1.width=10;
Перепишемо нашу програму з використанням класу Safe:
class Safe{
    double width=0;
    double height=0;
    double depth=0;
    double safeVolume=0; //додамо змінну, в якій зберігатиметься об'єм сейфу
}
public class CoinVolume {
    public static void main(String[] args) {
    //створюємо перший сейф
    Safe mySafe1=new Safe();
    //вказуємо його розміри
    mySafe1.width=10;
    mySafe1.height=15;
    mySafe1.depth=20;
    //обчислюємо об'єм сейфу
    mySafe1.safeVolume=mySafe1.width*mySafe1.height*mySafe1.depth;
 
    //аналогічно для другого сейфу
    Safe mySafe2=new Safe();
    mySafe2.width=10;
    mySafe2.height=15;
    mySafe2.depth=20;
    mySafe2.safeVolume=mySafe1.width*mySafe1.height*mySafe1.depth;
 
    //виводимо на консоль об'єми сейфів
    System.out.println("Об'єм 1-го сейфу="+mySafe1.safeVolume);
    System.out.println("Об'єм 2-го сейфу="+mySafe2.safeVolume);
    }
}
Щоб зосередитись на основному, з програми усунено обчислення об’єму монети. Компіляцію програми здійснюємо так же само як і попередню, за назвою класу в якому знаходиться метод main()— javac CoinVolume.java. Клас Safe не обов'язково може бути в одному і тому ж файлі, що і клас CoinVolume.
І так клас ми добавили, проте тепер вона виглядає складнішою ніж попередній варіант. Ситуацію виправити може використання методів.

Методи

Методи в java – це аналог підпрограм, функцій, процедур в інших мовах програмування. За допомогою методів ми виносимо текст повторюваного коду програми окремо в тіло методу, після чого можна викликати даний метод з будь-якого місця програми, безліч разів.
Спрощене оголошення та визначення методу, який ми зараз будемо використовувати, має вигляд:
тип_повернення  назва_методу(параметри){

//тіло методу;
інструкція1;
інструкція2;
…..
інструкціяN;
}
Тип_повернення – результат виконання методу, наприклад він може повертати об’єм сейфу, тоді тип_повернення буде double. Якщо метод нічого не повертає, то вказується слово ключове слово void.
Виклик методу здійснює наступна інструкція: назва_методу(параметри). Взагалі в термінології мов програмування для виклику методу використовуються аргументи, а в самому методі – це уже параметри, оскільки передаються лише значення змінних, а не самі змінні. Аргументи та параметри повинні бути одного і того ж типу. Якщо ми передаємо цілочисельне значення, то і параметр повинен бути цілочисельним і т.п. Тобто в методі створюються нові змінні. В деяких мовах, наприклад в С++, як аргумент можна передати посилання на певну змінну, таким чином її можна буде модифікувати в функції через вказівник на дану змінну. В Java в метод передаються лише значення змінних, тому розрізнення аргументів і параметрів менш суттєве і ми там і там використовуватимемо термін «параметр». Об'єкти ж в методи передаються по посиланню. Тобто, при передачі в якості аргументу об'єкта, буде передане посилання на об'єкт, а не створений новий об'єкт.
Повернемось до нашої програми. Повторюваними є присвоювання значень змінним, обчислювання та вивід об’ємів. Тому корисно буде створити два методи safeValue (double width, double height, double depth) та safeVolume (). Перший для присвоєння змінним значень, а другий для обчислення об'єму.
Модифікована програма матиме вигляд:
class Safe{
    double width=10; // поля класу можуть бути ініціалізовані з самого початку
    double height=10;
    double depth=10;
    double safeVolume=0;
 
    // метод присвоєння значень змінним
    void safeValue(double aWidth, double aHeight, double aDepth){
        width=aWidth;
        height=aHeight;
        width=aWidth;
    }
 
    // метод для обчислення об'єму сейфа
    double safeVolume(){
        return width*height*width;
    }
}
public class CoinVolume {
public static void main(String[] args) {
    double width1=10, height1=20, depth1=40;
    Safe mySafe1=new Safe(); //створюємо перший сейф
    Safe mySafe2=new Safe(); //створюємо другий сейф
 
    //задаємо розміри сейфу
    //викликаємо метод safeValue() класу Safe, що ініціалізує поля об'єкту
    mySafe1.safeValue(width1,height1,depth1);
    mySafe2.safeValue(10.0, 15.0, 15.5); //можна і так
 
    //виводимо на екран об'єми сейфів
    //для чого викликаємо метод safeVolume(), який повертає обчислений об'єм кожного сейфу
    System.out.println("Об'єм 1-го сейфу="+mySafe1.safeVolume());
    System.out.println("Об'єм 2-го сейфу="+mySafe2.safeVolume());
    }
}
Як бачимо код програми спростився. Тепер набагато легше модифікувати програму, додаючи нові сейфи. Крім того можна наприклад вивід повідомлення з інформацією про об’єм розмістити метод safeVolume() або в окремий метод, наприклад, printVolume().
Слід зауважити, щодо назв змінних-параметрів. Так для висоти, широти та глибини в методі safeValue() вибрані назви aWidth, aHeight, aDepth. Вони могли б мати назви і просто width, height, depth, але тоді б вони перекрили б доступ до однойменних змінних класу. В такому випадку, щоб звернутися до змінних класу з методу необхідно вживати ключове слово this. Наприклад: this.height=height - тут ми присвоюємо змінній класу this.height одержаний методом параметр height.

Конструктори

Замість методу safeValue(), який в нас заповнює змінні об’єкту значеннями ми можемо створити метод, який буде мати назву таку ж як і клас, тобто Safe(aWidth, aHeight, aDepth). Це дасть нам можливість ще скоротити програму, оскільки при створенні об’єкту ми зможемо зразу ж задавати розміри сейфу.
Safe mySafe1=new Safe(10.0, 15.0, 20.0)
Такі методи носять назву “конструктор класу”. Коли ми писали просто new Safe(); то віртуальна машина використовувала конструктор по замовчуванню без параметрів, який практично нічого корисного для нас не робив. Тепер же ми можемо використовувати новий створений нами конструктор.
Таким чином, новий варіант програми:
class Safe {
    final double width;
    final double height;
    final double depth;
 
    // конструктор
    Safe(double pWidth, double pHeight, double pDepth) {
        width = pWidth;
        height = pHeight;
        depth = pDepth;
    }
 
    // обчислюємо об'єм сейфу
    double getVolume() {
        return width * height * width;
    }
 
}
 
public class CoinsVolume {
    public static void main(String[] args) {
        double width1 = 10, height1 = 20, depth1 = 40;
        Safe safe1 = new Safe(width1, height1, depth1); // створюємо 1-й сейф
        Safe safe2 = new Safe(10.0, 15.0, 20.0); // створюємо 2-й сейф
        Safe safe3 = new Safe(10.3, 15.4, 20.5); // створюємо 3-й сейф
        Safe safe4 = new Safe(20.0, 30.0, 20.0); // створюємо 4-й сейф
 
        printSafeVolume(safe1, 1); // виводимо об'єм 1-го сейфу
        printSafeVolume(safe2, 2);
        printSafeVolume(safe3, 3);
        printSafeVolume(safe4, 4);
    }
 
    // вивід об'єму сейфу
    // safe - сейф
    // number - номер сейфу
    static void printSafeVolume(Safe safe, int number) {
        System.out.println("Об'єм " + number + "-го сейфу=" + safe.getVolume());
    }
 
}
Результат виконання:
Об'єм 1-го сейфу=2000.0
Об'єм 2-го сейфу=1500.0
Об'єм 3-го сейфу=1633.786
Об'єм 4-го сейфу=12000.0 
В наведеному прикладі, щоб обчислити об’єм нового сейфу, нам потрібно додати лише два рядочки тексту (дві інструкції). Щоправда навіть це можна автоматизувати за допомогою використання іншого типу даних – масивів, які будуть розглядатися пізніше. Можна також додати клас Coin, в якому був би метод для обчислення сукупного об’єму різноманітних монет. Ви можете спробувати зробити таку програму зараз. Це буде корисним для засвоєння викладеного матеріалу.
Тема класів та методів значно комплексніша, тому основне, що Ви повинні винести з даного розділу -це розуміння того, як використовуються методи класів. Java надає великий набір уже готових класів та методів, які значно спрощують роботу програміста.

Повний варіант книги знаходиться на Вікіпідручнику

неділю, 15 січня 2012 р.

Як створити блог. Де завести?

Зацікавилися блогами і блогуванням. Тоді ця стаття для Вас. Як показує власний досвід переважно більшість блогерів проходять наступну еволюцію:

  1. виникає бажання щось написати і розмістити де небуть
  2. виникає бажання створити повноцінний блог з власним інтерфейсом та інтернет адресою
  3. виникає бажання заробити на блозі


Якщо ви просто хочете писати статті не переживати про оформлення вашого блогу, то тут вибір доволі обширний, багато сайтів запрошують авторів до співпраці заради наповнення власного вмісту і навіть блогери практикують таке, оскільки самому писати статті і розкручувати блог доволі трудомістка задачі. Можна завести блог наприклад на Живому журналі (http://www.livejournal.com). Якщо ви цікавитися політикою можна писати на (http://politiko.ua).   Але рано чи пізно, ви скоріше за все задумаєтеся створити повноцінний блог із своїм оформлення, або ж навіть з метою заробітку. Тут уже потрібно більш серйозніше підійти до справи. І тут у вас два шляхи:

1) безкоштовний блог
2) платний блог

Другий варіант дає найбільшу свободу, але одночасно і найбільш трудомістий. Ви наприклад можете створити повністю блог з нуля придбавши місце на котромусь сервері та інтернет адресу, потім або написати його самому або використати якусь із популярних систем керування вмістом (CMS) з готовими шаблонами (Wordpress, Joomla, Drupal ). Якщо вам звичайно це не лякає і вам не шкода 400-500 грн в рік, то вперед. Але здебільшого викинути таку суму зразу ж шкода. Цей варіант найбільш прийнятний для досвідчених блогерів і коли ви впевнені, що Ваш блог приноситиме відчутну користь Вам. Існують і доволі непогані сервіси платних блогів за невелику ціну. Проте, якщо ви просто хочете спробувати вести свій блог, то можна обійтися цілком і безплатними сервісами.

В інтернеті ви зустрінете чимало статей з розповідями як створити блог на конкретному ресурсі. Проте, чимало таких статей часто пишуть власники цих же самих місць, з метою приваблення потенційних клієнтів. Крім того здебільшого при створені блогу перед вами ставлять певну вимогу, наприклад, що на ваших блогах буде обов'язкова реклама або прийдеться платити за певні додаткові можливості. Особливо такі обмеження стають відчутні при спробі заробити на власному блозі. Тому при вибору місця розміщення вашого блогу зверніть увагу на обмеження, платні послуги і чи маєте ви доступ до початкового коду сторінки або чи ви хоча б можете запускати ДжаваСкрипти і в яких місцях їх розміщувати.  Адже при розміщенні реклами, наприклад, від Google AdSense вам прийдеться розміщувати невеликий JavaScript у місці появи рекламного банера.  Інколи Вас можуть і не попереджувати про певні обмеження, проте після написання кількох дописів ви можете виявити ці обмеження.  В такому випадку сміло заводьте блог на іншому ресурсі. Буде дуже школа, коли ви потратите кілька місяців, розкрутити власний блог до пів тисячі відвідувань в день, вирішите монетизувати свій блог, а тоді виявиться, що вам бракує вільного місця для нових дописів, або ви не можете розмістити рекламу і за це потрібно платити. Сам на власній шкурі пережив таке..

Випробувавши кілька безкоштовних місць для ведення блогу, можу заявити, що найкращими для цього є wordpress.com та blogger.com.  Щоправда на wordpress.com заборонено розміщувати рекламу при безплатному сервісі. Проте там практично відсутні обмеження, плюс ви освоїте можлиовсті однієї з найпотужніших систем керування вмістом Wordpress, яку можна окремо поставити на власному хостінгу і плюс якої велика кількість готових шаблонів сайтів. Тому для тих хто не планує заробляти на блозі, це найкращий варіант. Особливо для інформаційних ресурсів.

Другий варіант - blogger.com від компанії google, поступається wordpress.com в плані зручності. Проте великим плюсом є можливості встановлення реклами, наявність шаблонів хоч і не такої кількості як на wordpress, проте їх можна налаштувати під власні смаки і головне є доступ до початкового коду і можливість запускання JavaScript, відсутні чужі рекламні банери. Для першого блогу для заробітку доволі хороший варіант, де ви зможите освоїти усі аспекти блогінгу від створення до розкрутки і монетизації.

В наступній статті я розкажу як створити і налаштувати блог на blogger.com.

четвер, 29 грудня 2011 р.

Підсвітка синтаксису на Blogger.com

Вирішив я попробувати блогерського щастя на blogger.com. Отримав красивий URL з закінченням blogspot.com і почав створювати статті. Перша ж незручність - це відсутність підсвітки синтаксису коду програм. Почав шукати як підключити, знайшов, проте коли почав експериментувати, чомусь ряд прикладів зі встановлення не запрацювало. Частково мабуть через те, що деякі статті були погано розписані, частково мабуть через те, що я не до кінця зрозумів як. Тут я вирішив навести, те, що в мене без проблем вийшло і запрацювало.

Перше, що я знайшов, як дещо покращити зовнішній вигляд коду задавши стиль для тегу <pre>. Для цього достатньо в оригінальний код додати наступний код:
pre {
  background-color:#FCFBF8;
  border-color:#CCCCCC;
  border-style:solid;
  border-width:1px 1px 1px 1px;
  line-height:1.2em;
  margin:1em auto;
  overflow:auto;
  padding:1em;
  width:90%;
  word-wrap:normal; /* IE Fix */
}

Я це зробив за допомогою переходу на Шаблон/Налаштування/Додатково у списку знаходемо "Додайте CSS". Додаємо і зберігаємо. Можна також вставити і напряму в код шаблону. Тепер усе, що треба це взяти наш код у тег <pre>. Одержуємо код в рамочці із смугами прокрутки, а хотілося б все ж підсвітку синтаксису.

Тому наступні мої пошуки привели до наступного способу. Заходимо в пункт "Шаблон" і тиснемо кнопку "Редагувати HTML" і там перед тегом <head> вставляємо:

<link href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' rel='stylesheet' type='text/css'/> 

<link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css' rel='stylesheet' type='text/css'/> 

<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js' type='text/javascript'></script> 

<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js' type='text/javascript'></script> 

<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCSharp.js' type='text/javascript'></script> 

<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js' type='text/javascript'></script> 

<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js' type='text/javascript'></script> 

<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js' type='text/javascript'></script> 

<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js' type='text/javascript'></script> 

<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPython.js' type='text/javascript'></script> 

<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushRuby.js' type='text/javascript'></script> 

<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js' type='text/javascript'></script> 

<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushVb.js' type='text/javascript'></script> 

<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' type='text/javascript'></script> 

<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPerl.js' type='text/javascript'></script> 

<script language='javascript'> 

SyntaxHighlighter.config.bloggerMode = true;

SyntaxHighlighter.config.clipboardSwf = 'http://alexgorbatchev.com/pub/sh/current/scripts/clipboard.swf';

SyntaxHighlighter.all();

</script>
Для пришвидшення завантаження сторінки в браузері можна викинути деякі рядки з мовами, які Ви не збираєтесь використовувати. Якщо потрібно лише кілька мов, викидаємо зайві рядки. Тепер обрамляємо наш текст тегами <pre> з вказанням відповідної мови:

<pre class="brush: html">

</pre> 

Дивіться також: