Java awt là gì

Java awt là gì
Sự khác biệt giữa AWT và Swing - Công Nghệ

Sự khác biệt chính - AWT vs Lung lay  

Java là một ngôn ngữ lập trình cấp cao được phát triển bởi Sun Microsystems. Java hỗ trợ Lập trình hướng đối tượng giúp thiết kế và phát triển một phần mềm sử dụng các đối tượng. Khi chương trình Java được biên dịch, nó được chuyển đổi thành một mã bytecode. Bytecode đó được Máy ảo Java (JVM) phiên dịch trên mọi nền tảng, do đó, nó là ngôn ngữ lập trình mà các lập trình viên có thể viết một lần và chạy trên mọi nền tảng. Java có thể được sử dụng để phát triển nhiều loại ứng dụng như ứng dụng máy tính để bàn, di động và web. Ngôn ngữ này cung cấp các bộ công cụ để tạo Giao diện Người dùng Đồ họa (GUI) phong phú. Hai trong số đó là AWT và Swing. Bài viết này thảo luận về sự khác biệt giữa AWT và Swing. Các sự khác biệt chính giữa AWT và Swing là AWT là bộ công cụ tiện ích mở rộng cửa sổ, đồ họa và giao diện người dùng phụ thuộc vào nền tảng gốc của Java trong khi Swing là bộ công cụ tiện ích GUI cho Java là một tiện ích mở rộng cho AWT.


1. Tổng quan và sự khác biệt chính 2. AWT là gì 3. Swing là gì 4. Điểm giống nhau giữa AWT và Swing 5. So sánh song song - AWT và Swing ở dạng bảng

6. Tóm tắt

AWT là gì?

Giao diện người dùng đồ họa là một giao diện để người dùng cung cấp hướng dẫn cho phần mềm thực hiện các tác vụ. Nó bao gồm các thành phần đồ họa khác nhau. Một số thành phần GUI là cửa sổ, nút, hộp tổ hợp, vùng văn bản, hộp danh sách và nhãn. Sử dụng các thành phần này, lập trình viên có thể phát triển giao diện người dùng tương tác cho ứng dụng. GUI dựa trên các sự kiện. Nhấp vào nút, đóng cửa sổ, nhập nội dung gì đó vào hộp văn bản là một số ví dụ về các sự kiện có thể xảy ra trong ứng dụng dựa trên Giao diện Người dùng Đồ họa. Ngày nay nhiều ứng dụng chứa GUI. Các ứng dụng di động, Hệ thống đặt vé máy bay, Máy giao dịch viên tự động có giao diện đồ họa phong phú để khách hàng sử dụng ứng dụng dễ dàng.

AWT là viết tắt của Bộ công cụ cửa sổ trừu tượng. AWT yêu cầu một đối tượng OS gốc để triển khai các chức năng. Do đó, các thành phần AWT có trọng lượng nặng và yêu cầu nhiều không gian bộ nhớ hơn. Các thành phần AWT cũng cần thời gian để thực thi. Số lượng thành phần có sẵn trong AWT là tối thiểu. Cần nhập gói javax.awt để phát triển ứng dụng GUI dựa trên AWT.


Java awt là gì

Một số thành phần AWT là nút, trường văn bản, hộp thả xuống, thanh cuộn, cửa sổ, khung, bảng điều khiển, nhãn. Sau khi tạo các đối tượng, chúng có thể được đặt vào một thùng chứa. Một thùng chứa cung cấp không gian cho các thành phần để tải. AWT không hỗ trợ giao diện có thể cắm được. Do đó, một ứng dụng AWT được phát triển trong một hệ điều hành có thể không giống với một hệ điều hành khác.

Swing là gì?

Swing là một bộ công cụ tiện ích GUI cho Java. Nó là một phần của Oracle’s Java Foundation Classes (JFC). Nó là một giao diện lập trình ứng dụng để xây dựng GUI cho các ứng dụng Java. Nó được xây dựng trên AWT API. Swing được phát triển để cung cấp các thành phần linh hoạt và phức tạp hơn AWT. Swing chứa các thành phần cơ bản như nhãn, hộp văn bản, nút. Nó cũng chứa các thành phần cao cấp hơn. Một số trong số đó là cây, bảng, danh sách, ngăn cuộn và ngăn theo thẻ. Nếu người lập trình cần triển khai ứng dụng Swing, thì cần phải nhập gói javax.swing. Gói này cung cấp các lớp cho Java Swing API như JButton, JRadioButton, JTextField, JCheckbox, v.v.


Các thành phần Swing không có mã dành riêng cho nền tảng. Do đó, Swing độc lập với nền tảng. Không giống như AWT, Swing không yêu cầu các lệnh gọi OS gốc để xây dựng các thành phần. JVM chịu trách nhiệm gọi các phương thức gốc. Các thành phần Swing có trọng lượng nhẹ. Dung lượng bộ nhớ cần thiết cũng là tối thiểu. Đây là một yếu tố đáng kể để chạy các ứng dụng dựa trên Swing nhanh hơn. Trong phát triển ứng dụng, Model, View, Controller (MVC) là một mẫu thiết kế phổ biến. Mô hình đại diện cho dữ liệu. Dạng xem đại diện cho bản trình bày trong khi Bộ điều khiển là giao diện giữa Mẫu và Dạng xem. Swing theo mô hình này. Swing hỗ trợ giao diện có thể cắm được. Nhìn chung, nó mạnh hơn AWT.

