[ Kỹ thuật đồ họa máy tính ] Ví dụ vẽ tam giác, sử dụng thuật toán vẽ đoạn thẳng thông thường [ C\C++ ]

Bài tập kỹ thuật đồ họa: Viết chương trình sử dụng thuật toán vẽ đoạn thẳng thông thường để vẽ tam giác ABC. Trong đó:  A(10,20); B(40;30); C(50;70).


[Code Turbo C++ 3.0]

//*****************************************

// http://lap-trinh-may-tinh.blogspot.com/

//******************************************

#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<graphics.h>
#include<math.h>

// ham lam tron Round
int Round(float a){
  return (int)floor(a+0.5);
}

// ve duong thang (thuat toan thong thuong)
void dline(int x1,int y1, int x2,int y2, int color)
{
  float y;
  int x;
  for (x=x1; x<=x2; x++)
 {
    y = y1 + (x-x1)*(y2-y1)/(x2-x1) ;
    putpixel(x, Round(y), color );
  }
}

// ham main
void main(){
 clrscr();

// khai bao thiet bi do hoa
 int driver=DETECT, mode;
 initgraph(&driver,&mode,"C:\\TC\\BGI"); // duong dan thu muc BGI co the khac tren may tinh cua ban.

// ve tam giac
 dline(10,20,40,30,4);
 dline(40,30,50,70,4);
 dline(10,20,50,70,4);

 getch();
}

//-----------------------------------------------------------
Lưu ý: Nếu máy tính của bạn không hỗ trợ thư viên đồ họa (thường các dòng máy tính mới không hỗ trợ) các bạn có thể chạy chương trình Turbo C++ 3.0 trên môi trường DOSBox [Tải DOSBox tại đây]

[Tải code chương trình tại đây - Lưu ý: Sau 5s, Click Bỏ qua quảng cáo (Skin Ad)]

[ C\C++ ] Bài tập con trỏ cấu trúc [ Quản lý điểm sinh viên - 29/08/13 ]

Bài tập con trỏ cấu trúc: Viết các hàm thực hiện
- Nhập vào danh sách có n sinh viên (2<n<20), thông tin sinh viên gồm:
  + Họ tên
  + Địa chỉ
  + Năm sinh
  + Giới tính
  + Lớp
  + Điểm: TCC(hs 3), TA(hs 4), TDC(hs 5)
- Tính điểm trung bình
- Đếm số sinh viên có điểm trung bình >= 8
- Đếm số sinh viên có điểm trung bình  < 5
- In tên sinh viên có điểm trung bình cao nhất
- Xếp loại cho sinh viên
- In danh sách sinh viên đã xếp loại
- Sắp xếp danh sách sinh viên theo thứ tự tăng dần của điểm tb



[Code Turbo C++]
/**********************************
  http://lap-trinh-may-tinh.blogspot.com/
**********************************/
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>

// khai bao
struct SV{
char ht[30], dc[50],gioitinh[3],lop[10],xepLoai[10];
int namSinh;
  float dTCC, dTA,dTDC,dTB;
};

SV a[20],*p;
int n;// so sinh vien

// Nhap thong tin sinh vien
void Nhap(){
p=a;
// nhap so sinh vien
do{
cout<<"\n Nhap so sinh vien: "; cin>>n;
if(n<2||n>20) cout<<"\n Nhap lai so sinh vien";
}while(n<2||n>20);
// Nhap thong tin sinh vien

cout<<"\n Nhap thong tin sinh vien: ";
for(int i=0;i<n;i++)
{
 fflush(stdin);
 cout<<"\n + Nhap thong tin co sinh vien thu "<<i+1<<": ";
 cout<<"\n - Ho ten: "; gets((p+i)->ht);
 cout<<"\n - Dia chi: "; gets((p+i)->dc);
 cout<<"\n - Gioi tinh: "; gets((p+i)->gioitinh);
 cout<<"\n - Lop: "; gets((p+i)->lop);
 cout<<"\n - Nam sinh: "; cin>>(p+i)->namSinh;
 cout<<"\n - Diem toan cao cap: "; cin>>(p+i)->dTCC;
 cout<<"\n - Diem toan tieng anh: "; cin>>(p+i)->dTA;
 cout<<"\n - Diem tin dai cuong: "; cin>>(p+i)->dTDC;
}
}
// Tinh diem tong ket
void TinhDiem(){
 p=a;
 for(int i=0;i<n;i++)
  (p+i)->dTB=(((p+i)->dTCC)*3+((p+i)->dTA)*4+((p+i)->dTDC)*5)/12;
}
// Dem so sinh vien co diem tb>=8
void DemDTB_LonHon8(){
 p=a;
 int dem=0;
 for(int i=0;i<n;i++)
  if((p+i)->dTB>=8) dem++;
 cout<<"\n * So sinh vien co diem trung binh >= 8: "<<dem;
}
// Dem so sinh vien co diem tb<5
void DemDTB_NhoHon5(){
 p=a;

 int dem=0;
 for(int i=0;i<n;i++)
  if((p+i)->dTB<5) dem++;
 cout<<"\n * So sinh vien co diem trung binh < 5: "<<dem;
}
// Tim sinh vien co diem cao nhat
void InSV_max(){
 p=a;

 float max=p->dTB;
 for(int i=0;i<n;i++)
  if (max<(p+i)->dTB) { max=(p+i)->dTB;}
 // in sinh vien max
 cout<<"\n * Ten sinh vien co diem cao nhat: ";
 for(i=0;i<n;i++)
  if(max==(p+i)->dTB) cout<<"\n +"<<(p+i)->ht;
}

