Control Object
Home  Contents KMArticlesMembersSponsorsAbout us

ปรับปรุง : 2556-09-21 (ควบคุมปุ่ม)
OOP :: intro ch1-12 :: keyword & sign :: method calling :: series #1 :: series #2 :: series #3 :: series #4 :: pro_pmy
ขอบซ้ายขอบบน
Control Object
1. การแสดง Frame 4 แบบ ผ่าน AWT : Abstract Windows Toolkit
:: แบบที่ 1 เรียกผ่าน main ที่ต้องมี static
:: แบบที่ 2 เรียกผ่าน init ที่ไม่ต้องมี static
:: แบบที่ 3 สืบทอด Frame เพื่อให้ paint ทำงาน
// โปรแกรมแบบใช้ Abstract Window Toolkit
// แบบที่ 1 เรียกผ่าน main ที่ต้องมี static
// ถ้าไม่มี setLayout จะได้ปุ่มเต็ม frame
// หากทำงานใน main จะใช้ this ไม่ได้ ต้องสร้าง instance ขึ้นมาใหม่
import java.awt.*;
import java.awt.event.*;
public class x implements ActionListener {
  static Button b1 = new Button("exit");
  // 01 - main
  public static void main(String[] args) {
    Frame s = new Frame("Screen");
    s.setSize(150,150);
    s.setLayout(null);
    s.setVisible(true);   
    s.add(b1);
    b1.setBounds(10,40,70,20);
    x myclass = new x();
    b1.addActionListener(myclass);
  }
  // 02 - actionPerformed
  public void actionPerformed(ActionEvent a) {
    if(a.getSource()==b1) { System.exit(0); }
  }
}

// แบบที่ 2 เรียกผ่าน init ที่ไม่ต้องมี static // ไม่ต้องสร้าง instance ใน main เหมือนแบบแรก // ถ้าสร้าง instance จะทำให้ b1 ใน actionPerformed เทียบไม่ตรง import java.awt.*; import java.awt.event.*; public class x implements ActionListener { Button b1 = new Button("exit"); // 01 - main public static void main(String[] args) { new x().init(); } // 02 - init public void init() { Frame s = new Frame("Screen"); s.setSize(150,150); s.setLayout(null); s.setVisible(true); s.add(b1); b1.setBounds(10,40,70,20); b1.addActionListener(this); } // 03 - actionPerformed public void actionPerformed(ActionEvent a) { if(a.getSource()==b1) { System.exit(0); } } }
// แบบที่ 3 สืบทอด Frame เพื่อแสดง paint ไม่มี ActionListener // กดปุ่ม exit จาก close button ได้ import java.awt.*; import java.awt.event.*; public class x extends Frame{ static x frame = new x(); // 01 - main public static void main(String[] args) { frame.init(); } // 02 - init public void init() { frame.setSize(300,300); frame.setLayout(null); frame.setVisible(true); frame.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); } // 03 - paint public void paint(Graphics g) { Graphics2D p = (Graphics2D)g; p.drawOval(30 ,150,100,100); } }
// แบบที่ 4 สืบทอด Frame เพื่อแสดง paint และมี ActionListener // เป็นการทำงาน 2 ส่วนคือแสดงผลกราฟฟิก และควบคุมการทำงานของวัตถุ AWT import java.awt.*; import java.awt.event.*; public class x extends Frame implements ActionListener{ Button b1 = new Button("exit"); // 01 - paint public void paint(Graphics g) { Graphics2D p = (Graphics2D)g; p.drawOval(30,150,100,100); } // 02 - main public static void main(String args[]) { new x().init(); } // 03 - init public void init() { x frame = new x(); frame.setSize(400, 400); frame.setLayout(null); frame.setVisible(true); frame.add(b1); b1.setBounds(10,40,70,20); b1.addActionListener(this); } // 04 - actionPerformed public void actionPerformed(ActionEvent a) { if(a.getSource()==b1) { System.exit(0); } } }
2. แสดงข้อมูลใน JTextArea แบบหลายบรรทัด
:: ใช้ JTextArea แทน TextField เพื่อแสดงข้อมูลหลายบรรทัด
:: ต้อง add เข้า Frame ก่อน จึงจะทำให้การกำหนดคุณสมบัติมีผล
:: ถ้า add ภายหลัง JTextArea จะไม่แสดงผลในครั้งแรก
:: การเปลี่ยนขนาด frame สามารถนำค่าไปประมวลผลได้

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*;
public class x implements ActionListener { 
  static Button b1 = new Button("execute"); 
  static JTextArea txt = new JTextArea(5, 20);
  static Frame s = new Frame("Screen"); 
  public static void main(String[] args) { 
    s.setSize(150,150); 
    s.setLayout(null);
    s.setVisible(true);   
    s.add(b1); 
    b1.setBounds(10,40,70,20); 
    s.add(txt);
    txt.setBounds(10,80,200,70); 
    txt.setBackground(Color.yellow); 
    txt.setText(Double.toString(s.getWidth()));
    x myform = new x();
    b1.addActionListener(myform); 
  } 
  public void actionPerformed(ActionEvent a) { 
    if(a.getSource()==b1) {
    txt.setText(txt.getText() + b1.getLabel() + '\n');
    b1.setLabel(Double.toString(s.getWidth()));
    } 
  } 
}
3. 2 ปุ่ม คุมให้อีกปุ่มเลื่อนลง
:: ใช้การเพิ่มค่า Y ให้อีกปุ่มไหลลงไป และต้องไปหยุดการทำงานใน console
:: คุมวัตถุ http://home.cogeco.ca/~ve3ll/jatutorg.htm
:: Format http://docs.oracle.com/javase/7/docs/api/java/awt/Rectangle.html

