пятница, 30 января 2015 г.

JButton и как сделать программу окошком с картинкой

ОХ ТЯЖЕСТЬ
Создаем класс GUI
импорт всех этих библиотек
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;

далее по сценарию:
public class GUI extends JFrame{ - встроенные JFRAME 
private JButton reg; - создаем 2 переменныех reg И custom - кнопки(JButton Тоже встроено
private JButton custom;
public GUI(){ создаем метод
super("the title");  - супер как мы помним это то, что отображается на окне- типо ярлычка с надписью
setLayout(new FlowLayout()); - стандартный лэйаут
reg= new JButton("Press regular"); - пишем что будет на обычной кнопке
add(reg); - добавляем
И ТУТ ИНТЕРЕСНОЕ
Icon b=new ImageIcon(getClass().getResource("2269072(39x26).png")); подключаем иконки которые будут на кнопке CUSTOM( добавляем картинки так- находим где workspace и кидаем в нужный нам package-src картинки 40х40 png. и потом в эклипсе обновляем refresh src И вуаля они там

Icon x=new ImageIcon(getClass().getResource("2269072(40x27).png")); - тоже самое для другой картинки- которая будет rollover
custom = new JButton("Custom", b); - Jbutton встроена- устанавливаем значение custom- потому что в кавычках- надпись, и b- это иконка
custom.setRolloverIcon(x); - эта строчка настроит ролловер то есть когда наводим курсор
add(custom); - не забываем добавлять
}
}
Далее нам нужно сделать что б что-то происходило

и мы создаем новый класс в классе GUI(тут будет пока ошибка на полях выскакивать- ничо страшного)

HandlerClass handler= new HandlerClass(); создали новый класс to handle the events when we click buttons
reg.addActionListener(handler); - добавляем листнер на обычную кнопку
custom.addActionListener(handler); - и на кастом кнопку
}
все, что здесь описано - мы сделали конструктор
Дальше поступаем так:
создаем новый класс вне конструктора что бы что-то хоть происходил
о и он будет прайват
             private class HandlerClass implements ActionListener{    дада мы можем создавать классы внутри классов(этот класс будет использован в конструкторе при запуске проги)
implement means that we want to use your class in our methods.but we have to override it

              public void actionPerformed(ActionEvent event){   создаем метод, который будет сообщать чего мы хотим когда нажимаем на buttons
               JOptionPane.showMessageDialog(null,String.format("%s", event.getActionCommand()) ); } - we want a window to popup, and show message dialog with parametrs(null-positioning,.String.format-puts string on a screen, "%s" just gives spase, and event.getActionCOmmand)
}
Идем в класс ЭППЛС
импорт
import javax.swing.JFrame; что б использовать окна
class apples {
public static void main(String[] args){
GUI go=new GUI();  - подключаем класс гуи
go.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);- указываем как закрыться программе
go.setSize(300,200); - размеры окна
go.setVisible(true); - прозрачность- boolean- либо да либо нет.
}
и результат:



Simple polymorphic program

ПОлиморфизм шо это помним? Ага, когда наследуется метод и тд.
пример
суперкласс
public class Animal {
public void noise(){
System.out.println("animals dont make noise");
}
}
подклассы
public class Fish extends Animal {
public void noise(){
System.out.println("slurp");
}
}
public class Dog extends Animal{
public void noise(){
System.out.println("guh");
}
}
и класс MAIN
class apples {
public static void main(String[] args){
Animal[] the list=new Animal[2];  - создаем эррэй типа Энимал, который будет еще и фищ и дог потому что те его экстенд
         Dog d=new Dog();  - и создаем 2 объекта дог и фиш
         Fish f=new Fish();
}
}
результат
guh 
slurp 

Class to hold Objects! and ARRAY HOLDING many objects