// Xep loai cho sinh vien
void XepLoai(){
 p=a;
 for(int i=0;i<n;i++)
  {
if ((p+i)->dTB<5) strcpy((p+i)->xepLoai,"Truot");
else if ((p+i)->dTB<6) strcpy((p+i)->xepLoai,"Trung binh");
else if ((p+i)->dTB<7) strcpy((p+i)->xepLoai,"Trung binh kha");
else if ((p+i)->dTB<8) strcpy((p+i)->xepLoai,"Kha");
else if ((p+i)->dTB<9) strcpy((p+i)->xepLoai,"Gioi");
else if ((p+i)->dTB<=10) strcpy((p+i)->xepLoai,"Xuat sac");
  }
}
// In danh sach sinh vien
void InDS(){
 p=a;
 cout<<"\n * In danh sach sinh vien da xep loai:";
 for(int i=0;i<n;i++)
  cout<<"\n - "<<(p+i)->ht<<"\t - "<<(p+i)->xepLoai;
}


// doi cho
void DoiCho(SV *a, SV *b){
 char tht[30],tdc[50],tgioitinh[5],tlop[10],dxl[10];
 int tns;
 float tdtcc,tdta,tdtdc,tdtb;
 strcpy(tht,a->ht);
 strcpy(a->ht,b->ht);
 strcpy(b->ht,tht);

 strcpy(tdc,a->dc);
 strcpy(a->dc,b->dc);
 strcpy(b->dc,tdc);

 strcpy(tgioitinh,a->gioitinh);
 strcpy(a->gioitinh,b->gioitinh);
 strcpy(b->gioitinh,tgioitinh);

 strcpy(tlop,a->lop);
 strcpy(a->lop,b->lop);
 strcpy(b->lop,tlop);

 strcpy(dxl,a->xepLoai);
 strcpy(a->xepLoai,b->xepLoai);
 strcpy(b->xepLoai,dxl);

 tns=a->namSinh;
 a->namSinh=b->namSinh;
 b->namSinh=tns;

 tdtcc=a->dTCC;
 a->dTCC=b->dTCC;
 b->dTCC=tdtcc;

 tdta=a->dTA;
 a->dTA=b->dTA;
 b->dTA=tdta;

 tdtdc=a->dTDC;
 a->dTDC=b->dTDC;
 b->dTDC=tdtdc;

 tdtb=a->dTB;
 a->dTB=b->dTB;
 b->dTB=tdtb;
}

// sap xep danh sach sinh vien
void SapXep(){
 p=a;
 for(int i=0;i<n-1;i++)
  for(int j=i+1;j<n;j++)
{
 if ((p+i)->dTB>(p+j)->dTB)
{
DoiCho((p+i),(p+j));
}
}
cout<<"\n * Danh sach sinh vien da xep loai: ";
for(i=0;i<n;i++)
 cout<<"\n - "<<(p+i)->ht<<"\t - "<<(p+i)->dTB;
}
// ham chinh

void main(){
 clrscr();
 Nhap();
 TinhDiem();
 DemDTB_LonHon8();
 DemDTB_NhoHon5();
 InSV_max();
 XepLoai();
 InDS();
 SapXep();
 getch();

}

/***********************************/
[Tải code chương trình tại đây - Lưu ý: Sau 5s, Click Bỏ qua quảng cáo (Skin Ad)]

[C\C++] Bài tập Lập trình căn bản với C\C++ [Chữa bài tập - 27/08/13]

Một số bài tập môn Lập trình căn bản với C\C++

Bài 1: Viết chương trình in ra màn hình tất cả số nguyên tố có 5 chữ số.

[Code Tubor C++]
/***************************************
  http://lap-trinh-may-tinh.blogspot.com
****************************************/
#include<iostream.h>
#include<conio.h>

// ham kiem tra so nguyen to
int TestNT(long a){
 for(long k=2;k<a;k++)
  if (a%k==0) return 0;
  return 1;
}
// Ham in ra cac so nguyen to co 5 chu so
void InSoNT(){
 cout<<"\ IN SO NGUYEN TO CO 5 CHU SO:\n";
 for(long i=10000;i<=99999;i++)
  if (TestNT(i)==1)
cout<<i<<"; ";

}

// Ham chinh
void main(){
 InSoNT();
 getch();
}

/***************************************************************/
[Tải code chương trình tại đây - Lưu ý: Sau 5s, Click Bỏ qua quảng cáo (Skin Ad)]

Bài 2: Viết các hàm thực hiện:
 - Nhập vào từ bàn phím ma trân vuông kích thước n (2<= n <=6)
 - In ma trận vừa nhập
 - Tính tổng từng dòng của ma trận
 - Tìm và in ra cột chứa giá trị lớn nhất
 - Đếm số nguyên tố trong ma trận

[Code Tubor C++]
/***************************************
  http://lap-trinh-may-tinh.blogspot.com
****************************************/
#include<iostream.h>
#include<conio.h>
// khai bao
int m[6][6], n;
// nhap ma tran
void NhapMT(){
  // nhap kich thuoc
  cout<<"\n Nhap kich thuoc cua ma tran:" ;
  do{
cout<<"\n n= "; cin>>n;
if(n<2||n>6)
cout<<"\n Nhap lai n!";
  }while(n<2||n>6);
  // nhap ma tran
  cout<<"\n Nhap ma tran:";
  for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
 {
cout<<"\n m["<<i<<"]["<<j<<"]= "; cin>>m[i][j];
 }
}

// In ma tran
void InMT(){
 cout<<"\n In ma tran vua nhap: \n";
 for(int i=0;i<n;i++)
 {
for(int j=0;j<n;j++)
 cout<<m[i][j]<<"\t";
cout<<"\n";
 }
}
// Tinh tong tung dong
void TongDong(){
 int dong[6];
  for(int i=0;i<n;i++){
dong[i]=0;
for(int j=0;j<n;j++)
dong[i]+=m[i][j];
  }
  cout<<"\n Tong dong cua ma tran: ";
  for(i=0;i<n;i++)
cout<<"\n Dong "<<i<<" : "<<dong[i];
}
// Tim cot chua gia tri lon nhat
void TimCotChuaMax(){
 // tim max
 int max=m[0][0], i,j;
 for(i=0;i<n;i++)
  for(j=0;j<n;j++)
if(max<m[i][j]) max=m[i][j];
 // in cot chua max
 cout<<"\n Nhung cot chua gia tri lon nhat: ";
 for(i=0;i<n;i++)
  for(j=0;j<n;j++)
if(max==m[i][j]) cout<<j<<"; ";
}

 // Ham kiem tra so nguyen to
 int TestNT(int a){
  for (int i=2;i<a;i++)
if(a%i==0) return 0;
return 1;
 }

 // Dem so nguyen to trong ma tran
 void DemSNT(){
  int dem=0;
  for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(TestNT(m[i][j])==1) dem++;
cout<<"\n So lan xuat hien cua so nguyen to trong ma tran: "<<dem;
 }
