Category Archives: Java

Lập Trình Cơ Sở Dữ Liệu Java Swing Cơ Bản – Ôn Tập 6

I. Nhập Cơ Sở Dữ Liệu


--
-- Cơ sở dữ liệu: `mybook`
--

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

--
-- Cấu trúc bảng cho bảng `theloai`
--

CREATE TABLE `theloai` (
`MATL` varchar(10) NOT NULL,
`TENTL` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

II. Tạo lớp DBConnection

package laptrinhcsdl;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;

public class DBConnection {

//Đối tượng connect
private Connection conn;
//Đối tượng statement
public Statement stm;

public DBConnection() throws ClassNotFoundException {
try {
//Tải driver
Class.forName("com.mysql.jdbc.Driver");
//Lấy kết nối
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/mybook?useUnicode=true&characterEncoding=UTF-8","root","");
stm=conn.createStatement();

} catch (SQLException ex) {
Logger.getLogger(DBConnection.class.getName()).log(Level.SEVERE, null, ex);
}
}
}

III. Giao diện và sự kiện

Code tham khảo: (có sửa đổi)


package laptrinhcsdl;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.BoxLayout;
import javax.swing.*;
import static javax.swing.JFrame.EXIT_ON_CLOSE;
import javax.swing.table.DefaultTableModel;

/**
*
* @author USER
*/
public class JFrameTheLoai extends JFrame implements ActionListener {

//Khai bao component
JLabel jlbMATL, jlbTENTL;

JTextField jtxtMATL, jtxtTENTL;

DefaultTableModel model;
JTable jtbTheLoai;

JButton jbtnThem, jbtnXoa, jbtnSua;

JPanel jpnTop, jpnCenter, jpnBottom, jpn1, jpn2;

DBConnection db;

public JFrameTheLoai() throws ClassNotFoundException {
super("LTCSDL");//dat ten
setSize(400, 500);
setLocationRelativeTo(null);//canh giua
setDefaultCloseOperation(EXIT_ON_CLOSE);//tac han chuong trinh
setLayout(new BorderLayout());

db = new DBConnection();

//Khoi tao component
jpnTop = new JPanel(new GridLayout(2, 1));
jpn1 = new JPanel();
jpn2 = new JPanel();
jpnCenter = new JPanel();
jpnBottom = new JPanel();

jlbMATL = new JLabel("MATL");
jlbTENTL = new JLabel("TENTL");

jtxtMATL = new JTextField(20);
jtxtTENTL = new JTextField(20);

jbtnThem = new JButton("Them");
jbtnSua = new JButton("Sua");
jbtnXoa = new JButton("Xoa");

model = new DefaultTableModel();
String[] columnsName = {"MATL", "TENTL"};
model.setColumnIdentifiers(columnsName);

LoadData();
jtbTheLoai = new JTable();
jtbTheLoai.setModel(model);

//Them conponent
jpn1.add(jlbMATL);
jpn1.add(jtxtMATL);

jpn2.add(jlbTENTL);
jpn2.add(jtxtTENTL);

jpnTop.add(jpn1);
jpnTop.add(jpn2);

add(jpnTop, BorderLayout.NORTH);
add(new JScrollPane(jtbTheLoai), BorderLayout.CENTER);
jpnBottom.add(jbtnThem);
jpnBottom.add(jbtnSua);
jpnBottom.add(jbtnXoa);

add(jpnBottom, BorderLayout.SOUTH);

//Thiet lap su kien
jbtnThem.addActionListener(this);
jbtnXoa.addActionListener(this);
jbtnSua.addActionListener(this);

jtbTheLoai.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent me) {
jtxtMATL.setText(jtbTheLoai.getValueAt(jtbTheLoai.getSelectedRow(), 0).toString());
jtxtTENTL.setText(jtbTheLoai.getValueAt(jtbTheLoai.getSelectedRow(), 1).toString());
}

});

//Hien thi
setVisible(true);

}