Sự tương đồng giữa AWT và Swing là gì?

  • Cả hai đều là bộ công cụ dựa trên Java để xây dựng Giao diện Người dùng Đồ họa.

Sự khác biệt giữa AWT và Swing là gì?

AWT là bộ công cụ tiện ích cửa sổ, đồ họa và giao diện người dùng phụ thuộc vào nền tảng gốc của Java trước Swing.Swing là một bộ công cụ tiện ích GUI dành cho Java, là một phần của Oracle’s Java Foundation Class (JFC).
Sự phụ thuộc vào nền tảng
Các thành phần AWT phụ thuộc vào nền tảng.Các thành phần xích đu độc lập với nền tảng.
Số lượng thành phần
AWT chứa ít thành phần hơn.Swing có số lượng thành phần cao hơn.
Các thành phần
Các thành phần AWT rất nặng.Các thành phần đu có trọng lượng nhẹ.
MVC
AWT không tuân theo MVC.Swing theo MVC.
Tốc độ
AWT không nhanh bằng Swing.Swing nhanh hơn AWT.
Dung lượng bộ nhớ cần thiết
Các thành phần AWT yêu cầu nhiều không gian bộ nhớ hơn.Các thành phần xoay yêu cầu ít dung lượng bộ nhớ hơn.
Gói bắt buộc
AWT yêu cầu nhập gói javax.awt.Swing yêu cầu nhập gói javax.swing.
Giao diện dễ chịu
AWT không hỗ trợ giao diện có thể cắm được.Swing cung cấp một cái nhìn và cảm nhận có thể cắm được.

Tóm lược -AWT vs Lung lay

Bài viết này đã thảo luận về hai công cụ Thiết kế Giao diện Người dùng Đồ họa là AWT và Swing. Sự khác biệt giữa AWT và Swing là AWT là bộ công cụ tiện ích cửa sổ, đồ họa và giao diện người dùng phụ thuộc vào nền tảng gốc của Java trong khi Swing là bộ công cụ tiện ích GUI cho Java, là một phần mở rộng cho AWT. Swing cung cấp các chức năng phong phú hơn so với AWT. Giao diện của GUI được xây dựng bằng Swing trông đẹp hơn GUI với AWT. Không giống như AWT, Swing hỗ trợ giao diện có thể cắm được và tăng khả năng sử dụng của ứng dụng.

Tải xuống phiên bản PDF của AWT vs Swing

Bạn có thể tải xuống phiên bản PDF của bài viết này và sử dụng nó cho các mục đích ngoại tuyến theo ghi chú trích dẫn. Vui lòng tải xuống phiên bản PDF tại đây: Sự khác biệt giữa AWT và Swing

Chào các bạn, cách đây vài năm game Flappy Bird đã đột nhiên trở thành một hiện tượng thú vị.

Sự thành công từ chính cách chơi đơn giản đến bất ngờ của nó cũng đã làm nhiều người ngạc nhiên.

Trong trí nhớ của mình thì người người, nhà nhà thi đua và đọ điểm với nhau

Java awt là gì

Ngày xưa khi còn đi học Aptech, mình đã được học qua về Java awt, còn khi đi làm thì chẳng động đến bao giờ

Java awt là gì

Hôm nay mình sẽ sử dụng java awt để làm 1 game đơn giản, tương tự => JumpyBox

Note: game hơi cùi và vẫn còn giật giật, tuy nhiên có thể chơi được.

Warning: chơi xong thì hơi chóng mặt chút =))

Sơ lược Java AWT là gì?

AWT (Abstract Window Toolkit) API và được viết hoàn toàn bằng Java cung cấp một tập hợp các lớp dùng để viết giao diện đồ họa người dùng. Ngoài ra AWT còn cung cấp các container và component để cho việc xây dựng các chương trình ứng dụng đơn giản hơn và quản lý bố cục theo các sơ đồ tổ chức khác nhau. AWT Chiếm nhiều tài nguyên của hệ thống và khó mở rộng nên theo mình biết là rất ít được sử dụng.

Jumpy Box

Java awt là gì

Các bạn hãy tạo 2 class JumpyBox và UIRenderer như code bên dưới. Run main() trong JumpyBox để bắt đầu chơi game.(Mình cao nhất được ~30 điểm)

Về cơ bản thì chúng ta phải tính toán và vẽ lại các thành phần cần thiết sau 1 thời gian nhất định. Mỗi khi vẽ lại sẽ có logic để check xem game đã kết thúc hay chưa?