// Ham chinh
void main(){
 NhapMT();
 InMT();
 TongDong();
 TimCotChuaMax();
 DemSNT();
 getch();
}

/***************************************************************/
[Tải code chương trình tại đây - Lưu ý: Sau 5s, Click Bỏ qua quảng cáo (Skin Ad)]

Bài 3: Viết các hàm thực hiện:
 - Nhập vào tọa độ 3 điểm A,B,C trong không gian
 - Tính độ dài đoạn thẳng AB, BC, AC
 - Kiểm tra xem A,B,C có phải là tam giác không, nếu là tam giác thì tính chu vi, diện tích tam giác đó.

[Code Tubor C++]
/***************************************
  http://lap-trinh-may-tinh.blogspot.com
****************************************/
#include<iostream.h>
#include<conio.h>
#include<math.h>

// khai bao
struct ToaDo{
  float x,y,z;
};
// Khai 3 diem A,B,C
ToaDo A,B,C;

// Nhap toa do
void NhapToaDo(){
  cout<<"\n Nhap toa do 3 diem:\n";
  cout<<"  - Nhap toa do diem A: ";
  cout<<"\n XA= "; cin>>A.x;
  cout<<"\n YA= "; cin>>A.y;
  cout<<"\n ZA= "; cin>>A.z;

  cout<<"  - Nhap toa do diem B: ";
  cout<<"\n XB= "; cin>>B.x;
  cout<<"\n YB= "; cin>>B.y;
  cout<<"\n ZB= "; cin>>B.z;

  cout<<"  - Nhap toa do diem C: ";
  cout<<"\n XC= "; cin>>C.x;
  cout<<"\n YC= "; cin>>C.y;
  cout<<"\n ZC= "; cin>>C.z;

}
// Tinhd do dai doan thang
float d(ToaDo P, ToaDo Q){
  return (float)sqrt((P.x-Q.x)*(P.x-Q.x)+(P.y-Q.y)*(P.y-Q.y)+(P.z-Q.z)*(P.z-Q.z));
}
// Kiem tra tam giac
int TestTG(){
 float a=d(B,C), b=d(A,C), c=d(A,B);
 if(a+b==c||a+c==b||b+c==a) return 0;
 return 1;
}
// Tinh chu vi dien tich
void ChuVi_DienTich(){
 cout<<"\n ------------------------ ";
 if(TestTG()==0)
  cout<<"\n 3 diem A,B,C thang hang!";
 else{
  float a=d(B,C), b=d(A,C), c=d(A,B);
  float cv=a+b+c;
  float p=cv/2;
  float s=(float)sqrt(p*(p-a)*(p-b)*(p-c));
  cout<<"\n - Chu vi tam giac: "<<cv<<"\n - Dien tich tam giac: "<<s;
 }
}
// Ham chinh
void main(){
 NhapToaDo();
 cout<<"\n Do dai doan thang AB: "<<d(A,B);
 cout<<"\n Do dai doan thang BC: "<<d(B,C);
 cout<<"\n Do dai doan thang AC: "<<d(A,C);
 ChuVi_DienTich();
 getch();
}

/***************************************************************/

[Tải code chương trình tại đây - Lưu ý: Sau 5s, Click Bỏ qua quảng cáo (Skin Ad)]

TxT

[Java] Vẽ và tô màu cho đường tròn

Các thuật toán để đổ màu rất đơn giản:
- Bắt đầu với bất kỳ điểm ảnh trong hình dạng để được lấp đầy.
- Nhớ màu sắc của điểm ảnh này, đặt tên là initialColor.
- Thêm điểm ban đầu vào danh sách kiểm tra
- Cho tất cả các điểm P trong danh sách kiểm tra làm
  + Nếu P.color = initialColor sau đó
  + Điền vào điểm P với màu sắc mục tiêu
  + Thêm tất cả các điểm lân cận của điểm P vào danh sách kiểm tra


// Code Java
package animationfiller;

/******************************************************************************
* File : AnimationFiller.java
* Author : http://lap-trinh-may-tinh.blogspot.com/
* Description :
* Demonstrate a flood fill algorithm.
* Tested with : JDK 1.6
******************************************************************************/

import java.awt.image.BufferedImage;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
import java.awt.Point;

class AnimationFiller
{
 
  // fill the whole image with a color specified by its RGB component
  static void fillImage(BufferedImage image, int red, int green, int blue)
  {
    int packedRGB = (red*256+green)*256+blue;

    for (int y=0;y<image.getHeight(null);y++)
    {
      for (int x=0;x<image.getWidth(null);x++)
        image.setRGB(x,y,packedRGB);
    }
  }

  // draw a red circle with a pen width of 5 pixels
  static void drawCircle(BufferedImage image)
  {
    java.awt.Graphics2D gr=(java.awt.Graphics2D) image.getGraphics();

    gr.setColor(new java.awt.Color(255,0,0));  // red
    gr.setStroke(new java.awt.BasicStroke(5));  // set pen width to 5 pixel
    gr.drawArc(5,5,150,150,0,360);  // (x,y,w,h,startDegree, endDegree);
  }

  // repaint the image and delay for a little while
  private static void repaintAndDelay(BufferedImage image)
  {
    _imageLabel.setIcon(new ImageIcon(image));
    _imageLabel.repaint();
    try { Thread.sleep(1); } catch (Exception ignore) {}
  }