private void LoadData() {
model.setNumRows(0);
try {
String sql = "SELECT * FROM theloai";
ResultSet rs = db.stm.executeQuery(sql);

while (rs.next()) {
String[] row = new String[2];
row[0] = rs.getString("MATL");
row[1] = rs.getString("TENTL");
model.addRow(row);
}

} catch (SQLException ex) {
Logger.getLogger(JFrameTheLoai.class.getName()).log(Level.SEVERE, null, ex);
}
}

public static void main(String[] args) throws ClassNotFoundException {
new JFrameTheLoai();
}

@Override
public void actionPerformed(ActionEvent ae) {
if (ae.getSource() == jbtnThem) {
try {
String sql = "INSERT INTO `theloai` (`MATL`, `TENTL`) VALUES ('" + jtxtMATL.getText() + "', '" + jtxtTENTL.getText() + "')";
db.stm.executeUpdate(sql);
LoadData();
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, ex, "Error", JOptionPane.ERROR_MESSAGE);
}
} else if (ae.getSource() == jbtnXoa) {
try {
String sql = "DELETE FROM `theloai` WHERE MATL='" + jtxtMATL.getText() + "'";
db.stm.executeUpdate(sql);
LoadData();
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, ex, "Error", JOptionPane.ERROR_MESSAGE);
}

} else if (ae.getSource() == jbtnSua) {
try {
String matl= model.getValueAt(jtbTheLoai.getSelectedRow(),0).toString();
String sql="UPDATE `theloai` SET `MATL`='"+jtxtMATL.getText()+"',`TENTL`='"+jtxtTENTL.getText()+"' WHERE MATL='"+matl+"'";
db.stm.executeUpdate(sql);
LoadData();
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, ex, "Error", JOptionPane.ERROR_MESSAGE);
}

}
}

}

Advertisements

Tạo menu trong Java-Swing – Ôn Tập 5

I. Giao diện

II. Viết code


package Menu;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class FrameMenu extends JFrame implements ActionListener{
JMenuBar jmnubar;
JMenu jmnuFile;
JMenuItem jmnuiNew,jmnuiOpen,jmnuiExit;

public FrameMenu() {
setLayout(new BorderLayout());
setSize(300,400);
setDefaultCloseOperation(EXIT_ON_CLOSE);

jmnubar=new JMenuBar();

jmnuFile=new JMenu("File");

jmnuiNew=new JMenuItem("New");
jmnuiNew.setAccelerator(KeyStroke.getKeyStroke("ctrl N"));
jmnuiOpen=new JMenuItem("Open");
jmnuiOpen.setAccelerator(KeyStroke.getKeyStroke("ctrl O"));

jmnuiExit=new JMenuItem("Exit");
jmnuiExit.setAccelerator(KeyStroke.getKeyStroke("ctrl E"));



jmnuFile.add(jmnuiNew);
jmnuFile.add(jmnuiOpen);
jmnuFile.addSeparator();
jmnuFile.add(jmnuiExit);

jmnuFile.setMnemonic('F');


jmnubar.add(jmnuFile);


add(jmnubar,BorderLayout.NORTH);

jmnuiOpen.addActionListener(this);
jmnuiNew.addActionListener(this);
jmnuiExit.addActionListener(this);


setVisible(true);
}
public static void main(String[] args) {
new FrameMenu();
}

@Override
public void actionPerformed(ActionEvent ae) {
if(ae.getSource()==jmnuiOpen)
{
JOptionPane.showMessageDialog(null,"Open");
}
else if(ae.getSource()==jmnuiNew)
{
JOptionPane.showMessageDialog(null,"New");
}
else if(ae.getSource()==jmnuiExit)
{
JOptionPane.showMessageDialog(null,"Exit");
}
}
}

JRadioButton, ButtonGroup và sự kiện isSelected – Ôn Tập 4

I. Phân tích giao diện