 Создаем новые кассы. dog, fish, animal
создаем класс dogList  и ниже в картинках что и как


ARRAY HOLDING many objects

Карочи
нам нужно создать единый лист, где будут отображены все классы. помним- animal- суперкласс, dog & fish extends it, so, создаем единый лист- AnimalList. и уже в нем создаем массив array- 
public class AnimalList {

private Animal thelist=new Animal[5]; - ОЧЕНЬ ВАЖНО ЗДЕСЬ МЫ ИСПОЛЬЗУЕМ ANIMAL а не ANIMAL LIST
}
создаем counter variable
private int i = 0;
и далее уже сам метод
public void add(Animal a){   -so now it takes 1 perametrs animal object 
if (i<thelist.length){    - 5 in this case
thelist[i]=a;      
System.out.println("animal added at index "+i);
i++;
so each times it runs it changes the counter variable
идем в класс MAIN- у нас apples И пишем след
class apples {
public static void main(String[] args){
AnimalList ALO=new AnimalList();   - создаем объекты
Dog d = new Dog();  -создаем объекты
Fish f= new Fish();    - создаем объекты
ALO.add(d);    - вызываем метод из класса AnimalList
ALO.add(f);   - вызывает метод из класса AnimalList
}
}
результат вывода
animal added at index 0
animal added at index 1
















ABSTRACT AND CONCRETE CLASSES -58

Abstract is a class that you cannot create objects from, but it can be usefull for things such as inheritance and polymorphism.By the way METHODS CAN BE ABSTRACT TOO!- is a method that must be overriden.
public abstract void eat(); - ему не нужно тело, Раз в туне есть вот это
public class tuna extends food{
void eat(){
System.out.println("This tuna really is great");
}
раз используется абстрактный метод, класс ОБЯЗАН быть тоже абстрактным!
И раз мы в суперклассе сделали абстрактный метод публичным, то он должен быть публичным в классе, который продолжает суперкласс.
Суперкласс может быть абстрактным, но метод не обязан.
Но если есть абстрактный метод- класс должен быть абстрактным тоже.
any time you have an abstract method in a superclass, the subclass that extends that superclass- has to use that method also(implement, override)

concrete class that is specific anought that can create an object

четверг, 29 января 2015 г.

Override and Overload / abstract

Override- Это например у нас есть суперкласс и два подкласса которые его экстенд.
например в суперклассе написано след.
public class food {
void eat(){
System.out.println("This food is great");
}
а в подклассах, которые его экстенд тоже самое но с измененным текстом
public class potpie extends food{
void eat(){
System.out.println("This potpie is great");
}
карочи
представим что у нас есть комп игра, в которой есть босс и есть прихвостни.
Вот суперкласс- это босс, а прихвостни это подклассы которые экстенд этот суперкласс
то есть в боссе будут такие плюшки как рост, сила, количество хп и тд
мы наследуем все это в прихвостнях, Но с некоторыми изменениями. Например нам нужно будет сделать им гораздо меньше хп- вот в подклассы мы экстенд суперкласс- и унаследуем все, что есть у босса, НО С изменениями в ХП- просто перезапишем. НО! перезаписываемый метод не должен менять своей сути, то есть если у нас метод с интегралами в суперклассе, он должен быть с интегралами и в подклассе. если нет аргументов у метода в суперклассе, значит не должно их быть и в подклассе. это важно!

Overloading- это метод с таким же именем, но с другими аргументами.
например вот тут
public class potpie extends food{
void eat(int x){ вот тут мы можем добавить другие аргументы, но тогда это будет абсолютно другой метод

ABSTRACT CLASS- means is that you can not create an object from that class, but you can use that class for things like inheritance , polimorphism , and stuff like that .example is FOOD class- its general, but nothing specific, and you dont want anybody to change that.





Polymorphism

Полиморфизм — одна из трех основных парадигм ООП. Если говорить кратко, полиморфизм — это способность обьекта использовать методы производного класса, который не существует на момент создания базового. http://java-course.ru/begin/polymorphism/
Полиморфизм как бы группирует однотипные классы под одним "интерфейсом".
Пример
public class food {
void eat(){ - создаем метод
System.out.println("This food is great");
}

}
public class potpie extends food{
void eat(){
System.out.println("This potpie is great"); - оверрайт метода из фуда делаем своим текстом
}
}
public class tuna extends food{
void eat(){
System.out.println("This tuna really is great");-так же оверрайд фуда
}
}
class apples {
public static void main(String[] args){
food bucky[]=new food[2]; - создаем ARRAY 
bucky[0]=new potpie(); - 1 эррэй
bucky[1]=new tuna(); -2 эррэй
for(int x=0; x<2; ++x){ - фор луп
bucky[x].eat();
}
}
}
И результат такой:
This potpie is great
This tuna really is great

So, basically polymorphic arrays are a way to extent the idea of the class hierarchy? You're array being cast as a superclass type lets you hold an infinite number of subclass types, each with their own unique behavior.  
Basically Polymorphism is were you have a basic class with all of the details. And your polymorphic classes and methods are those who take those variables and the data and change them (morph) to be that thing by adding the specific details that make up the thing (For example Skin Sinze And Attack Method)
----------------------------------------------------------------------------------------------------------------------------------------------------------------

ЕЩЕ 1 очень странная штука, которую объяснить крайне сложно
polymorphic arguments
создаем еще 1 класс fatty например
public class fatty {

public void digest(food x){   -- eat уже нельзя использовать т.к. в употреблении
x.eat();   -указываем какой метод будет использован
}
}
идем в класс apples и начинается интересное
class apples {
public static void main(String[] args){
fatty bucky=new fatty();   - создаем объект bucky что б можно было использовать все в классе фэти
food fo=new food();   -это для метода дайджест, потому что фуд обжект как аргумент взял
food po=new potpie(); -это сабкласс класса суперкласс фуд
bucky.digest(fo);         - колл баки обжект with digest as the food object as my argument
bucky.digest(po);         -called potpie object as my argument
}
}
РЕЗУЛЬТАТ:
This food is great
This potpie is great













среда, 28 января 2015 г.

Event Handler -- Action Listner -- 52-53-54

events на компьютерном языке- юзер может подвигать мышкой, нажать энтер, тыкнуть на кнопку и тд what user does
event handler- это код, который responds to mouse movement and etc.  what computer does when the user clicks etc.
and this overall process is called an EVENT HANDLING

начинаем в майнор классе с импорта библиотек
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JFrame;   ----- lets us use windows
import javax.swing.JTextField;
import javax.swing.JPasswordField;
import javax.swing.JOptionPane;

public class tuna extends JFrame{  // extends JFrame- means it lets us use a window
private JTextField item1; - cоздаем окна 1
private JTextField item2; -окно 2
private JTextField item3; - окно3
private JPasswordField passwordField; - создаем парольное поле
public tuna(){  - создаем конструктор
super("HELLO PUPSIK");   - заголовок окна
setLayout(new FlowLayout()); -- стандартный лэйаут
item1=new JTextField(10);--- 1 окошко 10 пикселей
add(item1); - добавляем его
item2=new JTextField("enter text here");--- второе окошко с надписью
add(item2); - добавляем
item3=new JTextField("uneditable", 20); - 3 окошко с надписью определенной величины
item3.setEditable(false); - это делает так, что б его нельзя было редактировать и чтолибо делать
add(item3);- добавляем
passwordField=new JPasswordField("pass"); - последняя прайват переменная у нас парольная
add(passwordField); - добавляем
}

}
}

--------------------------------------------------------------------------------------------------------
ЭТО БЫЛА ПЕРВАЯ ЧАСТЬ ПОСТРОЕНИЯ ИНТЕРАКЦИОННОГО ОКОШКА
----------------------------------------------------------------------------------------------------------
ТЕПЕРЬ
нам необходимо добавить в туну Action Listener и thehandler- штука отвечающая за реакцию на вводимую человечишками херню


thehandler handler = new thehandler();
item1.addActionListener(handler);
item2.addActionListener(handler);
item3.addActionListener(handler);
passwordField.addActionListener(handler);

}
private class thehandler implements ActionListener{
public void actionPerformed(ActionEvent event){
String string=" ";
if(event.getSource()==item1) - if they type something is here
string=String.format("field1:%s", event.getActionCommand()); -we gonna put whatever they typed in and write field 1: blah blah
else if (event.getSource()==item2)
string=String.format("field2:%s", event.getActionCommand());
else if (event.getSource()==item3)
string=String.format("field3:%s", event.getActionCommand());
else if (event.getSource()==passwordField)
string=String.format("passwordField:%s", event.getActionCommand());
JOptionPane.showMessageDialog(null, string); - создаем окно
}
}



ЭТО ТРЕБУЕТ ДОРАБОТКИ ВСЕ