  // implements the flood fill algorithm
  public static void floodFill(BufferedImage image, int x,int y, int fillColor)
  {
    java.util.ArrayList<Point> examList=new java.util.ArrayList<Point>();

    int initialColor=image.getRGB(x,y);
    examList.add(new Point(x,y));

    while (examList.size()>0)
    {
      Point p = examList.remove(0);  // get and remove the first point in the list
      if (image.getRGB(p.x,p.y)==initialColor)
      {
        x = p.x;  y = p.y;
        image.setRGB(x, y, fillColor);  // fill current pixel

        examList.add(new Point(x-1,y));        // check west neighbor
        examList.add(new Point(x+1,y));        // check east neighbor
        examList.add(new Point(x,y-1));        // check north neighbor
        examList.add(new Point(x,y+1));        // check south neighbor

        repaintAndDelay(image);    // this line can be removed
      }
    }

  }

  public static int packRgb(int r,int g,int b)
  {
    return (r*256+g)*256+b;
  }

  static JLabel _imageLabel;
  public static void main(String[] args) throws Exception
  {
    // create an 200x200 RGB image
    BufferedImage image=new BufferedImage(200,200,BufferedImage.TYPE_INT_RGB);

    // fill the image with green color
    fillImage(image,0,255,0);

    // draw a red circle with 5 pixel pen width
    drawCircle(image);

    JLabel imageLabel=new JLabel();
    _imageLabel = imageLabel;  // make it global
    imageLabel.setIcon(new ImageIcon(image));
    imageLabel.setText("Filling the circle with yellow color ...");

    javax.swing.JFrame window=new javax.swing.JFrame();
    window.setTitle("Macteki flood filler");
    window.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);

    window.add(imageLabel);

    window.pack();
    window.setVisible(true);

    // fill the circle with yellow color
    int yellow = packRgb(255,255,0);
    int x=50, y=50;  // make sure (x,y) is within the circle
    floodFill(image,x,y, yellow);

    imageLabel.setIcon(new ImageIcon(image));
    imageLabel.setText("Completed !");

  }
}


Một số tài liệu và khoá học bổ ích dành cho bạn: 

# Tài liệu: Lập trình hướng đối tượng JAVA core dành cho người mới bắt đầu học lập trình [Click để xem]

# Khoá học online: Lập trình Java trong 4 tuần [Click để xem]

[Java] Chương trình hiển thị bộ bài 52 quân bài [GUI]

Yêu cầu: Hiển thị bộ bài 52 quân bài.
Ý tưởng: Lấy một lớp từ JPanel và ghi đè lên phương thức paintComponent. Để hiển thị được 52 quân bài, trước tiên bạn phải vẻ và hiển thị được 1 quân bài.


/******************************************************************************
* File : CardPanel.java (version 3)

* Description :
* Display a shuffled deck of playing card.
* Tested with : JDK 1.6 under Windows XP and MAC osx 10.6.6
******************************************************************************/
import java.awt.image.BufferedImage;
import java.awt.Font;
class CardPanel extends javax.swing.JPanel
{
String[] deck={
"SA","S2","S3","S4","S5","S6","S7","S8","S9","ST","SJ","SQ","SK", // spade
"HA","H2","H3","H4","H5","H6","H7","H8","H9","HT","HJ","HQ","HK", // heart
"CA","C2","C3","C4","C5","C6","C7","C8","C9","CT","CJ","CQ","CK", // club
"DA","D2","D3","D4","D5","D6","D7","D8","D9","DT","DJ","DQ","DK" // diamond
};

private BufferedImage[] cardImage=createAllImage();
public static CardPanel getInstance()
{
  CardPanel panel=new CardPanel();
  panel.setBackground(new java.awt.Color(255,255,128));
  panel.setPreferredSize(new java.awt.Dimension(800,400));
  return panel;
}

public BufferedImage[] createAllImage()
{
  BufferedImage[] imageArray = new BufferedImage[52];
  for (int i=0;i<52;i++)
  {
     imageArray[i]=createImage(deck[i]);
   }
  return imageArray;
}
// sample : createImage("S3");
public BufferedImage createImage(String card)
{
 // create a card image.
  int cardWidth=60, cardHeight=80;
  BufferedImage image=new BufferedImage(cardWidth, cardHeight, BufferedImage.TYPE_INT_ARGB);
 // get a graphics object of the image for drawing.
  java.awt.Graphics2D gr = (java.awt.Graphics2D) image.getGraphics();
 // draw a white playing card
  gr.setColor(java.awt.Color.WHITE);
  gr.fillRect(0,0,cardWidth,cardHeight);
 // with black border
  gr.setColor(java.awt.Color.BLACK);
  gr.drawRect(0,0,cardWidth-1,cardHeight-1);
 // draw the "three of Spade"
  Font font=new Font("Dialog",Font.PLAIN, 28);
  gr.setFont(font);
  String prefix=card.substring(0,1); // first character
  String postfix=card.substring(1,2); // second character
  String suit="";
  java.awt.Color color=java.awt.Color.BLACK;
  if (prefix.equals("S"))
  {
     suit="\u2660"; // unicode for the "spade" character
   }
  else if (prefix.equals("H"))
   {
      suit="\u2665"; // unicode for the "heart" character
      color=java.awt.Color.RED;
   }
  else if (prefix.equals("C"))
   {
     suit="\u2663";
   }
  else if (prefix.equals("D"))
   {
     suit="\u2666"; // unicode for the "diamond" character
     color=java.awt.Color.RED;
   }
   String point=postfix;
   int x=5;
   if (postfix.equals("T"))
    {
       x=1;
       point="10"; // special handling for "ten"
     }
  gr.setColor(color);
  gr.drawString(suit+point,x,45);
  return image;
 }
// override the paint method
public void paintComponent(java.awt.Graphics graphics)
{
  super.paintComponent(graphics); // paint background
// get panel dimemsion
  int w=getWidth();
  int h=getHeight();
// create a Graphics2D object for drawing shape
  java.awt.Graphics2D gr=(java.awt.Graphics2D) graphics;
  int y=0;
  int x=0;
for (int i=0;i<52;i++)
 {
   gr.drawImage(cardImage[i],x,y,this); // draw a card
   x+=61;
   if ((i+1)%13==0) {y+=81; x=0;}
  }
}
public static void main(String[] args) throws Exception
{
// create frame
  javax.swing.JFrame frame=new javax.swing.JFrame();
  frame.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
  frame.setTitle("Macteki CardPanel");
// create graphics panel and add it to the frame
  CardPanel panel=CardPanel.getInstance();
  frame.add(panel); // panel size is 800x400, see getInstance()
  frame.pack(); // this will correctly set the size of frame
// so that it is big enough to hold the panel
  frame.setVisible(true);
 }
}

