Bài tập về Java GUI (?) và Class

Em chào mọi người, đợt vừa rồi em có nghỉ mất 1 buổi học Java phần GUI do tiêm vaccine mà prof em lại không record nên chỉ có thể đọc slide.
Bài này là assignment của em, em có đọc theo các notes đã ghi lại để làm nhưng vẫn có 1 số vấn đề. Hi vọng các anh chị có thể cho em gợi ý để em tiếp tục làm bài của mình.
snip23
sdsds

Hôm trước anh @SITUVN.gcd có chỉ em 1 số phần về class thì em có đọc để làm.
Đối với bài 4
Nội dung đã giải quyết được: Đã khai báo width, height; tạo method moveTo(), và constructor.
Nội dung chưa giải quyết được: Em chưa hiểu yêu cầu của center() method lắm, tức là ở đây em sẽ nhận giá trị (x,y), sau đó chọn điểm (525, 425) là giao điểm hai đường chéo hay sao ạ?

Đối với bài 5

  • Như em đọc trong sách thì sẽ sử dụng kiểu super.
  • Em có test thử là sẽ tạo 1 biến side, sau đó gán vào theo dạng super(side, side), nhưng đề hình như yêu cầu không cần tạo biến hay bất cứ method nào

Đối với bài 6

  • Hiện tại em vẫn còn đang mò cách giải quyết nên vẫn chưa xong. Tạm thời em đang ráng xử lý hai bài trên, em cảm ơn anh chị rất nhiều ạ.

Các file code

  1. File Quadrilateral.java
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package drawingquad;

import java.awt.Graphics;
import java.util.Random;

/**
 *
 * @author Hani
 */
public class Quadrilateral 
{
    Point[] points = new Point[4];
    
    
    //No-arg constructor
    Quadrilateral()
    {
        this.points[0] = new Point(random(50, 400), random(150, 300));
        this.points[1] = new Point(random(600, 1000), random(150, 300));
        this.points[2] = new Point(random(600, 1000), random(400, 650));
        this.points[3] = new Point(random(50, 400), random(400, 650));
    }
    
    //Random method
    private int random(int min, int max)
    {
      Random rdm = new Random();
      int num = rdm.nextInt(max + 1 - min) + min;
      return num;
      
    }
    
    //draw() method
    public void draw(Graphics g)
    {
        // use g.drawLine(x1, y1, x2, y2)
        for(int i = 0; i < 4; i ++)
        {
            if(i == 3)
            {
                g.drawLine(points[3].getX(), points[3].getY(), points[0].getX(), points[0].getY());
                continue;
            }
            
            g.drawLine(points[i].getX(), points[i].getY(), points[i + 1].getX(), points[i + 1].getY());
            
        }
    }
}
  1. File Rectangle.java
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package drawingquad;

/**
 *
 * @author admin
 */
public class Rectangle extends Quadrilateral
{
    private int width;
    private int height;
    
    //Constructor
    Rectangle(int width, int height)
    {
        this.width = width;
        this.height = height;
    }
    //moveTo() method
    private void moveTo(int x, int y)
    {
        super.points[0] = new Point(x, y); // Upper-left corner
        super.points[1] = new Point(x + width, y); //Upper-right corner
        super.points[2] = new Point(x, y - height); //Lower left-corner
        super.points[3] = new Point(x + width, y - height); // Lower-right corner
    }
    
    //center() method
    
}

  1. File Square
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package drawingquad;

/**
 *
 * @author admin
 */
public class Square 
{
    
}

Em cập nhật hướng đi bài số 4 cho method center()

Cập nhật code triển khai cho bài 4

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package drawingquad;

/**
 *
 * @author admin
 */
public class Rectangle extends Quadrilateral
{
    private int width;
    private int height;
    
    //Constructor
    Rectangle(int width, int height)
    {
        this.width = width;
        this.height = height;
        center();
        
    }
    //moveTo() method
    private void moveTo(int x, int y)
    {
        super.points[0] = new Point(x, y); // Upper-left corner
        super.points[1] = new Point(x + width, y); //Upper-right corner
        super.points[2] = new Point(x, y - height); //Lower left-corner
        super.points[3] = new Point(x + width, y - height); // Lower-right corner
    }
    
    //center() method
    private void center()
    {
        int x = 525 - (this.width / 2);
        int y = 425 - (this.height / 2);
        moveTo(x, y);
    }
    
}

2 posts were merged into #1

Toàn bộ code của em. Còn mỗi bài 6 em chưa hiểu được cách làm :frowning:
https://replit.com/@jasonngn/DrawingQuad

Mình sửa bài của bạn 2 ngày trước, nhưng không có thời gian chỉ dẫn bạn cặn kẽ.

Bài 4:

Phương thức center() là để bạn đặt hình chữ nhật nằm cân bằng tại điểm có tọa độ (525, 425). Bạn phải tính toán và dịch chuyển (moveTo) sao cho điểm (525, 425) chính là giao điểm của đường chéo.

Bài 5:

Bạn nghĩ đúng rồi đấy. Sẽ gọi super(side, side). Chỉ có vậy là đủ.
Đừng nhầm lẫn việc bạn gọi đến super là tạo phương thức mới. Gọi đến khác với tạo/khai báo mới.

Bài 6:

Bài này dính đến đồ họa, bạn đã có mọi thứ từ 5 bài tập trước, chỉ cần sử dụng và vẽ nó lên giao diện (Swing).
Theo mô tả thì giao diện có 1 nút bấm (button), 1 thanh xổ chọn (combobox) trên góc trái. Dùng cửa sổ hiện tại (JFrame) hoặc thêm một bảng (JPanel) để vẽ lên.

Khi nhấn nút thì phải xét xem thanh xổ đang chọn gì để bạn có thao tác phù hợp:

  1. Tứ giác: tạo ngẫu nhiên 4 điểm.
  2. Hình chữ nhật: yêu cầu người dùng nhập cao và rộng cách nhau 1 dấu cách.
  3. Hình vuông: tương tự hình chữ nhật, nhưng chỉ có 1 giá trị.
Lưu ý: Phần nhập giá trị, đề bài không hề nêu rõ cách thức thực hiện.

Có thể bạn thêm 1 ô nhập văn bản (JTextField) nằm cạnh thanh xổ và nút bấm, hoặc có thể tạo hộp thoại (dialog) yêu cầu nhập giá trị bằng cách gọi đến JOptionPane.showInputDialog.
Phương thức sẽ trả về chuỗi vừa nhập, bạn phải xét các giá trị của chuỗi có hợp lệ (số và phân cách), xét xem có đủ cả dài và rộng, có đúng là số, sau đó chuyển đổi về số (int) và truyền vào các hàm dựng tương ứng.

Sau khi đã tạo được đối tượng đúng cho mỗi hình, đến lúc dùng chúng để vẽ.
Bạn có thể dùng getGraphics() để lấy đối tượng vẽ và vẽ lên. Tuy vậy khuyến khích gọi repaint() và dùng onPaint để vẽ.
Bạn phải sử dụng lớp Graphics2D và các phương thức của lớp này để vẽ ra được các hình tương ứng. Vẽ 4 đoạn thẳng đi qua lần lượt 4 điểm, dùng phương thức drawPylogon.
Tài liệu và ví dụ bạn có thể tự tìm với từ khóa: java swing graphics.

1 Like

Em cảm ơn nhiều ạ. Hiện tại em đã nộp và xử lý xong phần 1 (tức là bài này). Để em xem nội dung anh hướng dẫn để thay đổi thêm. Có gì em gửi lại sau anh chỉ dẫn thêm em 1 tí với.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?