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

GUI !! and GUI with JFRAME

Graphic User Interface Finally something fun :)

первым делом нам нужно сообщить яве что будем использовать javax и подключаем ее
import javax.swing.JOptionPane;
далее создаем сообщения которые будут в диалоговых окнах
class apples {
public static void main(String[] args){
String fn=JOptionPane.showInputDialog("enter first number"); - как только мы введем число и нажмем в появившемсся диалогом окне ОК - она будет сохранена в значении fn
String sn=JOptionPane.showInputDialog("enter second number"); - как только введем число и нажмем ОК- число будет сохранено в переменной sn
since мы создали переменные STRING- они не могут вычисляться, нам нужно что б значения вводимые были интегралами

int num1=Integer.parseInt(fn); - как только мы нажимаем ок в окошках, значение String преобразуется в интеграл
int num2=Integer.parseInt(sn);
теперь создаем переменную складывания из предыдущих уже интегралов
int sum=num1+num2;

теперь создаем финальное диалоговое окно где
NULL- позиция всплывающего окна
the sum is + sum - это то, что будет отображаться в окошке надписью,
THE TITLE- то, что будет отображено в названии окошка
и JOptionPane.PLANE_MESSAGE это позволяет добавлять иконки в интерфейс- но тут мы без них поэтому и плэйн

JOptionPane.showMessageDialog(null, "the sum is"+ sum, "the title", JOptionPane.PLAIN_MESSAGE);

}
}


GRAPHIC USER INTERFACE WITH JFRAME
______________________________________________________

работает с двумя классами: apples and tuna
в класс туна сначала нужно импортировать библиотеку
import.java.aws.FlowLayout; - это будет отображать как вещи расположены default layout managing
import javax.swing.JFrame;- это будет отвечать за то, basic windows features title bar, minimize, close, x etc.
import javax.swing.JLabel; - это позволяет текст, картинки
далее нам необходимо сообщить что данный класс будет наследовать возможности JFrame- подключаем:

public class tuna extends JFame{
создаем переменную типо JLabel 
private JLabel item1;
и далее конструктор:
public tuna(){ super("The title bar"); - супер это тайтл бар( и надпись которую он передает) setLayout(new FlowLayout()); -----(это лайаут)
item1=new JLabel("this is a sentance"); - указываем что айтем1- это окошко 1, И надпись item1.setToolTipText("this is gonna show up on hover"); - это то, что будет всплывать при наведении курсора add(item1); -- и для того, что б это все заработало обязательно нужно сделать ADD этого всего - то есть item 1
идем в главный класс apples и подключаем библиотеку jframe
import javax.swing.JFrame;
и начинаем- создаем объект- bucky в туне
class apples { public static void main(String[] args){ tuna bucky=new tuna(); bucky.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - это будет закрывать окошко когда жмем крестик bucky.setSize(275,180);- это размеры окошка bucky.setVisible(true); - это подложка

INHERITANCE наследование и OVERRIDE наследования

где-то тут уже писала об этом. но не суть. ТОЛЬКО ПУБЛИЧНЫЕ МЕТОДЫ МОГУТ НАСЛЕДОВАТЬСЯ из суперкласса!
наследование- пример:
tuna and potpie are gonna inherite all the stuff of a SUPERCLASS food
используется EXTENDS
карочи
у нас есть класс food , и есть классы туна и потпай , мы хотим что б туна и потпай выполняли функции класса фуд.
соответственно код:
public class food {
public void eat(){
System.out.println("I am the eat methods");
}
}
public class potpie extends food{
}
public class tuna extends food{
}
это значит что то, что написано в методах класса фуд- теперь в классах потпай и туна.
Возвращаемся к главному классу apples:
код такой
class apples {
public static void main(String[] args){

tuna tunaObject = new tuna(); --- создаем объекс класса
potpie potObject= new potpie(); ------создаем объект класса
tunaObject.eat();------пишем функцию(смотрим на класс фуд- который нам дает метод EAT)
potObject.eat();
}
}
и результат напечатки на экран будет такой:
I am the eat methods
I am the eat methods

НО ЧТО ЕСЛИ МЫ ХОТИМ ЧТО БЫ КЛАСС ВЫПОЛНЯЛ КАКИЕ-ТО ФУНКЦИИ ИЗ НАСЛЕДУЕМОГО КЛАССА ИНАЧЕ? мы просто перезаписываем то, что нам требуется, а остальные функции будут выполняться как в суперклассе:
пример:
public class tuna extends food{
public void eat(){
System.out.println("I am the new method of tunas");- просто OVERRIDE сделали метода. 
}
}
результат:
I am the new method of tunas













Final

final= это значит, что как только мы дали ему значение, Оно не изменится
вот пример
public class tuna{
private int sum;   - создаем переменную сам
private final int NUMBER; - создаем переменную FINAL INT и имя переменной должно быть капсом

public tuna(int x){ - здесь создаем временную переменную икс
NUMBER=x; - и приравниваем иск к намберу
}
public void add(){ - здесь создаем метод приплюсовки что сам будет равен саму плюс намберу
sum+=NUMBER;
}
public String toString(){   - и создаем метод напечатки
return String.format("sum =%d\n", sum); sum= пробел и уже число
}
}
идем в класс apples
class apples {
public static void main(String[] args){

tuna tunaObject=new tuna(10); - создаем объект туны и устанавливаем значение 10 pass the parameter 10 for the constructor and set number equal to ten( ТЕПЕРЬ NUMBER = 10!!)
for(int i=0;i<5; i++){  - создаем фор луп - количество строк с нуля, пока не будет их пять, и каждый раз прибавлять по 1
tunaObject.add(); - и что ж мы тут делаем? мы делаем метод add из класса tuna 5 раз
System.out.printf("%s", tunaObject);- и 5 раз вывели
}

}
}

Static

статик- это когда всем объектам нужно share одну переменную
вообщем: представим что у нас есть какой-то клуб, и нам нужно посчитать сколько там людей. количество людей и есть статик- то, что все они делят
Соответственно вот код для туны:
public class tuna{
private String first; - создаем переменные имя
private String last; - создаем переменные фамилия
private static int members=0;  - создаем переменную члены клуба- и это интеджер(он общий потому что статик)
public tuna(String fn, String ln){   - задаем аргументы для публичного метода
first=fn;   - приравниваем
last=ln;
members++; - счетчик помним начинаетсяя с нуля- но с каждым членом увеличивается на 1!
System.out.printf("Constructor for %s %s, member of the club: %d\n", first, last, members);
}
и для эпплс: 
class apples {
public static void main(String[] args){
tuna member1=new tuna("Megan", "fox");
tuna member2=new tuna("Natalie ", "portman");
tuna member3=new tuna("Tailor", "swift");
}
}
результат:
Constructor for Megan fox, member of the club: 1
Constructor for Natalie  portman, member of the club: 2
Constructor for Tailor swift, member of the club: 3


и еще можно во как сделать:
,берем старый пример и просто дополняем его
public class tuna{
private String first;
private String last;
private static int members=0;

public tuna(String fn, String ln){
first=fn;
last=ln;
members++;
System.out.printf("Constructor for %s %s, member of the club: %d\n", first, last, members);
}

public String getFirst(){
return first;
}
public String getLast(){
return last;
}
public static int getMembers(){
return members;
}
class apples {
public static void main(String[] args){
tuna member1=new tuna("Megan", "fox");
tuna member2=new tuna("Natalie ", "portman");
tuna member3=new tuna("Tailor", "swift");
System.out.println();
System.out.println(member2.getFirst());
System.out.println(member2.getLast());
System.out.println(member2.getMembers());
System.out.println();
System.out.println(member1.getFirst());
System.out.println(member1.getLast());
System.out.println(member1.getMembers());
}
}
и на выходе имеем результат
Constructor for Megan fox, member of the club: 1
Constructor for Natalie  portman, member of the club: 2
Constructor for Tailor swift, member of the club: 3

Natalie 
portman
3

Megan
fox
3


то, что жирненькое- добавлено и в результате отображено.
это еще 1 пример использования STATIC- показывает что переменная members- она SHARED между всеми другими переменными введенными в туну.

статическая информация доступна даже тогда, когда нет объекта
код: System.out.println(tuna.getMembers());
результат: 3









ENUMERATION - Требует подробного объяснения Enum SET RANGE

enumeration- это типо как классы, но gonna declare constances(that are also objects pretty much);
 в программировании тип данных, чьё множество значений представляет собой ограниченный список идентификаторов.

package NewBoston;

public enum tuna {
bucky("nice", "22"),
kelsey("cutie", "10"),
julia("bigmistake", "12");

private final String desc;
private final String year;

tuna(String description, String birthday){
desc=description;
year=birthday;
}
public String getDesc(){
return desc;
}
public String getYear(){
return year;
}

}



import java.util.Scanner;

import java.util.*;
class apples {
public static void main(String[] args){
for(tuna people: tuna.values());
System.out.printf("%s\t%s\t%s\n", people, people.getDesc(), people.getYear());

ENUM SET RANGE
_________________________________________________________________________


public enum tuna {
bucky("nice", "22"),
kelsey("cutie", "10"),
julia("bigmistake", "12"),
nicole("italian", "13"),
candy("different", "14"),
erin("iwish", "16");

private final String desc;
private final String year;

tuna(String description, String birthday){
desc=description;
year=birthday;
}
public String getDesc(){
return desc;
}
public String getYear(){
return year;
}

}


import java.util.EnumSet;


class apples {
public static void main(String[] args){
for(tuna people: tuna.values());
System.out.printf("%s\t%s\t%s\n", people, people.getDesc(), people.getYear());
System.out.println("\nand now for the range of constance!!!\n");
for(tuna people: EnumSet.range(tuna.kelsey, tuna.candy));
System.out.printf("%s\t%s\t%s\n", people, people.getDesc(), people.getYear());
}
}

set range - можно сделать выборку с - до
for(tuna people: EnumSet.range(tuna.kelsey, tuna.candy));
System.out.printf("%s\t%s\t%s\n", people, people.getDesc(), people.getYear());
не забывает подключить утилиту в начале класса
























вторник, 27 января 2015 г.

toString and COMPOSITION

toString
Объяснить крайне тяжело.
КОД:

public class potpie {
private int month;
private int day;
private int year;

public potpie(int m, int d, int y){
month=m;
day=d;
year=y;
System.out.printf("The constructor for this is %s\n", this);
}
public String toString(){
return String.format("%d/%d/%d", month,day,year);
}
}

class apples {
public static void main(String[] args){
potpie potObject=new potpie(4,5,6);
}

Результат:

The constructor for this is 4/5/6

COMPOSITION
_________________________________________________________________________________

КОД:

public class potpie {
private int month;
private int day;
private int year;

public potpie(int m, int d, int y){
month=m;
day=d;
year=y;
System.out.printf("The constructor for this is %s\n", this);
}
public String toString(){
return String.format("%d/%d/%d", month,day,year);
}
}
public class tuna {
private String name;
private potpie birthday;

public tuna(String theName, potpie theDate){
name=theName;
birthday=theDate;

}
public String toString(){
return String.format("My name is %s, my birthday is %s", name, birthday);
}
}

class apples {
public static void main(String[] args){
potpie potObject=new potpie(4,5,6);
tuna tunaObject =  new tuna("Natasha", potObject);
System.out.println(tunaObject);
}
}

Результат:
My name is Natasha, my birthday is 4/5/6

Что тут произошло?
в туне создаем две переменные NAME и BIRTHDAY( Где BIRTHDAY передает референс в  potpie object)
private String name;
private potpie birthday;
создаем метод с двумя аргументами и передаем стринговое значение(куда будет линковаться)
public tuna(String theName, potpie theDate){
name=theName;
birthday=theDate;
создаем toString метод без аргументов
в теле делаем возврат формата %s- это будет fill in name и birthday
public String toString(){
return String.format("My name is %s, my birthday is %s", name, birthday);
}
}
и вот где начинается немного жопа
whenever we need a String representation of this "my name is %s" its gonna look for the second part - name,  то есть оно ищет переменную name- которая указана theName и мы ей дали значение в самом верху  в туне. Но вот с BIRTHDAY нет string representation, birthday is just a reference to theDATE object and this means: since its a refrence to an OBJECT and NOT A STRING , anytime it needs a String from an object , it will go to my class(в примере этот класс potpie) and find a toSTRING METHOD and then i can give you the information you need. ///43 урок
далее идем в apples класс и создаем тунаОбжект- с двумя аргементами (Наташа- name, и potObject( в нашем случае он записан в классе potpie как 4/5/6) и потом выводим обьычным принтом тунаобжект
class apples {
public static void main(String[] args){
potpie potObject=new potpie(4,5,6);
tuna tunaObject =  new tuna("Natasha", potObject);
System.out.println(tunaObject);
}
}
результат такой:
My name is Natasha, my birthday is 4/5/6









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

Public Private THIS

public- ок понятно
private - отображается и используется в том методе, где создано. Значит только методы, находящиеся в одном классе будут видеть и смогут использовать метод private
THIS- если конструктор или любой другой метод использует переменную или имя с Identical to Instance variables.any time you have the same variable in a method java looks through local variables and prints them. if a method contains the local variable the same name as the field name, it will always look for a local. to refer to field variable we use THIS. перед именем переменной
------------------------------------------------------What "this" really is in Java is an object for which you call a method. In this here example "this" is actually tunaObject, because you are using tunaObject to call a method named setTime. It has nothing to do with local variables.
Example1:
public void setTime(int h, int m, int s)
  {
    hour=h;  // same as this.hour=h;
    minute=m;  // same as this.minute=m;
    second=s;  // same as this.second=s;
  }
Example2:
public void setTime(int hour, int minute, int second)
  {
    this.hour=hour;
    this.minute=minute;
    this.second=second;
  }
in Example2 you have to use "this" because your formal arguments are named the same as attributes of the tuna class. It wouldn't make any sense to write hour=hour. The only way to access your attributes in these situations is to use "this". 
КАРОЧИ- картинкой нагляднее и проще!