Một số tài liệu và khoá học bổ ích dành cho bạn: 

# Tài liệu: Lập trình hướng đối tượng JAVA core dành cho người mới bắt đầu học lập trình [Click để xem]

# Khoá học online: Lập trình Java trong 4 tuần [Click để xem]

[Java] Hiển thị một thành phần giao diện tùy chỉnh? [ GUI ]

Hiển thị một hình ảnh trong một JLabel. Một JButton có thể được liên kết với một hình ảnh bằng cách sử dụng cách tiếp cận tương tự. Tuy nhiên, bài viết này không nói nút và nhãn. Chúng tôi sẽ làm cho một JPanel mà sơn bản thân theo một cách hoàn toàn tùy chỉnh. Thông thường, một JPanel là một thùng chứa giao diện có chứa các thành phần giao diện như nút và nhãn. Nó thường có hình chữ nhật và phương pháp sơn mặc định của nó chỉ điền vào một khu vực hình chữ nhật với màu nền. Chúng tôi sẽ ghi đè lên các phương thức paintComponent () như vậy mà chúng ta có thể rút ra bất cứ điều gì trên đó. Kỹ thuật này có thể được sử dụng trong các ứng dụng hiển thị hình ảnh động. Nó cũng rất hữu ích trong lập trình game.

Để bắt đầu, chúng tôi tạo ra một lớp tiểu của JPanel:

class GraphicsPanel extends javax.swing.JPanel
{
...
}

Tạo ra một phương thức getInstance () để có được một thể hiện của bảng này.
/ /
public static GraphicsPanel getInstance ()
{
GraphicsPanel panel = new GraphicsPanel ();
panel.setBackground (new java.awt.Color ( 255 , 255 , 128 ));
panel.setPreferredSize (new java.awt.Dimension ( 200 , 200 ));
return panel;
}

Ghi đè lên các phương thức paintComponent () để vẽ thành phần trong cách tùy chỉnh của chúng tôi.

/ / Ghi đè
public void paintComponent (java.awt.Graphics Graphics)
{
super paintComponent (Graphics);. / / sơn nền
/ / Nhận được bảng điều khiển dimemsion
int w = getWidth (); / / nên được 200
int h = getHeight (); / / nên được 200

/ / Tạo một đối tượng Graphics2D để vẽ hình dạng
java.awt.Graphics2D gr = (java.awt.Graphics2D) đồ họa;
gr.setStroke ( new java.awt.BasicStroke (5 )); / / thiết lập bút chiều rộng đến 5 điểm ảnh
gr.setColor ( new java.awt.Color (255,0,0 )); / / thiết lập màu để RED
gr.drawLine (0,0,w, h); / / vẽ đường chéo
gr.drawArc (0,0,w,h,0,360); / / vẽ vòng tròn
}

Cuối cùng, tạo ra một phương pháp main() để mở một cửa sổ hiển thị GraphicsPanel.

4. Code Java vẽ đường thẳng và đường tròn trong panel




/*
* File : GraphicsPanel.java
* Author :http://lap-trinh-may-tinh.blogspot.com/
* Description :
* Draw line and circle in a panel (vẽ đường thẳng và đường tròn trong panel).
* Tested with : JDK 1.6
******************************************************************************/
class GraphicsPanel extends javax.swing.JPanel
{
public static GraphicsPanel getInstance()
{
GraphicsPanel panel=new GraphicsPanel();
panel.setBackground(new java.awt.Color(255,255,128));
panel.setPreferredSize(new java.awt.Dimension(200,200));
return panel;
}
// override the paint method
public void paintComponent(java.awt.Graphics graphics)
{
super.paintComponent(graphics); // paint background
// get panel dimemsion
int w=getWidth(); // should be 200
int h=getHeight(); // should be 200
// create a Graphics2D object for drawing shape
java.awt.Graphics2D gr=(java.awt.Graphics2D) graphics;
gr.setStroke(new java.awt.BasicStroke(5)); // set pen width to 5 pixels
gr.setColor(new java.awt.Color(255,0,0)); // set Color to RED
gr.drawLine(0,0,w,h); // draw diagonal
gr.drawArc(0,0,w,h,0,360); // draw circle
}

public static void main(String[] args) throws Exception
{
// create frame
javax.swing.JFrame frame=new javax.swing.JFrame();
frame.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
frame.setTitle("Macteki Sample");
// create graphics panel and add it to the frame
GraphicsPanel panel=GraphicsPanel.getInstance();
frame.add(panel); // panel size is 200x200, see getInstance()
frame.pack(); // this will correctly set the size of frame
// so that it is big enough to hold the panel
frame.setVisible(true);
}
}

Một số tài liệu và khoá học bổ ích dành cho bạn: 

# Tài liệu: Lập trình hướng đối tượng JAVA core dành cho người mới bắt đầu học lập trình [Click để xem]

# Khoá học online: Lập trình Java trong 4 tuần [Click để xem]

[TxT]

[Java] Chương trình đọc file hình ảnh [Code Java]

Ví dụ: Viết chương trình đọc file hình ảnh với định dạng jpg