import java.awt.*; 
import java.awt.event.*; 
public class x implements ActionListener { 
  static Button b1 = new Button("execute"); 
  static Button b2 = new Button("work"); 
  public static void main(String[] args) { 
    Frame s = new Frame("Screen"); 
    s.setSize(150,150); 
    s.setLayout(null);
    s.setVisible(true);   
    b1.setBounds(10,40,70,20); 
    s.add(b1); 
    b2.setBounds(10,80,70,20); 
    s.add(b2);
    x myform = new x();
    b1.addActionListener(myform); 
  } 
  public void actionPerformed(ActionEvent a) { 
    if(a.getSource()==b1)  {
     int y = (int)b2.getBounds().getY() + 10;      
      b2.setBounds(10,y,70,20); // x, y, width, height
    } 
  } 
}
4. ใช้ปุ่มควบคุมการแสดงภาพ และสลับภาพ เมื่อกดปุ่ม
:: ปุ่มที่แสดงภาพได้เป็น JButton + ImageIcon และใช้ package swing
:: ภาพที่ใช้สามารถใช้ jpg, gif หรือ png กรณีนี้ใช้ jpg คือ burin48 และ burin51
:: การทำงานของปุ่มไหลไปทางขวา

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*;
public class x implements ActionListener { 
  static Button b1 = new Button("execute"); 
  static JButton b2 = new JButton(new ImageIcon("burin48.jpg")); 
  public static void main(String[] args) { 
    Frame s = new Frame("Screen"); 
    s.setSize(150,150); 
    s.setLayout(null);
    s.setVisible(true);   
    b1.setBounds(10,40,70,20); 
    s.add(b1); 
    b2.setBounds(10,80,70,70); 
    s.add(b2);
    x myform = new x();
    b1.addActionListener(myform); 
    b2.addActionListener(myform); 
  } 
  public void actionPerformed(ActionEvent a) { 
    if(a.getSource()==b1) {
      b2.setBounds((int)b2.getBounds().getX() + 10 ,100 ,70,70); 
      b2.setIcon(new ImageIcon("burin51.jpg"));
    } else  b2.setIcon(new ImageIcon("burin48.jpg"));
  } 
}
5. การ์ตูนแบบ transparent
:: คลิ๊กที่ตัวการ์ตูนจะเปลี่ยนภาพ โดยรูปใช้ JButton ทำหน้าที่รับภาพ
:: ตัวอย่างภาพ toon1.gif และ toon2.gif

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*;
public class x implements ActionListener { 
  Frame s = new Frame("Screen"); 
  JButton b1;
  public static void main(String[] args) { 
   new x().init(); 
  } 
  public void init( ) { 
    s.setSize(300,300); // height, width
    s.setLayout(null); 
    s.setVisible(true); 
    s.setBackground(Color.yellow); 	
    b1 = new JButton(new ImageIcon("toon1.gif"));
    s.add(b1); 
    b1.setOpaque(false); // ความทึบ
    b1.setContentAreaFilled(false);
    b1.setBorderPainted(false);
    b1.setBounds(0,30,200,200); 
    b1.addActionListener(this); 
    s.addWindowListener(new WindowAdapter(){
      public void windowClosing(WindowEvent we){
        System.exit(0);
      }
    });
  } 
  public void actionPerformed(ActionEvent a) { 
    b1.setIcon(new ImageIcon("toon2.gif")); 
  } 
}
6. โหลดภาพผ่าน paint ร่วมกับ awt
:: ตัวอย่างนี้แสดงการทำงานร่วมกันของ paint กับ awt แต่ paint จะมาในครั้งแรก
:: การโหลดภาพผ่าน url จะมี delay หากอินเทอร์เน็ตไม่เร็ว และภาพมีขนาดใหญ่
:: คลาส URL ต้องถูกเรียกใช้ภายใต้ try .. catch() ..
:: http://www.softwareandfinance.com/Java/Graphics/DrawCircle.html
:: http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/Graphics.html

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.imageio.*;
import java.net.URL;
public class x extends Frame implements ActionListener {
  static x frame = new x(); 
  static Button b1 = new Button("exit");
  public void paint(Graphics g) {
    Graphics2D p = (Graphics2D)g;
    p.setPaint(Color.red);
    p.drawOval(150,150,100,100);
    p.drawRect(150,150,100,100);
    try {
    URL url = new URL("http://thaiall.com/me/picme.jpg");
    BufferedImage img = ImageIO.read(url);
    p.drawImage(img, 0, 0, null);
    } catch (Exception e)  { }
  }               
  public static void main(String args[]) {
     frame.setSize(400, 400);
     frame.setLayout(null);
     frame.setVisible(true);
     frame.add(b1);
     b1.setBounds(10,40,70,20); 
     x myform = new x();
     b1.addActionListener(myform); 
   }
  public void actionPerformed(ActionEvent a) { 
    if(a.getSource()==b1)  { System.exit(0); } 
  } 
}
7. วัตถุไหล ตามการควบคุมของ thread
:: การทำงานร่วมของ Thread และ ActionListener
:: การ start และ stop Thread
:: http://www.thaiall.com/class/oopsam2.htm

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
public class x extends Thread implements ActionListener { 
  static Button b1 = new Button("exit"); 
  static JButton b2; 
  static Thread t;
  static x myt;
  public static void main(String[] args) { 
    Frame s = new Frame("Screen"); 
    s.setSize(200,400); 
    s.setLayout(null);
    s.setVisible(true);   
    s.add(b1); 
    b1.setBounds(10,40,70,20); 
    b2 = new JButton(new ImageIcon("toon1.gif"));
    s.add(b2);
    b2.setBounds(10,80,150,150); 
    b1.addActionListener(new x(""));          
    x myt = new x("a");
    myt.t.start();
  } 
  x(String n) {
    t = new Thread(this,n); 
  }
  public void run() {
    while(true){
      sleep1();
      int y = (int)b2.getBounds().getY() + 5;      
      b2.setBounds(10,y,150,150); 	  
    }
  }
  public void actionPerformed(ActionEvent a) { 
    if(a.getSource()==b1)  { 
       myt.t.stop();
       sleep1(); sleep1(); sleep1();
       b2.setBounds(10,80,150,150); 
    }
  } 
  static void sleep1 () {
    try { Thread.sleep(1000); // 1 second
    } catch (InterruptedException e) { }
  }
}
8. การกำหนด background ทำได้หลายแบบ
:: อาจใช้ paint หรือ setContentPane
:: ตัวอย่างนี้ใช้ทั้งแฟ้มในเครื่อง และแฟ้มผ่าน url
:: ใช้ frame.setResizable(false) ป้องกันการเปลี่ยนขนาดของ frame

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.imageio.*;
import java.net.URL;
public class x extends Frame {
  public void paint(Graphics g) {
    Graphics2D p = (Graphics2D)g;
    try {
      URL url = new URL("http://thaiall.com/me/picme.jpg");
      BufferedImage img = ImageIO.read(url);
      p.drawImage(img, 0, 0, null);
    } catch (Exception e)  { }
  }               
  public static void main(String args[]) {
     x frame = new x();
     frame.setSize(400, 400);
     frame.setResizable(false);
     frame.setVisible(true);
   }
}

