Slide bài giảng Thiết kế giao diện trong JAVA

Thông báo dành cho các sinh viên đang học Java

Thầy vừa upload lên mạng slide bài giảng GUI trong Java, yêu cầu các em sinh viên phải tải về xem qua trước lý thuyết cũng như cách thực hiện

Ứng với mỗi Control đều có ví dụ mẫu, các em phải cài đặt lại toàn bộ ví dụ mẫu.

Link Powerpoint:

http://www.mediafire.com/?jc25m6rakhxpjd8

Link PDF:

http://www.mediafire.com/?dxob4v2fblljbla

Thầy Thanh.

Cách tạo giao diện trong Java – phần 4 : CardLayout

Để tạo được giao diện trong Java, trước tiên các bạn phải biết được LayoutManager trong Java, nó giống như là bản vẽ kỹ thuật cho một ngôi nhà.

Có nhiều loại LayoutManager, chẳng hạn như:

  •  FlowLayout
  •  BoxLayout
  •  BorderLayout
  •  CardLayout
  •  GridBagLayout
  •  GridLayout
  •  GroupLayout
  •  SpringLayout

Trong phần 4 chúng ta sẽ học về CardLayout

======================================================================

CardLayout

======================================================================

CardLayout cho phép chia sẻ vị trí hiển thị của các control, tức là ứng với cùng 1 vị trí hiển thị đó thì ta có thể cho các control khác hiển thị tại những thời điểm khác nhau, mặc định control được add đầu tiên sẽ hiển thị

importjava.awt.*;import java.awt.event.*;

import javax.swing.*;

public class MyCardLayout extends JFrame{

private static final long serialVersionUID = 1L;

public MyCardLayout(String title)

{

super(title);

}

public void doShow()

{

setSize(400,300);

setLocationRelativeTo(null);

setDefaultCloseOperation(EXIT_ON_CLOSE);

addControl();

setVisible(true);

}

public void addControl()

{

JPanel pnBorder=new JPanel();

pnBorder.setLayout(new BorderLayout());

JPanel pnNorth=new JPanel();

JButton btnShowCard1=new JButton(“Show Card1”);

JButton btnShowCard2=new JButton(“Show Card2”);

pnNorth.add(btnShowCard1);

pnNorth.add(btnShowCard2);

pnBorder.add(pnNorth,BorderLayout.NORTH);

final JPanel pnCenter=new JPanel();

pnCenter.setLayout(new CardLayout());

pnCenter.setBackground(Color.LIGHT_GRAY);

final JPanel pnCard1=new JPanel();

pnCard1.setBackground(Color.LIGHT_GRAY);

pnCard1.add(new JButton(“Hello “));

pnCard1.add(new JButton(“I’m Card1”));

final JPanel pnCard2=new JPanel();

pnCard2.setBackground(Color.PINK);

pnCard2.add(new JButton(“Hi “));

pnCard2.add(new JCheckBox(“CardLayout”));

pnCard2.add(new JButton(“I’m Card2″));

pnCenter.add(pnCard1,”mycard1″);

pnCenter.add(pnCard2,”mycard2”);

pnBorder.add(pnCenter,BorderLayout.CENTER);

Container con=getContentPane();

con.add(pnBorder);

btnShowCard1.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent arg0) {

CardLayout cl=(CardLayout)pnCenter.getLayout();

cl.show(pnCenter, “mycard1”);

}

});

btnShowCard2.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent arg0) {

CardLayout cl=(CardLayout)pnCenter.getLayout();

cl.show(pnCenter, “mycard2”);

}

});

}

public static void main(String[] args) {

MyCardLayout card=new MyCardLayout(“Demo CardLayout”);

card.doShow();

}

}

pnCenter.setLayout(new CardLayout()); để thiết lập pnCenter có layout là CardLayout

pnCenter.add(pnCard1,”mycard1″); thêm pnCard1 vào pnCenter

pnCenter.add(pnCard2,”mycard2″); them pnCard2 vào pnCenter

Mặc định thì pnCard1 sẽ được hiển thị, mỗi một card Tôi đặt tên lần lượt là mycard1 mycard2, ta sẽ dựa vào 2 tên kiểu chuỗi này để hiển thị hay không hiển thị.

Các bạn nhìn vào sự kiện lệnh cho nút btnShowCard1 và btnShowCard2:

CardLayout cl=(CardLayout)pnCenter.getLayout(); hàm getLayout để lấy về Layout sau đó ta ép qua kiểu CardLayout

cl.show(pnCenter, “mycard2”); gọi phương thức show của  đối tượng CardLayout để hiển thị theo tên, ở đây ta muốn hiển thị card2 thì truyền tên mycard2 vào.

Tôi có capture hình ảnh cho 2 trường hợp này:

Mặc định các bạn sẽ thấy Card1 hiển thị như hình bên dưới:

Bây giờ bạn click chuột vào nút Show Card2 bạn sẽ nhận được hình như bên dưới:

Ngoài ra các bạn có thể dùng JTabbedPane để thay thế cho CardLayout, JTabbedPane có giao diện đẹp mắt và thân thiện với người sử dụng, đoạn code dưới đây Tôi sẽ minh họa cho JTabbedPane:

import java.awt.*;

import javax.swing.*;

public class MytabbedControl extends JFrame {

private static final long serialVersionUID = 1L;

public MytabbedControl(String title)

{

super(title);

}

public void doShow()

{

setSize(400,300);

setLocationRelativeTo(null);

setDefaultCloseOperation(EXIT_ON_CLOSE);

addControl();

setVisible(true);

}

public void addControl()

{

JTabbedPane myTabled=new JTabbedPane();

JPanel pnTab1=new JPanel();

pnTab1.setBackground(Color.BLUE);

pnTab1.add(new JButton(“Tabbed 1”));

JPanel pnTab2=new JPanel();

pnTab2.setBackground(Color.ORANGE);

pnTab2.add(new JButton(“Tabbed 2″));

myTabled.add(pnTab1,”Tab1″);

myTabled.add(pnTab2,”Tab2”);

Container con=getContentPane();

con.add(myTabled);

}

public static void main(String[] args) {

MytabbedControl ui=new MytabbedControl(“My Tabbled”);

ui.doShow();

}

}

JTabbedPane myTabled=new JTabbedPane(); khai báo đối tượng  JTabbedPane

myTabled.add(pnTab1,”Tab1″); thêm 1 tab mới với tên là Tab1

myTabled.add(pnTab2,”Tab2″); thêm 1 tab mới với tên là Tab2

Các bạn xem hình ảnh minh họa JTabbedPane bên dưới:


Click qua Tab2 bạn sẽ thấy:

Cách tạo giao diện trong Java – phần 3 : BorderLayout

Để tạo được giao diện trong Java, trước tiên các bạn phải biết được LayoutManager trong Java, nó giống như là bản vẽ kỹ thuật cho một ngôi nhà.

Có nhiều loại LayoutManager, chẳng hạn như:

  •  FlowLayout
  •  BoxLayout
  •  BorderLayout
  •  CardLayout
  •  GridBagLayout
  •  GridLayout
  •  GroupLayout
  •  SpringLayout

Trong phần 3 chúng ta sẽ học về BorderLayout

======================================================================

BorderLayout

======================================================================

BorderLayout giúp chúng ta hiển thị các control theo 5 vùng chính theo hình dưới đây:

Nếu như không có 4 vùng : North, West, South, East. Thì vùng Center sẽ tràn đầy cửa sổ, thông thường khi đưa các control JTable, JTree, ListView, JScrollpane… ta thường đưa vào vùng Center để nó có thể tự co giãn theo kích thước cửa sổ giúp giao diện đẹp hơn.

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Container;

import java.awt.Dimension;

import java.awt.Font;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

public class MyBorderLayout extends JFrame

{

private static final long serialVersionUID = 1L;

public MyBorderLayout(String title)

{

setTitle(title);

}

public void doShow()

{

setSize(400,300);

setLocationRelativeTo(null);

setDefaultCloseOperation(EXIT_ON_CLOSE);

addControl();

setVisible(true);

}

public void addControl()

{

JPanel pnBorder=new JPanel();

pnBorder.setLayout(new BorderLayout());

Font ft=new Font(“Arial”, Font.BOLD|Font.ITALIC, 25);

JPanel pnNorth=new JPanel();

pnNorth.setBackground(Color.RED);

pnNorth.setPreferredSize(new Dimension(0, 50));

JLabel lblTitleNorth=new JLabel(“North”);

pnNorth.add(lblTitleNorth);

lblTitleNorth.setForeground(Color.WHITE);

lblTitleNorth.setFont(ft);

pnBorder.add(pnNorth,BorderLayout.NORTH);

JPanel pnSouth=new JPanel();

pnSouth.setBackground(Color.RED);

pnSouth.setPreferredSize(pnNorth.getPreferredSize());

JLabel lblTitleSouth=new JLabel(“South”);

pnSouth.add(lblTitleSouth);

lblTitleSouth.setForeground(Color.WHITE);

lblTitleSouth.setFont(ft);

pnBorder.add(pnSouth,BorderLayout.SOUTH);

JPanel pnWest=new JPanel();

pnWest.setBackground(Color.BLUE);

pnWest.setPreferredSize(new Dimension(70, 0));

JLabel lblTitleWest=new JLabel(“West”,JLabel.CENTER);

lblTitleWest.setFont(ft);

lblTitleWest.setForeground(Color.WHITE);

pnWest.setLayout(new BorderLayout());

pnWest.add(lblTitleWest,BorderLayout.CENTER);

pnBorder.add(pnWest,BorderLayout.WEST);

JPanel pnEast=new JPanel();

pnEast.setBackground(Color.BLUE);

pnEast.setPreferredSize(new Dimension(70, 0));

JLabel lblTitleEast=new JLabel(“East”,JLabel.CENTER);

lblTitleEast.setFont(ft);

lblTitleEast.setForeground(Color.WHITE);

pnEast.setLayout(new BorderLayout());

pnEast.add(lblTitleEast,BorderLayout.CENTER);

pnBorder.add(pnEast,BorderLayout.EAST);

JPanel pnCenter=new JPanel();

pnCenter.setBackground(Color.YELLOW);

pnCenter.setLayout(new BorderLayout());

JLabel lblTitleCenter=new JLabel(“Center”,JLabel.CENTER);

lblTitleCenter.setFont(ft);

pnCenter.add(lblTitleCenter,BorderLayout.CENTER);

pnBorder.add(pnCenter,BorderLayout.CENTER);

Container con=getContentPane();

con.add(pnBorder);

}

public static void main(String[] args) {

MyBorderLayout bor=new MyBorderLayout(“BorderLayout”);

bor.doShow();

}

}

Chúng ta có thể kết hợp FlowLayout , BoxLayout, BorderLayout để thiết kế giao diện, theo kinh nghiệm của Tôi thì chúng ta chỉ cần biết 3 Layout này là có thể thiết kế giao diện đẹp mắt được.

Cách tạo giao diện trong Java – phần 2 : BoxLayout

Để tạo được giao diện trong Java, trước tiên các bạn phải biết được LayoutManager trong Java, nó giống như là bản vẽ kỹ thuật cho một ngôi nhà.

Có nhiều loại LayoutManager, chẳng hạn như:

  •  FlowLayout
  •  BoxLayout
  •  BorderLayout
  •  CardLayout
  •  GridBagLayout
  •  GridLayout
  •  GroupLayout
  •  SpringLayout

Trong phần 2 chúng ta sẽ học về BoxLayout

======================================================================

BoxLayout : X_AXIS & Y_AXIS

======================================================================

BoxLayout cho phép add các control trên mỗi dòng hoặc mỗi cột, tại mỗi vị trí add nó chỉ chấp nhận 1 control, do đó muốn xuất hiện nhiều control tại một vị trí thì bạn nên add vị trí đó là 1 JPanel rồi sau đó add các control khác vào JPanel này, BoxLayout có 2 hằng số để xác định hướng xuất hiện của control: BoxLayout.X_AXIS cho phép add các control theo hướng từ trái qua phải, BoxLayout.Y_AXIS cho phép add các control theo hướng từ trên xuống dưới. BoxLayout khác biệt FlowLayout ở chỗ là nó sẽ không tự động xuống dòng khi hết chỗ chứa, tức là các control sẽ bị che khuất nếu như thiếu không gian chứa nó.

importjava.awt.*;import javax.swing.*;

public class MyBoxLayout extends JFrame

{

private static final long serialVersionUID = 1L;

public MyBoxLayout(String title)

{

super(title);

}

public void doShow()

{

setSize(400,200);

setLocationRelativeTo(null);

setDefaultCloseOperation(EXIT_ON_CLOSE);

addControl(); //gọi hàm AddControl

setVisible(true);

}

public void addControl()

{

JPanel pnBox=new JPanel();

pnBox.setLayout(new BoxLayout(pnBox, BoxLayout.X_AXIS));

JButton btn1=new JButton(“BoxLayout”);

btn1.setForeground(Color.RED);

Font font=new Font(“Arial”,Font.BOLD | Font.ITALIC,25);

btn1.setFont(font);

pnBox.add(btn1);

JButton btn2=new JButton(“X_AXIS”);

btn2.setForeground(Color.BLUE);

btn2.setFont(font);

pnBox.add(btn2);

JButton btn3=new JButton(“Y_AXIS”);

btn3.setForeground(Color.ORANGE);

btn3.setFont(font);

pnBox.add(btn3);

Container con=getContentPane();

con.add(pnBox);

}

public static void main(String[] args) {

MyBoxLayout box=new MyBoxLayout(“Học BoxLayout”);

box.doShow();

}

}

pnBox.setLayout(new BoxLayout(pnBox, BoxLayout.X_AXIS)); dùng để thiết lập layout cho JPanel, ở đây ta thiết lập  BoxLayout.X_AXIS tức là các control xuất hiện theo chiều từ trái qua phải.

Font font=new Font(“Arial”,Font.BOLD | Font.ITALIC,25); tạo đối tượng font với Font chữ là Arial, vừa in đâm và in nghiêng và kích thước là 25px

btn1.setFont(font); thiết lập font chữ cho button btn1

btn2.setForeground(Color.BLUE); thiết lập màu chữ cho btn2

Như đã nói BoxLayout sẽ không tự động xuống dòng khi hết khoảng không gian chứa control, nên các bạn có thể thấy trong hình dưới đây khi Tôi thu hẹp kích thước cửa sổ lại:

Trong đoạn lệnh pnBox.setLayout(new BoxLayout(pnBox, BoxLayout.X_AXIS)); nếu như bạn đổi BoxLayout.X_AXIS thành BoxLayout.Y_AXIS thì các control sẽ được hiển thị như sau:

Cách tạo giao diện trong Java – phần 1 : FlowLayout

Để tạo được giao diện trong Java, trước tiên các bạn phải biết được LayoutManager trong Java, nó giống như là bản vẽ kỹ thuật cho một ngôi nhà.

Có nhiều loại LayoutManager, chẳng hạn như:

  •  FlowLayout  
  •  BoxLayout
  •  BorderLayout
  •  CardLayout
  •  GridBagLayout
  •  GridLayout
  •  GroupLayout
  •  SpringLayout

Trong phần 1 chúng ta sẽ học về FlowLayout

======================================================================

FlowLayout

======================================================================

FlowLayout cho phép add các control trên cùng một dòng, khi nào hết chỗ chứa nó sẽ tự động xuống dòng, ta cũng có thể điều chỉnh hướng xuất hiện của control. Mặc định khi một JPanel được khởi tạo thì bản thân lớp chứa này sẽ có kiểu Layout là FlowLayout. Bạn tưởng tượng rằng JPanel giống như cái thùng đựng đồ vật, từng đồ vật là các control ví dụ như trong thùng đựng đồ vật ta có thể đựng Sách, bút, giày, dép…Ta nên tạo JPanel để add các control vào JPanel để việc quản lý control được dễ dàng hơn.

Đoạn code dưới đây sẽ minh họa về FlowLayout, Tôi sẽ giải thích chi tiết từng dòng lệnh:

import java.awt.Color;import java.awt.Container;import java.awt.FlowLayout;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

public class MyFlowLayout extends JFrame{

private static final long serialVersionUID = 1L;

public MyFlowLayout(String title)

{

setTitle(title);

JPanel pnFlow=new JPanel();

pnFlow.setLayout(new FlowLayout());

pnFlow.setBackground(Color.PINK);

JButton btn1=new JButton(“FlowLayout”);

JButton btn2=new JButton(“Add các control”);

JButton btn3=new JButton(“Trên 1 dòng”);

JButton btn4=new JButton(“Hết chỗ chứa”);

JButton btn5=new JButton(“Thì xuống dòng”);

pnFlow.add(btn1);

pnFlow.add(btn2);

pnFlow.add(btn3);

pnFlow.add(btn4);

pnFlow.add(btn5);

Container con=getContentPane();

con.add(pnFlow);

}

public static void main(String[] args)

{

MyFlowLayout myUI=new MyFlowLayout(“Demo FlowLayout”);

myUI.setSize(600, 100);

myUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

myUI.setLocationRelativeTo(null);

myUI.setVisible(true);

}

}

Khi chạy giao diện lên chúng ta sẽ thấy như hình bên dưới

Mặc định các control sẽ nằm trên cùng 1 dòng, nếu như không đủ chỗ chứa thì những control đó sẽ tự động rơi xuống dòng khác

Container con=getContentPane(); dùng để lấy lớp chứa của cửa sổ windows

con.add(pnFlow); dùng để add lớp chứa JPanel vào cửa sổ

Trong hàm main bạn để ý:

myUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); thiết lập sự kiện đóng cửa sổ windows khi người sử dụng click chọn vào dấu “X” ở góc phải trên cùng cửa sổ

myUI.setLocationRelativeTo(null); thiết lập cửa sổ xuất hiện ở giữa màn hình desktop

myUI.setVisible(true); cho phép cửa sổ hiển thị ra.

– Nếu muốn gán sự kiện click chuột cho button 5 thì bạn có nhiều cách gán sự kiện, Tôi sẽ hướng dẫn 1 cách:

ngay bên dưới dòng lệnh JButton btn5=new JButton(“Thì xuống dòng”); bạn thêm vào lệnh sau:

btn5.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
JOptionPane.showMessageDialog(null, “Button 5 được click!”);
}
});
Ở đây đơn giản Tôi hiển thị 1 messagebox thông báo là “Button 5 được click!”

Các ví dụ về Java Assignment Operator

Các toán tử =, +=, -=, *=, /=, %= là khá quen thuộc nên Tôi sẽ không giải thích các toán từ này:

1) Toán tử <<= (Left Shift, then assignment). Tôi gọi nôm na là đẩy bit qua bên trái

Ví dụ 1:

int x=5;
int y=2;
x=x<<y;

System.out.println(x);

Chúng ta sẽ có kết quả là 20

Quá trình nó thực hiện như sau:

– Phân tích số thập phân thành nhị phân

số x=5 sang nhị phân : 00000101

– Biểu thức x=x<<y, trước tiên vế phải được thực hiện trước, nó sẽ đẩy dãy nhị phân x=5 qua bên trái 2 bit ( vì y =2)

tức là: 00000101 sẽ thành 00010100 (sau khi đẩy qua trái thì các bit bên phải sẽ trở thành 0), số nhị phân 00010100 sẽ có giá trị là: 2^4+2^2=16+4=20 . Như vậy cuối cùng ta được x=20.

Ví dụ 2:

int x=11;
int y=4;
x=x<<y;

System.out.println(x);

Chúng ta sẽ có kết quả là 176

Quá trình nó thực hiện như sau:

– Phân tích số thập phân thành nhị phân

số x=11 sang nhị phân : 00001011

– Biểu thức x=x<<y, trước tiên vế phải được thực hiện trước, nó sẽ đẩy dãy nhị phân x=11 qua bên trái 4 bit ( vì y =4)

tức là: 00001011 sẽ thành 10110000(sau khi đẩy qua trái thì các bit bên phải sẽ trở thành 0), số nhị phân 10110000sẽ có giá trị là: 2^7+2^5+2^4=128+32+16=176 . Như vậy cuối cùng ta được x=176.

Tương tự đối với số âm, đầu tiên bạn cứ dịch chuyển bit y chang như số  dương bên trên, sau đó thêm dấu âm (-) vào đằng trước kết quả. Tức là giả sử x=-11, y=4 thì x=x<<y sẽ có kết quả là -176.

2) Toán tử >>= (Right Shift with sign, then assignment). Tôi gọi nôm na là đẩy bit qua bên phải

Trường hợp này số dương và số âm nó có khác biệt lớn.

Đối với số dương nó sẽ dịch chuyển các bit qua bên phải, các bit trái sẽ =0

Ví dụ 1: Giả sử ta có đoạn lệnh bên dưới:

int x=13;
int y=1;
x=x>>y;

System.out.println(x);

Kết quả ta được là 6

Trước tiên nó cũng phân tích 13 ra số nhị phân như sau: 00001101 sau đó biểu thức x=x>>y sẽ dịch chuyển x=13 qua bên phải 1 bit, tức là ta sẽ được 00000110, như vậy sẽ cho ra kết quả 2^2+2^1 =4+2=6

Ví dụ 2: Giả sử ta có đoạn lệnh bên dưới:

int x=45;
int y=2;
x=x>>y;

System.out.println(x);

Kết quả ta được là 11

Trước tiên nó cũng phân tích 45 ra số nhị phân như sau: 00101101 sau đó biểu thức x=x>>y sẽ dịch chuyển x=45 qua bên phải 2 bit, tức là ta sẽ được 00001011, như vậy sẽ cho ra kết quả 2^3+2^1+2^0 =8+2+1=11

Đối với số âm (trước tiên các bạn phải xem qua Topic biểu diễn số âm trong máy tính http://duythanhcse.wordpress.com/2012/01/02/cach-bi%E1%BB%83u-di%E1%BB%85n-s%E1%BB%91-am-trong-may-tinh-ph%C6%B0%C6%A1ng-phap-bu-2/)

Giả sử các bạn đã thông thạo phương pháp bù 2 để biểu diễn số Âm trong máy tính, giờ Tôi sẽ viết đoạn lệnh trong Java để kiểm chứng kết quả cho toán tử >>:

int x=-45;
int y=2;
x=x>>y;
System.out.println(x);

Trước tiên bạn phải đổi -45 sang nhị phân = 1101 0011 . Nếu bạn chưa biết cách đổi thì bạn vào Topic biểu diễn số âm bằng phương pháp bù 2 (xem link bên trên).

Dòng lệnh x=x>>y, tức là dịch chuyển x qua phải 2 bit (vì y=2). Sau khi dịch chuyển ta sẽ được kết quả như sau: 1111 0100

Để biết được số nhị phân 1111 0100 có giá trị là bao nhiêu khi chuyển sang hệ thập phân, các bạn làm như sau:

– Tiến hành đảo bit 1111 0100 thành => 0000 1011

– Sau đó cộng thêm 1 vào kết quả 0000 1011, ta được 0000 1100

– Như vậy kết quả sẽ được : 2^3+2^2 = 8+4=12, với dấu đằng trước là Âm, nên kết quả ta được -12

Tức là khi dòng lệnh System.out.println(x); thực hiện thì ta sẽ được -12

3)>>>= (Right Shift with zero, then assignment) – Chú ý phép toán này dựa trên mẫu 32 bit.

Trường hợp này nếu là số Dương (>0) thì >>>= sẽ giống như >>= (Tức là kết quả của toán tử >>= cho kết quả như thế nào thì >>>= cũng cho kết quả như vậy). Do đó trong trường hợp số Dương bạn sẽ xem phần giải thích >>=

Bây giờ Tôi hướng dẫn trường hợp số âm (<0).

Ví dụ 1: – Bạn nhớ tự so sánh với cách làm của toán tử >>= xem chúng khác nhau ở bước nào nhé.

int x=-11;
int y=2;
x=x>>>y;

Trước tiên ta cũng biểu diễn -11 về dạng nhị phân như sau: 11111111 11111111 11111111 1111 0101 (Tôi giả sử các bạn đã biết phương pháp Bù 2)

lệnh x>>>y tức là dời x qua bên phải 2 bit : 00111111 11111111 11111111 1111 1101 

Ở bước này ta được kết quả và gán cho biến x luôn (tức là nó khác với >>=, toán tử >>= sẽ đảo bit, sau đó +1 để tính ngược ra số thập phân). Còn đối với >>>= thì không cần, tại đây ta tính luôn:

00111111 11111111 11111111 1111 1101 =2^29+……..2^3+2^2+2^0= 1073741821

Ví dụ 2:

int x=-45;
int y=10;
x=x>>>y;

Biết rằng sau khi thực hiện thì x=4194303, bạn thử tự chạy bằng tay xem có đúng như vậy không  nhé.

4) &= (Bitwise AND, then Assignment)

– Các bạn hiểu nôm na là các bit đều giống nhau là 1 thì sẽ cho kết quả 1, chỉ cần 1 bit là 0 thì sẽ cho kết quả là 0.

Ví dụ 1:

int x=5;
int y=6;
x=x&y;
Chuyển 5 thành nhị phân  0101
Chuyển 6 thành nhị phân 0110
Tiến hành Bitwise And

0101
&
0110
—————-
0100
System.out.println(x); ==> kết quả sẽ là 4 vì 0100 => 2^2=4

Ví dụ 2:

int x=5;
int y=6;
x=x&y;
Chuyển – 5 thành nhị phân  1011 (dùng phương pháp bù 2)
Chuyển 6 thành nhị phân   0110
Tiến hành Bitwise And

1011
&
0110
—————-
0010
System.out.println(x); ==> kết quả sẽ là 4 vì 0010 => 2^1=2

5) |= (Bitwise OR, then Assignment)

– Chỉ cần 1 bit là 1 thì sẽ cho kết quả 1, cả 2 bit là 0 thì mới cho kết quả 0:

Ví dụ:

int x=13;
int y=3;
x=x|y;
Chuyển 13 sang nhị phân: 1101
Chuyển 3 sang nhị phân  : 0011
Tiến hành Bitwise OR hai số nhị phân trên ta được:

1101
|
0011
————-
1111
System.out.println(x); Sẽ cho kết quả 15 vì 1111 đổi ra thập phân =2^3+2^2+2^1+2^0 =15

Tương tự cho số âm, bạn dùng phương pháp bù 2, sau đó dùng Bitwise OR giống như ví dụ trên.

6) ^= (Bitwise XOR, then Assignment)

– Các bit khác nhau sẽ cho giá trị 1, giống nhau sẽ cho giá trị 0.

Ví dụ:

int x=11;
int y=2;
x=x^y;
Chuyển 11 sang hệ nhị phân: 1011
Chuyển 2 sang hệ nhị phân  : 0010
Tiến hành Bitwise XOR:

1011
^
0010
————–
1001
System.out.println(x); kết quả sẽ cho giá trị 9, bởi vì số nhị phân 1001 đổi qua thập phân = 2^3+2^0=9

Như vậy Tôi đã hướng dẫn khái quát các toán tử khó.

Các bạn phải cố gắng đọc hiểu để làm bài tập cho tốt!

Chúc các bạn thành công.

Danh sách nhóm đề tài Java 1 lớp NCTH4B

STT

TÊN THÀNH VIÊN

MSSV

TÊN ĐỀ TÀI

1

Nguyễn Hoàng Duy 10180081

Viết chương trình quản lý bán hàng linh kiện máy tính.

Bùi Thanh Long 10180601
Lương Tuấn Dũng 10179701
Nguyễn Thị Ngọc Phương 10115991

2

Huỳnh Thị Hồng Hoa 10195071 Viết chương trình quản lý cửa hàng thời trang.
Trần Thị Mến 10177571
Nguyễn Huỳnh Tấn Phát 10175451

3

Nguyễn Văn Quốc 10134971 Viết chương trình quản lí sinh viên.
Trần Hữu Hưng 10182801
Nguyễn Văn Kiệt 10070751

4

Nguyễn Hoàng Nguyên 10212831 Viết chương trình quản lí cửa hàng bán đĩa CD.
Trần Quốc Vương 10192601
Huỳnh Phú 10176661

5

Công Hoàng Luân 10301281 Viết chương trình quản lí học sinh tiểu học.
Nguyễn Văn Hưng 10197331
Huỳnh Hữu Duy Mỹ 08172431

6

Trần Quí Đạt 10181201 Viết chương trình quản lí việc sử dụng phòng học trong trường ĐH CN.
Nguyễn Hoàng Dĩnh 10197691
Nguyễn Hoàng Dân 10195651

7

Bùi Duy Vĩnh Trường 10177971 Viết chương trình quản lí xuất nhập hàng hóa của 1 cửa hàng tạp hóa.
Huỳnh Thanh Anh Tuấn 10183861
Lâm Minh Tiến 10178401

8

Hồ Văn Sang 10177231 Viết chương trình quản lí cửa hàng bán xe gắn máy.
Nguyễn Minh Tâm 10177721
Nguyễn Viết Tiên 10189411

9

Trần Văn Hồng Thuận 10184971 Viết chương trình quản lí nhân sự.
Lê Thành Sơn 10174881
Phạm Chí Quốc 10102111

10

Bùi Xuân Thành 10178791 Viết chương trình quản lý việc giao nhận rau của 1 công ty chuyên thu mua và cung cấp rau sạch cho các đại lý.
Đoàn Phan Quang Minh 10050881
Nguyễn Thái Hiền 10184411

11

Nguyễn Thanh Vương 10192511 Viết chương trình  quản lý cửa hàng bán máy tính và các thiết bị máy tính cũ.
Nguyễn Văn Thành 10187251
Nguyễn Trọng Phát 10175211

12

Tạ Tuấn Đạt 10196361 Viết chương trình quản lý việc chấm công và tính lương cho công ty may.
Nguyễn Thị Thu Sang 10276721
Nguyễn Thị Phương 10195511

13

Nguyễn Khoa Mẫn 10197851 Viết chương trình quản lí cửa hàng bán xăng.
Võ Văn Lộc 10177381
Nguyễn Xuân Vượng 10192511

14

Nguyễn Thắng 10190211 Viết chương trình quản lí thu chi cho quán càfé.
Nguyễn Tấn Phúc 10069011
Phạm Hoàng Ngọc Thịnh 10088691

15

Trần Xuân Thịnh 10098981 Viết chương trình quản lí khách sạn.
Võ Văn Trường 10174061
Lê Quang Vương 10192831

16

Lê Quốc Anh Khoa 10177271 Viết chương trình quản lí cửa hàng bán máy lạnh.
Nguyễn Minh Lộc 10159921
Nguyễn Duy Tân 10209471

17

Nguyễn Bá Nhã 10156481 Viết chương trình quản lí câu lạc bộ bóng đá.
Nguyễn Duy Thọ 10175111
Lê Văn Huy 10180701

18

Đoàn Đức Bình 10144391 Viết chương trình quản lí cửa hàng bán quần áo.
Nguyễn Thành Phi Hải 10175761
Phạm Quang Hoạt 10178221

19

Tống Trọng Nghĩa 10196781 Viết chương trình quản lí siêu thị.
Nguyễn Thành Nam 10196001
Bùi Công Ngọc 10196671

Cách biên dịch và chạy tập tin Java có chứa package

Trong Topic này Tôi sẽ hướng dẫn các bạn cách biên dịch và chạy tập tin Java có chưa package như thế nào

Giả sử Tôi có 1 tập tin tên là Hello.java nằm trong thư mục test của ổ E, với nội dung bên trong giống như hình minh họa bên dưới:

Nhìn vào hình minh họa bên trên thì bạn dễ dàng nhận ra class Hello nằm trong package duythanhcse.wordpress.com. Nhiệm vụ của chúng ta là biên dịch tập tin này. Các bạn theo dõi tiếp hình minh họa tiếp theo để thấy được cách biên dịch những tập tin có chứa package:

Bạn để ý dòng lệnh: javac   -d  .  Hello.java

Dòng lệnh này dùng để biên dịch những tập tin có chứa package. Bạn quan sát sau khi gõ lên trên và nhấn Enter thì tập tin Hello.class sẽ được tạo ra, tập tin này sẽ nằm trong thư mục duythanhcse\wordpress\com

Để chạy tập tin này các bạn xem hình minh hoạc tiếp theo:

Các bạn sẽ dùng lệnh: java     duythanhcse.wordpress.com.Hello

Như vậy bạn phải đính kèm package sau đó tới tên classs.

Các bạn thử làm theo các bước trên để kiểm chứng như thế nào

Chúc các bạn thành công.

Giải bài tập 14 chương 1 – Java 1

http://duythanhcse.wordpress.com/2011/12/21/bai-t%E1%BA%ADp-java-1-ch%C6%B0%C6%A1ng-1/

Topic này Tôi sẽ hướng dẫn cách giải bài tập 14

Trong Topic này có 3 điểm mới nên Tôi chỉ giải thích 3 điểm này, còn các hàm với những vòng lặp for để xuất ra hình ảnh như bài tập yêu cầu thì các bạn tự suy luận.

Dưới đây là code mẫu:

Chú ý là printWildcard1 đại diện cho hình 1. printWildcard2 đại diện cho hình 2…. số 10 Tôi truyền vào thì bạn có thể yêu cầu nhập vào từ bàn phím.

public class PrintWildcard {

 

       /**

        * @param args

        */

       public static void main(String[] args) {

              // TODO Auto-generated method stub

              printWildcard1(10);

              System.out.println();

              printWildcard2(10);

              System.out.println();

              printWildcard3(10);

              System.out.println();

              printWildcard4(10);

             

       }

/**

* Hàm này dùng để xuất *

* @param n : nhập vào từ bàn phím

*/

       public static void printWildcard1(int n)

       {

              for(int i=n;i>0;i–)

              {

                     for(int j=i;j>0;j–)

                     {

                           System.out.print(“*”);

                     }

                     System.out.println();

              }

       }

       public static void printWildcard2(int n)

       {

              for(int i=0;i<n;i++)

              {

                     for(int j=i;j>=0;j–)

                     {

                           System.out.print(“*”);

                     }

                     System.out.println();

              }

       }

       public static String padRight(String s,int n)

       {

              if(n<=0)

              return“”;

              return String.format(“%1$-“+n+“s”,s);

       }

       public static String padLeft(String s, int n) {

           if(n<=0)

              return“”;

              return String.format(“%1$#” + n + “s”, s); 

       }

 

       public static void printWildcard3(int n)

       {

              for(int i=1;i<=n;i++)

              {

                     System.out.print(padLeft(” “, n-i));

                     for(int j=i;j>0;j–)

                     {

                           System.out.print(“*”);

                     }

                     System.out.println();

              }

       }

       public static void printWildcard4(int n)

       {

              for(int i=1;i<=n;i++)

              {

                     System.out.print(padLeft(” “, i-1));

                     for(int j=i;j<=n;j++)

                     {

                           System.out.print(“*”);

                     }

                     System.out.println();

              }

       }

}

———————————————————————

Điểm mới 1:

Cách ghi chú thích (Comment)

Các bạn nhìn vào hàm

/**
* Hàm này dùng để xuất *
* @param n : nhập vào từ bàn phím
*/

public static void printWildcard1(int n)

{

for(int i=n;i>0;i–)

{

for(int j=i;j>0;j–)

{

System.out.print(“*”);

}

System.out.println();

}

}

Ngay dòng đầu tiên của comment bạn để ý là /** Nhớ là có 2 dấu * ngay đằng sau dấu / Các bạn bắt buộc phải ghi chú như thế này, lý do như sau: Khi bạn gọi hàm thì Eclipse sẽ tự động đọc các thông số trong này, giúp ích cho việc lập trình nhanh hơn, các bạn xem hình ảnh Tôi chụp lại:

Bạn quan sát và thấy đây, chỉ cần di chuyển chuột tới hàm mà mình đã comment theo đúng nguyên tắc thì bạn sẽ có được hình ảnh trên.

Điểm mới 2:

Hàm padRight : return String.format(“%1$-“+n+”s”,s);

Thêm vùng đệm dữ liệu bên phải (các bạn phải nhớ công thức cài đặt trong hàm format)

Điểm mới 3:

Hàm padLeft:        return String.format(“%1$#” + n + “s”, s);

Thêm vùng đệm dữ liệu bên trái (các bạn phải nhớ công thức cài đặt trong hàm format)