/*****************************************************************************
* File : JpegWriter.java
* Author : http://lap-trinh-may-tinh.blogspot.com/
* Description :
* Draw a simple image and write it to a jpeg file (image.jpg).
* Tested with : JDK 1.6
******************************************************************************/
import java.awt.image.BufferedImage;
class JpegWriter
{
public static void main(String[] args) throws Exception
{
// create a 200x200 image
int width=200, height=200;
BufferedImage image= new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// draw something to the image
java.awt.Graphics graphics=image.getGraphics();
// create a Graphics2D object for drawing shape
java.awt.Graphics2D gr=(java.awt.Graphics2D) graphics;
gr.setStroke(new java.awt.BasicStroke(5)); // set pen width to 5 pixels
gr.setColor(new java.awt.Color(255,0,0)); // set Color to RED
gr.drawLine(0,0,width,height); // draw diagonal
gr.drawArc(0,0,width,height,0,360); // draw circle
// write the image to a Jpeg File
javax.imageio.ImageIO.write(image, "JPEG", new java.io.File("image.jpg"));
}
}

Một số tài liệu và khoá học bổ ích dành cho bạn: 

# Tài liệu: Lập trình hướng đối tượng JAVA core dành cho người mới bắt đầu học lập trình [Click để xem]

# Khoá học online: Lập trình Java trong 4 tuần [Click để xem]



[TXT]

[ Java ] Chương trình Copy file [code Java]

Ví dụ: Viết chương trình Copy file (lưu ý, bạn phải tạo file cần copy trước khi Run)




/******************************************************************************
* File : Copier.java
* Author : http://lap-trinh-may-tinh.blogspot.com/
* Description :
* Simple file copying
* Tested with : JDK 1.6
******************************************************************************/
import java.io.*;
public class Copier
{
public static void main(String[] args) throws Exception
{
String source_file="Copier.java"; // copy myself
String dest_file = "Copier.java.1"; // name of the copy
FileInputStream fis=new FileInputStream(source_file);
FileOutputStream fos=new FileOutputStream(dest_file);
int BUF_SIZE=1024;
byte[] buffer=new byte[BUF_SIZE]; // 1K copy buffer
while (true)
{
int n=fis.read(buffer); // read
if (n>0) fos.write(buffer,0,n); // copy
if (n<0) break; // EOF
}
}
}

Một số tài liệu và khoá học bổ ích dành cho bạn: 

# Tài liệu: Lập trình hướng đối tượng JAVA core dành cho người mới bắt đầu học lập trình [Click để xem]

# Khoá học online: Lập trình Java trong 4 tuần [Click để xem]

[ Java ] Sử dụng Console để đọc file

Ví dụ: Viết chương trình đọc file E:\\test.txt.
  - Tạo file test.txt có nội dung tùy ý
  - Viết chương trình in ra màn hình nội dung file vừa nhập

Code Java:

package code1;
/******************************************************************************
* File : Typer.java
* Author : http://lap-trinh-may-tinh.blogspot.com/
* Display the contents of a text file.
******************************************************************************/

public class Code1
{
  public static void main(String[] args) throws Exception
  {
    java.io.BufferedReader br=new java.io.BufferedReader(
      new java.io.FileReader("E:\\test.txt"));
 
    String line=null;
    while ((line=br.readLine())!=null)  
    {
      System.out.println(line);
    }
  }
}

Một số tài liệu và khoá học bổ ích dành cho bạn: 

# Tài liệu: Lập trình hướng đối tượng JAVA core dành cho người mới bắt đầu học lập trình [Click để xem]

# Khoá học online: Lập trình Java trong 4 tuần [Click để xem]

[ HTML ] Thiết kế web với HTML 5

Giới thiệu với các bạn tổng quan về thiết kế web với HTML 5

HTML5 là lần sửa đổi tiếp theo của tiêu chuẩn HTML thay thế HTML 4.01, XHTML 1.0, và XHTML 1.1. HTML5 là một tiêu chuẩn cho cấu trúc và trình bày nội dung trên World Wide Web.

Với việc thiết kế web HTML 5 nhằm đáp ứng các phiên bản mới nhất của Apple Safari, Google Chrome, Mozilla Firefox, và Opera tất cả các tính năng hỗ trợ nhiều HTML5 và Internet Explorer 9.0 cũng sẽ có hỗ trợ cho một số chức năng HTML5.



Tính năng mới:

Thiết kế web HTML5 cung cấp một số phần tử mới và các thuộc tính giúp trong việc xây dựng một trang web hiện đại. Sau đây là các tính năng được giới thiệu trong HTML5.

• Các phần tử mới: của các thẻ <header>, <footer>, <section>.
• Form 2.0: Cải tiến cho các hình thức web HTML, nơi thuộc tính mới đã được giới thiệu cho <input> tag.
• Duy trì lưu trữ cục bộ: được thực hiện mà không cần phải dùng đến các plugin của bên thứ ba.
• WebSocket : Một A thế hệ tiếp theo của kỹ thuật truyền thông hai chiều cho các ứng dụng web.
• Server-Sent Events: HTML5 giới thiệu các luồng sự kiện từ máy chủ web tới các trình duyệt web và chúng được gọi là Server-Sent Events (SSE).
• Canvas: Yếu tố này hỗ trợ một giao diện vẽ hai chiều mà bạn có thể lập trình với JavaScript
• Audio & Video: Bạn có thể nhúng âm thanh hoặc video trên các trang web mà không cần phải dùng đến các plugin của bên thứ ba.
• Geolocation: là API cho phép người dùng ó thể chọn để chia sẻ vị trí địa lý của họ với các ứng dụng web của bạn.
• Microdata: Là một cách chuẩn hóa cho phép bạn tạo các từ vựng riêng vượt ra ngoài HTML5 và mở rộng các trang web của với ngữ nghĩa tùy chỉnh.
• Kéo và thả: Kéo và thả các mục từ một vị trí đến một vị trí trên cùng một trang web.

Cú pháp HTML5:

Thiết kế web với ngôn ngữ HTML 5 có một cú pháp HTML "tùy chỉnh" tương thích với các tài liệu HTML 4 và XHTML1 xuất bản trên web, nhưng không tương thích với tính năng bí truyền SGML của HTML 4