Nhìn vào giao diện trên chúng ta thấy nó chia thành 4 dòng và chỉ có duy nhất 1 cột do đó sử dụng Gridlayout.

II. Viết code


 

package ChooseColor;

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;

public class ChooseColor extends JFrame implements ActionListener{

JRadioButton jrdoRed,jrdoBlue,jrdoGreen,jrdoBlack;
ButtonGroup btnGroup;
JPanel jpnBottom;
JLabel jlbText;

public ChooseColor() {
super("Choose Color");
setLayout(new GridLayout(5,1));
setLocationRelativeTo(null);
setSize(200,250);
setDefaultCloseOperation(EXIT_ON_CLOSE);


btnGroup=new ButtonGroup();

jrdoRed=new JRadioButton("Red");
jrdoBlue=new JRadioButton("Blue");
jrdoGreen=new JRadioButton("Green");
jrdoBlack=new JRadioButton("Black");

jpnBottom=new JPanel();
jpnBottom.setBackground(Color.RED);

jlbText=new JLabel("Red is Selected");
jlbText.setForeground(Color.WHITE);

jpnBottom.add(jlbText);

//Thêm các JRadioButton vào ButtonGroup để chỉ duy nhất 1 JRadioButton được chọn
btnGroup.add(jrdoRed);
btnGroup.add(jrdoBlue);
btnGroup.add(jrdoGreen);
btnGroup.add(jrdoBlack);

add(jrdoRed);
add(jrdoBlue);
add(jrdoGreen);
add(jrdoBlack);

jrdoRed.setSelected(true);

add(jpnBottom);

jrdoRed.addActionListener(this);
jrdoBlue.addActionListener(this);
jrdoGreen.addActionListener(this);
jrdoBlack.addActionListener(this);



setVisible(true);
}
public static void main(String[] args) {
new ChooseColor();
}

@Override
public void actionPerformed(ActionEvent ae) {
if(jrdoRed.isSelected())
{
jpnBottom.setBackground(Color.RED);
jlbText.setText("Red is Selected");
}
else if(jrdoGreen.isSelected())
{
jpnBottom.setBackground(Color.GREEN);
jlbText.setText("Green is Selected");
}
else if(jrdoBlue.isSelected())
{
jpnBottom.setBackground(Color.BLUE);
jlbText.setText("Blue is Selected");
}
else
{
jpnBottom.setBackground(Color.BLACK);
jlbText.setText("Black is Selected");
}
}
}

 

Calculator đơn giản – Ôn Tập 3

I. Phân tích Layout

Nhìn vào hình trên thì chúng ta sẽ phân tích Layout như sau:

II. Viết code

Code tham khảo:



package EasyCalculator;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class Calculator extends JFrame implements ActionListener {

          JPanel jpnX, jpnY, jpnButton, jpnResult;

          JLabel jlbX, jlbY, jlbResult;
          JTextField jtxtX, jtxtY;

           JButton jbtnPlus, jbtnSub, jbtnMul, jbtnDiv;

          public Calculator() {
               super("Calculator");
               setLayout(new GridLayout(4, 1));
               setSize(400, 160);
               setLocationRelativeTo(null);
               setDefaultCloseOperation(EXIT_ON_CLOSE);

               jlbX = new JLabel(" X= ");
               jlbY = new JLabel(" Y= ");
               jlbResult = new JLabel("Result");
               jlbResult.setForeground(Color.RED);

               jtxtX = new JTextField();
               jtxtY = new JTextField();

               jbtnPlus = new JButton("+");
               jbtnSub = new JButton("-");
               jbtnMul = new JButton("*");
               jbtnDiv = new JButton("/");

               jpnX = new JPanel(new BorderLayout());
               jpnY = new JPanel(new BorderLayout());
               jpnButton = new JPanel(new GridLayout(1, 4));
               jpnResult = new JPanel(new FlowLayout());

               jpnX.add(jlbX, BorderLayout.WEST);
               jpnX.add(jtxtX, BorderLayout.CENTER);

               jpnY.add(jlbY, BorderLayout.WEST);
               jpnY.add(jtxtY, BorderLayout.CENTER);

               jpnButton.add(jbtnPlus);
               jpnButton.add(jbtnSub);
               jpnButton.add(jbtnMul);
               jpnButton.add(jbtnDiv);

               jpnResult.add(jlbResult);

               add(jpnX);
               add(jpnY);
               add(jpnButton);

               add(jpnResult);

               jbtnPlus.addActionListener(this);
               jbtnSub.addActionListener(this);
               jbtnMul.addActionListener(this);
               jbtnDiv.addActionListener(this);

               setVisible(true);
}

public static void main(String[] args) {
       new Calculator();
}

@Override
public void actionPerformed(ActionEvent ae) {
      Double rs = 0.0;
try {
      if (ae.getSource() == jbtnPlus) {
      rs = Double.parseDouble(jtxtX.getText()) + Double.parseDouble(jtxtY.getText());
      jlbResult.setText("x+y="+rs.toString());
} else if (ae.getSource() == jbtnSub) {
      rs = Double.parseDouble(jtxtX.getText()) - Double.parseDouble(jtxtY.getText());
      jlbResult.setText("x-y="+rs.toString());
} else if (ae.getSource() == jbtnMul) {
      rs = Double.parseDouble(jtxtX.getText()) * Double.parseDouble(jtxtY.getText());
      jlbResult.setText("x*y="+rs.toString());
} else if (ae.getSource() == jbtnDiv) {
      rs = Double.parseDouble(jtxtX.getText()) / Double.parseDouble(jtxtY.getText());
      jlbResult.setText("x/y="+rs.toString());
}
} catch (NumberFormatException ex) {
       jlbResult.setText("");
       JOptionPane.showMessageDialog(null, ex, "Error", JOptionPane.ERROR_MESSAGE);
}
   }

}

Java-Swing Các Loại Layout – Ôn Tập 2

I.FlowLayout

FloawLayout là layout mà nó sẽ tự động sắp xếp các control trong form theo thứ tự được thêm vào, nếu có một control trên vào thì các control đó sẽ được sắp xếp trôi ra giữa layout. FlowLayout là layout mặc định nếu không được thiết lập thuộc tính setLayout.

Code tham khảo :


package Layout;

import javax.swing.*;

public class MyFlowLayout extends JFrame{

         //Khai báo component
         JButton jbtn1,jbtn2,jbtn3;
         JPanel jpnTop;

          public MyFlowLayout() {
                  super("FlowLayout");
                  setSize(300,400);
                 //Canh form giữa màn hình
                 setLocationRelativeTo(null);
                 //Thiết lập tắt hẳn chương trình khi ấn vào nút X
                 setDefaultCloseOperation(EXIT_ON_CLOSE);

                 //Khởi tạo component
                 jbtn1=new JButton("Button 1");
                 jbtn2=new JButton("Button 2");
                 jbtn3=new JButton("Button 3");

                 jpnTop=new JPanel();

                 //Thêm component

                 jpnTop.add(jbtn1);
                 jpnTop.add(jbtn2);
                 jpnTop.add(jbtn3);

                 add(jpnTop);

                 //thiết lập hiển thị
                 setVisible(true);
}

public static void main(String[] args) {
              new MyFlowLayout();
   }
}

II.BorderLayout

BorderLayout là loại layout chia ra làm 5 phần, phần phía bắc (North), phần chính giữa (Center), phần phía nam (South), phần phía tây (West), và phần phía đông (East).

Code tham khảo :


package Layout;

import java.awt.BorderLayout;
import javax.swing.*;


public class MyBorderLayout extends JFrame{

        //Khai báo component
        JButton jbtnNorth,jbtnCenter,jbtnSouth,jbtnWest,jbtnEast;

        public MyBorderLayout() {
               super("BorderLayout");
               //Thiết lập layout
               setLayout(new BorderLayout());
               setSize(400,400);
               //Canh form giữa màn hình
               setLocationRelativeTo(null);
               //Thiết lập tắt hẳn chương trình khi ấn vào nút X
               setDefaultCloseOperation(EXIT_ON_CLOSE);

               //Khởi tạo component
               jbtnNorth=new JButton("North");
               jbtnCenter=new JButton("Center");
               jbtnSouth=new JButton("South");
               jbtnWest=new JButton("West");
               jbtnEast=new JButton("East");
               
               //Thêm component
               add(jbtnNorth,BorderLayout.NORTH);
               add(jbtnCenter,BorderLayout.CENTER);
               add(jbtnSouth,BorderLayout.SOUTH);
               add(jbtnWest,BorderLayout.WEST);
               add(jbtnEast,BorderLayout.EAST);

               //thiết lập hiển thị
              setVisible(true);
}

public static void main(String[] args) {
        new MyBorderLayout();
   }

}

III.GridLayout

GridLayout là loại layout mà chia thành các dòng và các cột hình bên dưới chia gridlayout thành 3 dòng và 3 cột.

Code tham khảo:


package Layout;

import java.awt.GridLayout;
import javax.swing.*;


public class MyGridLayout extends JFrame{

     //Khai báo component
     JButton jbtn1,jbtn2,jbtn3,jbtn4,jbtn5,jbtn6,jbtn7,jbtn8,jbtn9;

     public MyGridLayout() {
            super("GridLayout");
            //Thiết lập layout
            //Gridlayout với 3 dòng 3 cột
            setLayout(new GridLayout(3,3));
            setSize(300,400);
            //Canh form giữa màn hình
            setLocationRelativeTo(null);
            //Thiết lập tắt hẳn chương trình khi ấn vào nút X
            setDefaultCloseOperation(EXIT_ON_CLOSE);

            //Khởi tạo component
            jbtn1=new JButton("1");
            jbtn2=new JButton("2");
            jbtn3=new JButton("3");
            jbtn4=new JButton("4");
            jbtn5=new JButton("5");
            jbtn6=new JButton("6");
            jbtn7=new JButton("7");
            jbtn8=new JButton("8");
            jbtn9=new JButton("9");

            //Thêm component
            add(jbtn1);
            add(jbtn2);
            add(jbtn3);
            add(jbtn4);
            add(jbtn5);
            add(jbtn6);
            add(jbtn7);
            add(jbtn8);
            add(jbtn9);


            //thiết lập hiển thị
           setVisible(true);
}

public static void main(String[] args) {
         new MyGridLayout();
    }
}

IV. Xây dựng giao diện

Nhìn vào giao diện trên chúng ta có được phân tích như sau:

Code tham khảo:


package MicrowaveOven;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import javax.swing.*;


public class MicrowaveOven extends JFrame {

        //Khai báo JPanel
        JPanel jpnRight,jpnButton;

        //Khai báo Component
        JTextField jtxtTime;
        JButton jbtnFood, jbtn1, jbtn2, jbtn3, jbtn4, jbtn5, jbtn6, jbtn7, jbtn8, jbtn9, jbtn0, jbtnStart, jbtnStop;
        public MicrowaveOven() {
        //Thiết lập một số thông tin cho Frame
        super("The Front View Of A MicroWave Oven");
        setLayout(new BorderLayout());
        //Thiết lập canh giữa màn hình
        setLocationRelativeTo(null);
        setSize(370, 300);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        //Khởi tạo Component
        /*Khởi tạo JPanel*/
        jpnRight=new JPanel(new BorderLayout());
        jpnButton=new JPanel(new GridLayout(4,3));

        /*Khởi tạo JTextField*/
        jtxtTime=new JTextField("Time to be displayed here");
        /*Khởi tạo JButton*/
        jbtnFood = new JButton("Food to be placed here");
        jbtn1 = new JButton("1");
        jbtn2 = new JButton("2");
        jbtn3 = new JButton("3");
        jbtn4 = new JButton("4");
        jbtn5 = new JButton("5");
        jbtn6 = new JButton("6");
        jbtn7 = new JButton("7");
        jbtn8 = new JButton("8");
        jbtn9 = new JButton("9");
        jbtn0 = new JButton("0");
        jbtnStart = new JButton("Start");
        jbtnStop = new JButton("Stop");


        /*Thêm Conponent vào Frame*/
        jpnRight.add(jtxtTime,BorderLayout.NORTH);


        jpnButton.add(jbtn1);
        jpnButton.add(jbtn2);
        jpnButton.add(jbtn3);
        jpnButton.add(jbtn4);
        jpnButton.add(jbtn5);
        jpnButton.add(jbtn6);
        jpnButton.add(jbtn7);
        jpnButton.add(jbtn8);
        jpnButton.add(jbtn9);
        jpnButton.add(jbtn0);
        jpnButton.add(jbtnStart);
        jpnButton.add(jbtnStop);

        add(jbtnFood, BorderLayout.WEST);
        add(jpnRight, BorderLayout.CENTER);
        jpnRight.add(jtxtTime, BorderLayout.NORTH);
        jpnRight.add(jpnButton, BorderLayout.CENTER);

         setVisible(true);
}

public static void main(String[] args) {
        new MicrowaveOven();
    }
}

Nhập Xuất Và Lấy Ngày Tháng Trong Java – Ôn Tập 1

I.Nhập dữ liệu bằng BufferedReader và Scanner


package Begin;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

/**
*
* @author PC
*/
public class IO {
public static void main(String[] args) {
String myValue;
    try {
          System.out.println("---Nhập dữ liệu từ bàn phím sử dụng BufferedReader---");
          BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
          System.out.print("Hãy nhập 1 giá trị :");
          //Giá trị nhập vào là chuỗi để ép về kiểu số thì chúng ta có thể sử dụng ép kiểu
          // int newValue=Integer.parseInt(br.readLine()); ..v..v
          myValue=br.readLine();
          System.out.println("Giá trị vừa nhập là :"+myValue);

          /*-----------------------------------------------------------------*/

          System.out.println("---Nhập dữ liệu từ bàn phím sử dụng Scanner---");
          Scanner sc=new Scanner(System.in);
          System.out.print("Hãy nhập 1 giá trị :");
          //Để xác định kiểu dữ liệu nhập vào thì chúng ta có thể sử dụng
          // myValue=sc.nextInt();
          // myValue=sc.nextDouble();
          // myValue=sc.nextFloat();
          // ..v..v
          myValue=sc.nextLine();
          System.out.print("Giá trị vừa nhập là :"+myValue);

         } catch (IOException ex) {
         JOptionPane.showMessageDialog(null,ex,"Error",JOptionPane.ERROR_MESSAGE);
      }
   }
}

II.Nhập dữ liệu bằng JOptionPane


String myValue=JOptionPane.showInputDialog("Input");
System.out.print("Giá trị vừa nhập là :"+myValue);

Kết quả là một hộp thoại có trường để chúng ta nhập dữ liệu vào

II.Lấy ngày tháng trong Java sử dụng đối tượng GregorianCalendar


package Begin;

import java.util.GregorianCalendar;

public class Datetime {
public static void main(String[] args) {
      //Để lấy được ngày tháng hiện tại chúng ta tạo mới đối tượng GregorianCalendar
      GregorianCalendar calendar=new GregorianCalendar();
      System.out.println(calendar.getTime());
      //Để thiết lập giá trị ngày tháng cho một biến
      //GregorianCalendar mydate=new GregorianCalendar(year,month,day);
      GregorianCalendar mydate=new GregorianCalendar(2003,05,26);
      System.out.println(mydate.getTime());

    }
}