import java.awt.*; import java.awt.event.*; import javax.swing.*; class x extends JFrame { TextField txt = new TextField(20); public x() { setSize(500,500); setContentPane(new JLabel(new ImageIcon("D:\\criteria.jpg"))); add(txt); txt.setBounds(10,30,100,20); setResizable(false); setVisible(true); } public static void main(String args[]) { new x(); } }
import java.awt.*; import java.awt.event.*; import javax.swing.*; class x { JFrame f = new JFrame(); JTextArea txt = new JTextArea(5, 20); public x() { f.setSize(400,400); f.setContentPane(new JLabel(new ImageIcon("D:\\criteria.jpg"))); f.add(txt); txt.setBounds(10,80,200,70); f.setVisible(true); } public static void main(String args[]) { new x(); } }
9. ActionListener ทำงานร่วมกับ Runnable
:: บอลค่อยๆ เลื่อนไปทางขวา
:: ขวับครั้งละ 10 px
:: ปุ่ม exit ทำงานผ่าน ActionListener

import java.awt.*;
import java.awt.event.*;
public class x extends Frame implements ActionListener,Runnable{
  Thread timer;   
  static x frame = new x();
  int pointx = 10;
  static Button b1 = new Button("exit");
  // 01 - constructor
  x() {
    timer = new Thread(this);
    timer.start();
  }
  // 02 - paint
  public void paint(Graphics g) {
    Graphics2D p = (Graphics2D)g;
    pointx += 10;
    p.drawOval(30 + pointx,150,100,100);
  }               
  // 03 - main
  public static void main(String args[]) {     
    frame.setSize(400, 400);
    frame.setLayout(null);
    frame.setVisible(true);
    frame.add(b1);
    b1.setBounds(10,40,70,20); 
    b1.addActionListener(frame); 
  }
  // 04 - actionPerformed
  public void actionPerformed(ActionEvent a) { 
    if(a.getSource()==b1)  { System.exit(0); } 
  } 
  // 05 - run
  public void run() {
    Thread me = Thread.currentThread();
    while (timer == me) {
      try {
        timer.sleep(1000);
        System.out.println(pointx);
      } catch (InterruptedException e) { }
      repaint();
    }
} 
}
10. การใช้ JComboBox และการควบคุม JPanel
:: แสดง Combox ด้านบน เมื่อเลือกจะแสดงผลการเลือก ด้านล่าง
:: การประกาศ JTextField ไม่จำเป็นต้องอยู่นอก method นะครับ
:: http://www.javabeginner.com/java-swing/java-jcombobox-class-example
:: http://easyjavatutorial.weebly.com/the-jtextfield.html
:: http://www.leepoint.net/notes-java/GUI-lowlevel/graphics/40drawingpanel/30drawingpanel.html

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class x extends JPanel {
  JTextField txt1 = new JTextField(8);
  JTextField txt2 = new JTextField(6);
  // 01 - constructor
  public x() {
    String[] comboTypes = {"CPSC 433", "CPSC 317", "CPSC 321"};
    JComboBox cb = new JComboBox(comboTypes);
    cb.setSelectedIndex(2);
    cb.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        JComboBox jcmbType = (JComboBox) e.getSource();
        String cmbType = (String) jcmbType.getSelectedItem();
        txt1.setText(cmbType.trim().toLowerCase());
      }
    });
    // Set up the TextField
    txt1.setText(comboTypes[cb.getSelectedIndex()]);
    txt2.setText("hello world");
    JPanel pan = new JPanel();
    pan.setLayout(new BorderLayout(5, 5));
    pan.add(txt1,BorderLayout.EAST);
    pan.add(txt2,BorderLayout.WEST);
    // Layout the demo
    setLayout(new BorderLayout());
    add(cb, BorderLayout.NORTH); // ด้านบน
    add(pan, BorderLayout.SOUTH); // ด้านล่าง
  }
  // 02 - main
  public static void main(String s[]) {
    JFrame frame = new JFrame("JComboBox");   
    // frame.pack(); ถ้ามี pack จะทำให้ setSize ไม่มีผล
    frame.setSize(200,200);	
    frame.setContentPane(new x());
    frame.setVisible(true);
    frame.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
      System.exit(0);
    }
    });
  }
}
"Imagination is more important than knowledge" - Albert Einstein
Home
Thaiabc.com
Thainame.net
Lampang.net
Nation university
PHP
MySQL
Visual basic.NET
TabletPC
Linux
Online quiz
Download
Search engine
Web ranking
Add website
Blog : Education
Blog : ACLA
Blog : Lampang
Facebook.com
Twitter.com
About us
My dream
Site map
Sponsor
http://goo.gl/72BPC