Trong việc thiết kế web HTML 5 không có quy tắc cú pháp tương tự như XHTML, nơi chúng ta cần trường hợp tên thẻ thấp hơn, trích dẫn các thuộc tính, một thuộc tính phải có một giá trị và đóng tất cả các thẻ trống.

Tuy nhiên, HTML5 cung cấp nhiều tính linh hoạt và hỗ trợ sau:
• Tên thẻ chữ hoa
• Các trích dẫn là tùy chọn cho thuộc tính.
• Giá trị thuộc tính là tùy chọn.
• Đóng các phần trống là tùy chọn.

DOCTYPE:

Doctypes trong các phiên bản cũ của HTM vẫn còn bởi vì ngôn ngữ HTML dựa trên SGML do đó yêu cầu một tham chiếu đến một DTD.

Soạn thảo tài liệu HTML 5 chúng ta sẽ sử dụng cú pháp đơn giản để xác định DOCTYPE như sau:

<!DOCTYPE html>

Tất cả cú pháp trên là không phân biệt chữ hoa thường.

Mã hóa ký tự:

Người soạn HTML 5 có thể sử dụng cú pháp đơn giản để chỉ ra mã hóa ký tự như sau:

<meta charset="UTF-8">

Tất cả cú pháp trên là không phân biệt chữ hoa thường.

Các phần tử HTML5:

Các phần từ được đánh dấu bằng cách sử dụng các thẻ bắt đầu và thẻ kết thúc. Các thẻ là giới hạn sử dụng dấu ngoặc nhọn với tên thẻ ở giữa.
Sự khác biệt giữa các thẻ bắt đầu và thẻ kết thúc là bao gồm một dấu gạch chéo trước tên thẻ

Dưới đây là một ví dụ phần tử HTML5:

<p>...</p>

Đối với việc thiết kế web HTML 5, tên thẻ HTML5 không phân biệt chữ hoa thường và có thể được viết trong tất cả các trường hợp chữ hoa hay hỗn hợp, mặc dù các quy ước phổ biến nhất là gắn bó với chữ thường.

Hầu hết các phần tử có chứa một số nội dung như <p> ... </ p> có chứa một đoạn văn. Tuy nhiên một số phần tử, không được phép có chứa bất kỳ nội dung nào và chúng được gọi là các phần tử trống. Ví dụ, br, giờ, liên kết và meta.

Các thuộc tính HTML5:

Các phần tử có thể chứa các thuộc tính được sử dụng để thiết lập các thuộc tính khác nhau của một phần tử

Một số thuộc tính được định nghĩa chung và có thể được sử dụng trên bất kỳ phần tử nào, trong khi những phần tử khác được xác định cụ thể. Tất cả các thuộc tính có một tên và một giá trị và giống như trong ví dụ dưới đây.

Sau đây là ví dụ của một thuộc tính HTML5 minh họa làm thế nào để đánh dấu lên một phần tử div với một thuộc tính được đặt tên lớp bằng cách sử dụng một giá trị của "example":

<div class="example">...</div>

Thuộc tính chỉ có thể được quy định trong các thẻ bắt đầu và không bao giờ được sử dụng trong các thẻ kết thúc.

Thuộc tính HTML5 không phân biệt chữ hoa và thường có thể được viết trong tất cả các trường hợp chữ hoa hay hỗn hợp, mặc dù các quy ước phổ biến nhất là gắn bó với chữ thường.

Các sự kiện HTML5:

Khi người dùng truy cập vào trang web của bạn, họ thực hiện công việc như nhấp chuột vào văn bản, hình ảnh và liên kết, v.v. Đây là những ví dụ về những gì JavaScript gọi các sự kiện
.
We can write our event handlers in Javascript of vbscript and can specify these event handlers as a value of event tag attribute. The HTML5 specification defines various event attributes as listed below:

Chúng ta có thể viết các xử lý sự kiện trong Javascript và có thể chỉ định các xử lý sự kiện này như một giá trị của thuộc tính thẻ sự kiện. Các đặc điểm kỹ thuật HTML5 định nghĩa thuộc tính sự kiện khác nhau như được liệt kê dưới đây:

Những thuộc tính sau đây có thể được sử dụng để kích hoạt bất kỳ mã javascript hoặc VBScript được đưa ra là giá trị, khi có bất kỳ sự kiện xảy ra đối với bất phần tử tố HTM5.

Tài liệu HTML5:

Các thẻ dưới đây được giới thiệu cho cấu trúc tốt:
• section: Thẻ này mô tả một tài liệu chung hoặc phần ứng dụng. Nó có thể được sử dụng cùng với thẻ h1-h6 để chỉ ra cấu trúc tài liệu
• article: Thẻ này mô tả cho một phần nội dung của một tài liệu độc lập, chẳng hạn như một entry blog hoặc bài báo.
• aside: Thẻ này mô tả cho một phần nội dung được chỉ liên quan đến phần còn lại của trang
• header: Thẻ này thể hiện tiêu đề của phần đầu trang.
• footer: Thẻ này mô tả một footer cho phần chân trang và có thể chứa thông tin về tác giả, thông tin bản quyền, vân vân
• nav: Thẻ này mô tả cho một phần của các tài liệu dành cho điều hướng
• dialog. Thẻ này có thể được sử dụng để đánh dấu một hộp hội thoại
• figure:. Thẻ này có thể được sử dụng để kết hợp một chú thích cùng với một số nội dung nhúng, chẳng hạn như một hình ảnh hoặc video

Thẻ đánh dấu cho một tài liệu 5 HTM sẽ như sau:

<!DOCTYPE html>
<html>
  <head>
     <meta charset="utf-8">
     <title>...</title>
  </head>
<body>
  <header>...</header>
  <nav>...</nav>
  <article>
   <section>
...
   </section>
  </article>
  <aside>...</aside>
  <footer>...</footer>
