Bài 40: Component trong Java Swing - Lập trình Java cơ bản

Đăng bởi: Admin | Lượt xem: 7166 | Chuyên mục: Java


1. JLabel

Lớp JLabel có thể hiển thị hoặc text, hoặc hình ảnh hoặc cả hai. Các nội dung của Label được gán bởi thiết lập căn chỉnh ngang và dọc trong khu vực hiển thị của nó. Theo mặc định, các label được căn chỉnh theo chiều dọc trong khu vực hiển thị. Theo mặc định, text-only label là căn chỉnh theo cạnh, image-only label là căn chỉnh theo chiều ngang.  
Constructor của JLabel:
  1. JLabel(): Tạo một instance của JLabel, không có hình ảnh, và với một chuỗi trống cho title.
  2. JLabel(Icon image): Tạo một instance của JLabel với hình ảnh đã cho.
  3. JLabel(Icon image, int horizontalAlignment): Tạo một instance của JLabel với hình ảnh và căn chỉnh ngang đã cho.
  4. JLabel(String text): Tạo một instance của JLabel với text đã cho.
  5. JLabel(String text, Icon icon, int horizontalAlignment): Tạo một instance của JLabel với text, hình ảnh, và căn chỉnh ngang đã cho.
  6. JLabel(String text, int horizontalAlignment): Tạo một instance của JLabel với text và căn chỉnh ngang đã cho.  
Ví dụ:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
 
public class SwingControlDemo {
    
   private JFrame mainFrame;
   private JLabel headerLabel;
   private JLabel statusLabel;
   private JPanel controlPanel;

   public SwingControlDemo(){
      prepareGUI();
   }

   public static void main(String[] args){
      SwingControlDemo  swingControlDemo = new SwingControlDemo();      
      swingControlDemo.showLabelDemo();
   }

   private void prepareGUI(){
      mainFrame = new JFrame("Vi du Java Swing");
      mainFrame.setSize(400,400);
      mainFrame.setLayout(new GridLayout(3, 1));
      mainFrame.addWindowListener(new WindowAdapter() {
         public void windowClosing(WindowEvent windowEvent){
            System.exit(0);
         }        
      });    
      headerLabel = new JLabel("", JLabel.CENTER);        
      statusLabel = new JLabel("",JLabel.CENTER);    

      statusLabel.setSize(350,100);

      controlPanel = new JPanel();
      controlPanel.setLayout(new FlowLayout());

      mainFrame.add(headerLabel);
      mainFrame.add(controlPanel);
      mainFrame.add(statusLabel);
      mainFrame.setVisible(true);  
   }

   private void showLabelDemo(){
      headerLabel.setText("Control in action: JLabel");      

      JLabel label  = new JLabel("", JLabel.CENTER);        
      label.setText("Chao mung ban den voi bai huong dan Java Swing.");
      label.setOpaque(true);
      label.setBackground(Color.GRAY);
      label.setForeground(Color.WHITE);
      controlPanel.add(label);

      mainFrame.setVisible(true);  
   }
}

2. JCheckBox

Lớp JCheckBox là một trình triển khai của một checkbox, là một item mà có thể được lựa chọn (selected) hoặc không được lựa chọn (unselected), và hiển thị trạng thái của nó tới người dùng.  
Các Constructor của JCheckBox:
  1. JCheckBox(): Tạo một unselected checkbox ban đầu không có text và icon.
  2. JCheckBox(Action a): Tạo một checkbox, với các thuộc tính được lấy từ Action đã cho.  
  3. JCheckBox(Icon icon): Tạo một unselected checkbox với một icon. 
  4. JCheckBox(Icon icon, boolean selected): Tạo một checkbox với một icon và xác định rằng ban đầu nó là selected hoặc không . 
  5. JCheckBox(String text): Tạo một unselected checkbox ban đầu với text. 
  6. JCheckBox(String text, boolean selected): Tạo một checkbox với text và xác định rằng ban đầu nó là selected hoặc không. 
  7. JCheckBox(String text, Icon icon): Tạo một unselected checkbox ban đầu với text và icon đã cho. 
  8. JCheckBox(String text, Icon icon, boolean selected): Tạo một checkbox với text và icon, và xác định rằng ban đầu nó là selected hoặc không.  
Ví dụ:
import java.awt.EventQueue;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.GroupLayout;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
 
public class CheckBoxEx extends JFrame
        implements ItemListener {
 
    public CheckBoxEx() {
         
        initUI();
    }
 
    private void initUI() {
 
        JCheckBox cb = new JCheckBox("Show title", true);
        cb.addItemListener(this);
 
        Container pane = getContentPane();
        GroupLayout gl = new GroupLayout(pane);
        pane.setLayout(gl);
        gl.setAutoCreateContainerGaps(true);
 
        gl.setHorizontalGroup(gl.createParallelGroup()
                             .addComponent(cb));
 
        gl.setVerticalGroup(gl.createSequentialGroup()
                             .addComponent(cb));
         
        setSize(280, 200);
        setTitle("Component Example");
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
     
    @Override
    public void itemStateChanged(ItemEvent e) {
         
        int sel = e.getStateChange();
         
        if (sel==ItemEvent.SELECTED) {
             
            setTitle("Component Example");
        } else {
             
            setTitle("");
        }
    }           
 
    public static void main(String[] args) {
 
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                CheckBoxEx ex = new CheckBoxEx();
                ex.setVisible(true);
            }
        });
    }
}

3. JButton

Lớp JButton được sử dụng để tạo một nút button mà có trình triển khai là độc lập nền tảng. Thành phần này có một label và tạo một sự kiện (event) khi được nhấn. Nó cũng có thể có Image.  
Các Construtor của JButton:
  1. JButton(): Tạo một button mà không thiết lập text hoặc icon.
  2. JButton(Action a): Tạo một button tại đây các thuộc tính được nhận từ Action đã cung cấp.
  3. JButton(Icon icon): Tạo một button với một icon.  
  4. JButton(String text): Tạo một button với text.  
  5. JButton(String text, Icon icon): Tạo một button với text ban đầu và một icon.  
Ví dụ:
import java.awt.event.*;  
import javax.swing.*;  
  
public class ImageButton{  
ImageButton(){  
JFrame f=new JFrame();  
                  
          
JButton b=new JButton(new ImageIcon("b.jpg"));  
b.setBounds(130,100,100, 40);  
      
f.add(b);  
          
f.setSize(300,400);  
f.setLayout(null);  
f.setVisible(true);  
          
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
          
    }  
      
public static void main(String[] args) {  
    new ImageButton();  
}  
}

4. JTextField

Lớp JTextField là một thành phần cho phép sửa đổi một dòng text đơn.  
Các Constructor của JTextField:
  1. JTextField(): Xây dựng một TextField mới.
  2. JTextField(Document doc, String text, int columns): Xây dựng một JTextField mới mà sử dụng mô hình lưu trữ text đã cho và số cột đã cho.
  3. JTextField(int columns): Xây dựng một TextField mới và trống với số cột đã cho.
  4. JTextField(String text): Xây dựng một TextField mới được khởi tạo với text đã cho.
  5. JTextField(String text, int columns): Xây dựng một TextField mới được khởi tạo với text và các cột đã cho.
Ví dụ:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
 
public class SwingControlDemo {
    
   private JFrame mainFrame;
   private JLabel headerLabel;
   private JLabel statusLabel;
   private JPanel controlPanel;

   public SwingControlDemo(){
      prepareGUI();
   }

   public static void main(String[] args){
      SwingControlDemo  swingControlDemo = new SwingControlDemo();      
      swingControlDemo.showTextFieldDemo();
   }

   private void prepareGUI(){
      mainFrame = new JFrame("Vi du Java Swing");
      mainFrame.setSize(400,400);
      mainFrame.setLayout(new GridLayout(3, 1));
      mainFrame.addWindowListener(new WindowAdapter() {
         public void windowClosing(WindowEvent windowEvent){
            System.exit(0);
         }        
      });    
      headerLabel = new JLabel("", JLabel.CENTER);        
      statusLabel = new JLabel("",JLabel.CENTER);    

      statusLabel.setSize(350,100);

      controlPanel = new JPanel();
      controlPanel.setLayout(new FlowLayout());

      mainFrame.add(headerLabel);
      mainFrame.add(controlPanel);
      mainFrame.add(statusLabel);
      mainFrame.setVisible(true);  
   }

   private void showTextFieldDemo(){
      headerLabel.setText("Control in action: JTextField"); 

      JLabel  namelabel= new JLabel("User ID: ", JLabel.RIGHT);
      JLabel  passwordLabel = new JLabel("Password: ", JLabel.CENTER);
      final JTextField userText = new JTextField(6);
      final JPasswordField passwordText = new JPasswordField(6);      

      JButton loginButton = new JButton("Login");
      loginButton.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {     
            String data = "Username " + userText.getText();
            data += ", Password: " 
            + new String(passwordText.getPassword()); 
            statusLabel.setText(data);        
         }
      }); 

      controlPanel.add(namelabel);
      controlPanel.add(userText);
      controlPanel.add(passwordLabel);       
      controlPanel.add(passwordText);
      controlPanel.add(loginButton);
      mainFrame.setVisible(true);  
   }
}

5. JTextArea

Lớp JTextArea được sử dụng để tạo một khu vực dành cho text. Nó là một khu vực gồm nhiều dòng và chỉ hiển thị thuần text.
Các Constructor của JTextArea:
  1. JTextArea(): Tạo một TextArea mới.
  2. JTextArea(String s): Tạo một TextArea mới với text đã cho.
  3. JTextArea(int row, int column): Tạo một TextArea trống, mới với số hàng và cột đã cho.
  4. JTextArea(String s, int row, int column): Tạo một TextArea mới với text, số hàng và cột đã cho.
Ví dụ:
import java.awt.Color;  
import javax.swing.*;  
  
public class TArea {  
    JTextArea area;  
    JFrame f;  
    TArea(){  
    f=new JFrame();  
          
    area=new JTextArea(300,300);  
    area.setBounds(10,30,300,300);  
      
    area.setBackground(Color.black);  
    area.setForeground(Color.white);  
          
    f.add(area);  
      
    f.setSize(400,400);  
    f.setLayout(null);  
    f.setVisible(true);  
}  
    public static void main(String[] args) {  
        new TArea();  
    }  
}

6. JCombobox

Lớp JComboBox là một thành phần mà kết hợp một button, một trường có thể chỉnh sửa và một drop-down list. Tại một thời điểm chỉ có một item có thể được lựa chọn từ list.   
Các Constructor của JCombobox:
  1. JComboBox(): Tạo một JComboBox với data model mặc định.
  2. JComboBox(Object[] items): Tạo một JComboBox mà chứa các phần tử trong mảng đã cho.
  3. JComboBox(Vector<?> items): Tạo một JComboBox mà chứa các phần tử trong Vector đã cho.
Ví dụ:
import javax.swing.*;  
public class Combo {  
JFrame f;  
Combo(){  
    f=new JFrame("Combo ex");  
      
    String country[]={"India","Aus","U.S.A","England","Newzeland"};  
      
    JComboBox cb=new JComboBox(country);  
    cb.setBounds(50, 50,90,20);  
    f.add(cb);  
      
    f.setLayout(null);  
    f.setSize(400,500);  
    f.setVisible(true);  
      
}  
public static void main(String[] args) {  
    new Combo();  
      
}  
}

7. JRadioButton

Lớp JRadioButton là một trình triển khai của một radio button, một item mà có thể được lựa chọn hoặc không, và hiển thị trạng thái của nó tới người dùng. Lớp này nên được thêm vào trong ButtonGroup để chỉ lựa chọn một radio button.  
Các Constructor của JRadioButton:
  1. JRadioButton(): Tạo một unselected radiobutton không có text.  
  2. JRadioButton(String s): Tạo một unselected radiobutton với text đã cho. 
  3. JRadioButton(String s, boolean selected): Tạo một radiobutton với text đã cho và trạng thái là selected.   
Ví dụ:
import javax.swing.*;  
public class Radio {  
JFrame f;  
  
Radio(){  
f=new JFrame();  
  
JRadioButton r1=new JRadioButton("A) Male");  
JRadioButton r2=new JRadioButton("B) FeMale");  
r1.setBounds(50,100,70,30);  
r2.setBounds(50,150,70,30);  
  
ButtonGroup bg=new ButtonGroup();  
bg.add(r1);bg.add(r2);  
  
f.add(r1);f.add(r2);  
  
f.setSize(300,300);  
f.setLayout(null);  
f.setVisible(true);  
}  
public static void main(String[] args) {  
    new Radio();  
}  
}

8. JProgressBar

“Progress Bar” được dùng để biểu diễn tiến trình hoạt động của một công việc nào đó. Java Swing cung cấp lớp JProgressBar để tạo các progress bar.
Các Constructor của JProgressBar:
  1. JRadioButton(): Tạo một unselected radiobutton không có text.
  2. JRadioButton(String s): Tạo một unselected radiobutton với text đã cho.
  3. JRadioButton(String s, boolean selected): Tạo một radiobutton với text đã cho và trạng thái là selected.  
Ví dụ:
import javax.swing.*;  
public class MyProgress extends JFrame{  
JProgressBar jb;  
int i=0,num=0;  
  
MyProgress(){  
jb=new JProgressBar(0,2000);  
jb.setBounds(40,40,200,30);  
      
jb.setValue(0);  
jb.setStringPainted(true);  
      
add(jb);  
setSize(400,400);  
setLayout(null);  
}  
  
public void iterate(){  
while(i&lt;=2000){  
  jb.setValue(i);  
  i=i+20;  
  try{Thread.sleep(150);}catch(Exception e){}  
}  
}  
public static void main(String[] args) {  
    MyProgress m=new MyProgress();  
    m.setVisible(true);  
    m.iterate();  
}  
}

9. JList

Lớp JList là một thành phần mà hiển thị một danh sách các đối tượng và cho phép người dùng lựa chọn một hoặc nhiều item. Một Model riêng rẽ, ListModel, duy trì các nội dung của list. 
Các Constructor của JList:
  1. JList(): Xây dựng một JList với một model là empty, read-only.
  2.  JList(ListModel dataModel): Xây dựng một JList mà hiển thị các phần tử từ model đã cho và non-null.
  3. JList(Object[] listData): Xây dựng một JList mà hiển thị các phần tử trong mảng đã cho.
  4. JList(Vector<?> listData): Xây dựng một JList mà hiển thị các phần tử trong Vector đã cho.
Các trường quan trọng của JList:
  1. static int HORIZONTAL_WRAP: Trình bày một layout theo phong cách như một tờ báo ("newspaper style") với các ô tràn theo chiều ngang và sau đó là chiều dọc.
  2. static int VERTICAL: Chỉ một cách bố trí các ô theo chiều dọc, trong một cột đơn; đây là layout mặc định.
  3. static int VERTICAL_WRAP: Chỉ một layout theo phong cách như một tờ báo "newspaper style" với các ô tràn theo chiều dọc và sau đó là chiều ngang.
Ví dụ:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
 
public class SwingControlDemo {
    
   private JFrame mainFrame;
   private JLabel headerLabel;
   private JLabel statusLabel;
   private JPanel controlPanel;

   public SwingControlDemo(){
      prepareGUI();
   }

   public static void main(String[] args){
      SwingControlDemo  swingControlDemo = new SwingControlDemo();      
      swingControlDemo.showListDemo();
   }

   private void prepareGUI(){
      mainFrame = new JFrame("Vi du Java Swing");
      mainFrame.setSize(400,400);
      mainFrame.setLayout(new GridLayout(3, 1));
      mainFrame.addWindowListener(new WindowAdapter() {
         public void windowClosing(WindowEvent windowEvent){
            System.exit(0);
         }        
      });    
      headerLabel = new JLabel("", JLabel.CENTER);        
      statusLabel = new JLabel("",JLabel.CENTER);    

      statusLabel.setSize(350,100);

      controlPanel = new JPanel();
      controlPanel.setLayout(new FlowLayout());

      mainFrame.add(headerLabel);
      mainFrame.add(controlPanel);
      mainFrame.add(statusLabel);
      mainFrame.setVisible(true);  
   }

   private void showListDemo(){                                       

      headerLabel.setText("Control in action: JList"); 

      final DefaultListModel fruitsName = new DefaultListModel();

      fruitsName.addElement("Apple");
      fruitsName.addElement("Grapes");
      fruitsName.addElement("Mango");
      fruitsName.addElement("Peer");

      final JList fruitList = new JList(fruitsName);
      fruitList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
      fruitList.setSelectedIndex(0);
      fruitList.setVisibleRowCount(3);        

      JScrollPane fruitListScrollPane = new JScrollPane(fruitList);    

      final DefaultListModel vegName = new DefaultListModel();

      vegName.addElement("Lady Finger");
      vegName.addElement("Onion");
      vegName.addElement("Potato");
      vegName.addElement("Tomato");

      final JList vegList = new JList(vegName);
      vegList.setSelectionMode(
         ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
      vegList.setSelectedIndex(0);
      vegList.setVisibleRowCount(3);        

      JScrollPane vegListScrollPane = new JScrollPane(vegList);       

      JButton showButton = new JButton("Show");

      showButton.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) { 
            String data = "";
            if (fruitList.getSelectedIndex() != -1) {                     
               data = "Fruits Selected: " + fruitList.getSelectedValue(); 
               statusLabel.setText(data);
            }
            if(vegList.getSelectedIndex() != -1){
               data += " Vegetables selected: ";
               for(Object vegetable:vegList.getSelectedValues()){
                  data += vegetable + " ";
               }
            }
            statusLabel.setText(data);
         }
      }); 

      controlPanel.add(fruitListScrollPane);    
      controlPanel.add(vegListScrollPane);    
      controlPanel.add(showButton);    
	  
      mainFrame.setVisible(true);             
   }
}

10. JTable

Lớp JTable được sử dụng để hiển thị dữ liệu trên các ô của bảng hai chiều. Các constructor được sử dụng phổ biến của lớp JTable là:
  1. JTable(): Tạo một bảng với các ô trống.  
  2. JTable(Object[][] rows, Object[] columns): Tạo một bảng với dữ liệu đã cho.
Ví dụ:
import javax.swing.*;  
public class MyTable {  
    JFrame f;  
MyTable(){  
    f=new JFrame();  
      
    String data[][]={ {"101","Amit","670000"},  
              {"102","Jai","780000"},  
                          {"101","Sachin","700000"}};  
    String column[]={"ID","NAME","SALARY"};  
      
    JTable jt=new JTable(data,column);  
    jt.setBounds(30,40,200,300);  
      
    JScrollPane sp=new JScrollPane(jt);  
    f.add(sp);  
      
    f.setSize(300,400);  
//  f.setLayout(null);  
    f.setVisible(true);  
}  
public static void main(String[] args) {  
    new MyTable();  
}  
}
Trên đây, mình đã giới thiệu đến các bạn những JComponent cơ bản trong Java Swing. Cảm ơn các bạn đã đọc.
Bài tiếp theo: Layout trong Java Swing >>
vncoder logo

Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!