package jumpyBox; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.ArrayList; import java.util.Random; import javax.swing.JFrame; import javax.swing.Timer; public class JumpyBox implements ActionListener, MouseListener, KeyListener { public static JumpyBox jumpyBox; public final int FRAME_WIDTH = 800, FRAME_HEIGHT = 800; public UIRenderer renderer; public Rectangle box; public ArrayList<Rectangle> columns; public int ticks, yMotion, score; public boolean gameOver, started; public Random random; public JumpyBox() { JFrame jframe = new JFrame(); //Set a timer for fire actionPerformed(ActionEvent e) after interval //actionPerformed method will repaint UI, and check gameOver or not Timer timer = new Timer(18, this); renderer = new UIRenderer(); random = new Random(); jframe.add(renderer); jframe.setTitle("Jumpy Box"); jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jframe.setSize(FRAME_WIDTH, FRAME_HEIGHT); jframe.addMouseListener(this); jframe.addKeyListener(this); jframe.setResizable(false); jframe.setVisible(true); box = new Rectangle(FRAME_WIDTH / 2 - 10, FRAME_HEIGHT / 2 - 10, 20, 20); columns = new ArrayList<Rectangle>(); addColumn(true); addColumn(true); addColumn(true); addColumn(true); timer.start(); } public void addColumn(boolean start) { int space = 300; int width = 100; int height = 50 + random.nextInt(300); if (start) { columns.add(new Rectangle(FRAME_WIDTH + width + columns.size() * 300, FRAME_HEIGHT - height - 120, width, height)); columns.add(new Rectangle(FRAME_WIDTH + width + (columns.size() - 1) * 300, 0, width, FRAME_HEIGHT - height - space)); } else { columns.add(new Rectangle(columns.get(columns.size() - 1).x + 600, FRAME_HEIGHT - height - 120, width, height)); columns.add(new Rectangle(columns.get(columns.size() - 1).x, 0, width, FRAME_HEIGHT - height - space)); } } public void paintColumn(Graphics g, Rectangle column) { g.setColor(Color.green.darker()); g.fillRect(column.x, column.y, column.width, column.height); } public void jump() { if (gameOver) { box = new Rectangle(FRAME_WIDTH / 2 - 10, FRAME_HEIGHT / 2 - 10, 20, 20); columns.clear(); yMotion = 0; score = 0; addColumn(true); addColumn(true); addColumn(true); addColumn(true); gameOver = false; } if (!started) { started = true; } else if (!gameOver) { if (yMotion > 0) { yMotion = 0; } yMotion -= 10; } } @Override public void actionPerformed(ActionEvent e) { int speed = 10; ticks++; if (started) { for (int i = 0; i < columns.size(); i++) { Rectangle column = columns.get(i); column.x -= speed; } if (ticks % 2 == 0 && yMotion < 15) { yMotion += 2; } for (int i = 0; i < columns.size(); i++) { Rectangle column = columns.get(i); if (column.x + column.width < 0) { columns.remove(column); if (column.y == 0) { addColumn(false); } } } box.y += yMotion; for (Rectangle column : columns) { if (column.y == 0 && box.x + box.width / 2 > column.x + column.width / 2 - 10 && box.x + box.width / 2 < column.x + column.width / 2 + 10) { score++; } if (column.intersects(box)) { gameOver = true; if (box.x <= column.x) { box.x = column.x - box.width; } else { if (column.y != 0) { box.y = column.y - box.height; } else if (box.y < column.height) { box.y = column.height; } } } } if (box.y > FRAME_HEIGHT - 120 || box.y < 0) { gameOver = true; } if (box.y + yMotion >= FRAME_HEIGHT - 120) { box.y = FRAME_HEIGHT - 120 - box.height; gameOver = true; } } renderer.repaint(); } public void repaint(Graphics g) { g.setColor(Color.black); g.fillRect(0, 0, FRAME_WIDTH, FRAME_HEIGHT); g.setColor(Color.gray); g.fillRect(0, FRAME_HEIGHT - 120, FRAME_WIDTH, 120); g.setColor(Color.yellow); g.fillRect(0, FRAME_HEIGHT - 120, FRAME_WIDTH, 20); g.setColor(Color.red); g.fillRect(box.x, box.y, box.width, box.height); for (Rectangle column : columns) { paintColumn(g, column); } g.setColor(Color.white); g.setFont(new Font("Arial", 1, 100)); if (!started) { g.drawString("Click to start!", 75, FRAME_HEIGHT / 2 - 50); } if (gameOver) { g.drawString("Game Over!", 100, FRAME_HEIGHT / 2 - 50); } if (!gameOver && started) { g.drawString(String.valueOf(score), FRAME_WIDTH / 2 - 25, 100); } } public static void main(String[] args) { jumpyBox = new JumpyBox(); } @Override public void mouseClicked(MouseEvent e) { jump(); } @Override public void keyReleased(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_SPACE) { jump(); } } @Override public void mousePressed(MouseEvent e) { } @Override public void mouseReleased(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseExited(MouseEvent e) { } @Override public void keyTyped(KeyEvent e) { } @Override public void keyPressed(KeyEvent e) { } } package jumpyBox; import java.awt.Graphics; import javax.swing.JPanel; public class UIRenderer extends JPanel { private static final long serialVersionUID = 1L; @Override protected void paintComponent(Graphics g) { super.paintComponent(g); JumpyBox.jumpyBox.repaint(g); } }