</body>
* Một số khác biệt và cải tiến giữa HTML và HTML5
- HTML5 sẽ là một chuẩn mới thay cho HTML.
- Phiên bản trước của HTML là HTML 4.01 năm 1999. Trải qua thời gian, HTML đã phát triển lên XHTML và giờ đây là HTML5,... chúng có cùng khả năng như HTML nhưng cú pháp chặt chẽ hơn, đơn giản hơn nhưng hiệu quả hơn.
- HTML5 vẫn đang trong quá trình phát triển. Tuy nhiên, trình duyệt chính hỗ trợ nhiều của các phần tử HTML5 và APIs mới

Ví dụ:
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
HTML5
<!DOCTYPE html>





- HTML VÀ HTML5 SEMANTIC (NGỮ NGHĨA)
Trong HTML5 cũng xuất hiện một khái niệm gọi là semantic markup, tức là các thẻ có mang ngữ nghĩa. Các thẻ này ra đời từ việc khảo sát các trang web và nhận diện một số thói quen đặt tên phổ biến (một số phần của trang web thường luôn được đặt một cái tên như “header”, “footer”, “nav”). Ngoài sự rõ ràng, sử dụng các semantic markup còn có thể đem lại lợi thế khi các công cụ tìm kiếm trong tương lai tận dụng chúng để phân loại kết quả.

HTML
<body>
<!-- Phần chứa logo -->
<div id="header">HEADER</div>
<!-- Phần chứa menu ngang -->
<div id="nav">NAVIGATION</div>
<!-- Phần thân 2 cột, kiểu 1 -->
<div class="section">
    <!-- Cột trái -->
    <div class="aside">SLIDEBAR LEFT</div>
    <!-- Nội dung chính -->
    <div class="article">CONTENT</div>
</div>
<!-- Phần thân 2 cột, kiểu 2 -->
<div class="section">
    <!-- Nội dung chính -->
    <div class="article">CONTENT</div>
    <!-- Cột phải -->
    <div class="aside">SLIDEBAR RIGHT</div>
</div>
<!-- Phần thân 3 cột, kiểu 1 -->
<div class="section">
    <!-- Cột trái -->
    <div class="aside">SLIDEBAR LEFT</div>
    <!-- Nội dung chính -->
    <div class="article">CONTENT</div>
    <!-- Cột phải -->
    <div class="aside">SLIDEBAR RIGHT</div>
</div>
<!-- Phần thân 3 cột, kiểu 2 -->
<div class="section">
    <!-- Nội dung chính -->
    <div class="article">CONTENT</div>
    <!-- Cột trái -->
    <div class="aside">SLIDEBAR LEFT</div>
    <!-- Cột phải -->
    <div class="aside">SLIDEBAR RIGHT</div>
</div>
<div id="footer">FOOTER</div>
</body>

ĐỊNH NGHĨA HIỂN THỊ XHTML THEO CSS 

-------------------------  

* {
  margin: 0;
  padding: 0;
}
body
{
  margin: 0 auto;
  width: 980px;
  font-family: Arial, Helvetica, sans-serif;
}
#header {
  padding: 10px;
  border: 1px solid #cccccc;
  position: relative;
}
#nav {
  padding: 10px;
  background: #f3f3f3;
  border: 1px solid #cccccc;
  position: relative;
}
.section {
  display: table;
  margin: 5px 0 5px;
  border: 1px solid #cccccc;
}
.section .article {
  display: table-cell;
  padding-right: 22px;
  width: 720px;
}
.section .aside {
  display: table-cell;
  width: 25%;
  background: #f3f3f3;
}
#footer{
  background: #838383;
  border-top: 1px solid #cccccc;
  padding: 10px;
  text-align: center;
  color: #ffffff;
  font-size: 80%;
}
HTML5
<body>
    <!-- Phần chứa logo -->
    <header>HEADER</header>
    <!-- Phần chứa menu ngang -->
    <nav>NAVIGATION</nav>
    <!-- Phần thân 2 cột, kiểu 1 -->
    <section>
        <!-- Cột trái -->
        <aside>SLIDEBAR LEFT</aside>
        <!-- Nội dung chính -->
        <article>CONTENT</article>
    </section>
    <!-- Phần thân 2 cột, kiểu 2 -->
    <section>
        <!-- Nội dung chính -->
        <article>CONTENT</article>
        <!-- Cột phải -->
        <aside>SLIDEBAR RIGHT</aside>
    </section>
    <!-- Phần thân 3 cột, kiểu 1 -->
    <section>
        <!-- Cột trái -->
        <aside>SLIDEBAR LEFT</aside>
        <!-- Nội dung chính -->
        <article>CONTENT</article>
        <!-- Cột phải -->
        <aside>SLIDEBAR RIGHT</aside>
    </section>
    <!-- Phần thân 3 cột, kiểu 2 -->
    <section>
        <!-- Nội dung chính -->
        <article>CONTENT</article>
        <!-- Cột trái -->
        <aside>SLIDEBAR LEFT</aside>
        <!-- Cột phải -->
        <aside>SLIDEBAR RIGHT</aside>
    </section>
    <footer>FOOTER</footer
</body> 

ĐỊNH NGHĨA HIỂN THỊ HTML5 THEO CSS3

-----------------
* {
    margin: 0;
    padding: 0;
}
body
{
    margin: 0 auto;
    width: 980px;
    font-family: Arial, Helvetica, sans-serif;
}
header {
    padding: 10px;
    border: 1px solid #cccccc;
    position: relative;
}
nav {
    padding: 10px;
    background: #f3f3f3;
    border: 1px solid #cccccc;
    position: relative;
}
section {
    display: table;
    margin: 5px 0 5px;
    border: 1px solid #cccccc;
}
section article {
    display: table-cell;
    padding-right: 22px;
    width: 720px;
}
section aside {
    display: table-cell;
    width: 25%;
    background: #f3f3f3;
}
footer{
    background: #838383;
    border-top: 1px solid #cccccc;
    padding: 10px;
    text-align: center;
    color: #ffffff;
    font-size: 80%
} 


[Tham khảo esvn]

Tìm kiếm nội dung khác: