อธิบายโค้ดแบบเข้าใจง่าย
โค้ดนี้เป็นการสร้างแอปพลิเคชันเครื่องคิดเลขด้วยภาษา Java โดยใช้ Swing Library สำหรับสร้างส่วนติดต่อผู้ใช้ (GUI) มีฟังก์ชันการคำนวณพื้นฐานเช่น บวก, ลบ, คูณ, หาร รวมถึงฟังก์ชันคณิตศาสตร์ขั้นสูงอย่าง เปอร์เซ็นต์, ยกกำลัง, รากที่สอง และฟังก์ชันตรีโกณมิติ (sin, cos, tan)
คลาส Calculator สืบทอดจาก JFrame และ implements ActionListener เพื่อจัดการเหตุการณ์การคลิกปุ่มต่างๆ
// ส่วนแสดงผล
private JTextField textField; // ช่องแสดงผลลัพธ์
private JLabel operationLabel; // แสดงขั้นตอนหรือสัญลักษณ์การคำนวณ
// ปุ่มกดต่างๆ
private JButton[] numberButtons = new JButton[10]; // ปุ่มตัวเลข 0-9
private JButton addBtn, subBtn, mulBtn, divBtn; // ปุ่มเครื่องหมาย +, -, ×, ÷
private JButton decBtn, equBtn, clrBtn, percentBtn, powBtn, sqrtBtn; // ปุ่มฟังก์ชันอื่นๆ
private JButton sinBtn, cosBtn, tanBtn; // ปุ่มฟังก์ชันตรีโกณมิติ
// ตัวแปรใช้คำนวณ
private double num1 = 0, num2 = 0, result = 0; // เก็บตัวเลขและผลลัพธ์
private char operator; // เก็บเครื่องหมายการคำนวณ
ใช้การออกแบบที่ทันสมัยด้วยสี่เหลี่ยมมุมโค้ง, สีที่กำหนดเอง และการจัดเรียงองค์ประกอบที่ดี ทำให้ UI ดูสวยงาม
ใช้การ override paintComponent เพื่อวาดองค์ประกอบด้วยตัวเอง ทำให้สามารถปรับแต่งลักษณะได้อย่างอิสระ
รองรับการคำนวณทั้งพื้นฐานและขั้นสูง เช่น ตรีโกณมิติ รากที่สอง และยกกำลัง
ใช้ ActionListener ในการตอบสนองต่อการกดปุ่ม ทำให้ GUI มีความเป็น Interactive
โค้ดใช้ JFrame เป็นหน้าต่างหลักและมีการตั้งค่าต่างๆ ในคอนสตรัคเตอร์
เมธอดนี้ตั้งค่าเริ่มต้นของหน้าต่าง เช่น ขนาด, ชื่อ, และการปิดโปรแกรม
private void setupFrame() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // ปิดโปรแกรมเมื่อปิดหน้าต่าง
setSize(400, 600); // ขนาด 400x600 พิกเซล
setTitle("Calculator"); // ชื่อหน้าต่าง
// สร้าง mainPanel ด้วยพื้นหลังแบบมุมโค้ง
mainPanel = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
// โค้ดสำหรับวาดพื้นหลังสี่เหลี่ยมมุมโค้ง
}
};
}
จัดเตรียมช่องแสดงผลลัพธ์และป้ายแสดงขั้นตอนการคำนวณ
private void setupTextField() {
operationLabel = new JLabel("", SwingConstants.RIGHT); // สร้างและตั้งค่า Label
textField = new JTextField("0"); // สร้างช่องแสดงผล
// สร้าง Panel เพื่อรวม operationLabel และ textField
JPanel textPanel = new JPanel(new BorderLayout()) {
@Override
protected void paintComponent(Graphics g) {
// โค้ดสำหรับวาดพื้นหลัง
}
};
}
สร้างและจัดวางปุ่มต่างๆ ด้วย GridBagLayout
private void setupButtons() {
buttonPanel = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
// สร้างปุ่มต่างๆ
clrBtn = createButton("C", OPERATOR_BTN_COLOR);
// สร้างปุ่มอื่นๆ...
// จัดวางปุ่มใน GridBagLayout
gbc.gridx = 0; gbc.gridy = 0; buttonPanel.add(clrBtn, gbc);
// จัดวางปุ่มอื่นๆ...
}
เมธอดสำหรับสร้างปุ่มแบบกำหนดเองด้วยสไตล์ที่สวยงาม
private JButton createButton(String text, Color bgColor) {
JButton button = new JButton(text) {
@Override
protected void paintComponent(Graphics g) {
// โค้ดสำหรับวาดปุ่มสวยๆ ด้วยสี่เหลี่ยมมุมโค้ง
}
};
button.addActionListener(this); // เพิ่ม listener สำหรับรองรับการคลิก
return button;
}
เมธอดที่ถูกเรียกเมื่อมีการคลิกปุ่ม จัดการเหตุการณ์ต่างๆ ของปุ่มทั้งหมด
@Override
public void actionPerformed(ActionEvent e) {
// ตรวจสอบการกดปุ่มตัวเลข
for (int i = 0; i < 10; i++) {
if (e.getSource() == numberButtons[i]) {
// โค้ดจัดการการกดปุ่มตัวเลข
return;
}
}
// ตรวจสอบการกดปุ่มอื่นๆ
if (e.getSource() == decBtn) {
// โค้ดจัดการการกดปุ่มจุดทศนิยม
} else if (e.getSource() == addBtn) {
performOperation('+');
}
// จัดการปุ่มอื่นๆ...
}
จัดการการกดปุ่มเครื่องหมายคณิตศาสตร์ (+, -, ×, ÷, ^)
คำนวณผลลัพธ์เมื่อกดปุ่ม = ตามเครื่องหมายที่เลือกไว้
คำนวณรากที่สองของตัวเลขที่ป้อนเข้ามา
คำนวณฟังก์ชันตรีโกณมิติ (sin, cos, tan)
คำนวณเปอร์เซ็นต์ของตัวเลขที่ป้อนเข้ามา
โค้ดนี้มีความพิเศษตรงที่มีการใช้เทคนิคการวาดกราฟิกด้วย Java 2D เพื่อสร้าง UI ที่สวยงาม:
paintComponent()
เพื่อวาดพื้นหลังและปุ่มแบบกำหนดเองfillRoundRect()
anti-aliasing
เพื่อให้เส้นขอบดูเรียบเนียนprivate void addHoverEffects() {
Component[] components = buttonPanel.getComponents();
for (Component component : components) {
if (component instanceof JButton) {
JButton button = (JButton) component;
button.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
button.setCursor(new Cursor(Cursor.HAND_CURSOR));
}
});
}
}
}
เมธอด main จะเริ่มต้นโปรแกรมโดยการสร้างอินสแตนซ์ของคลาส Calculator
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
}
new Calculator(); // สร้างอินสแตนซ์เพื่อเริ่มต้นโปรแกรม
}
โค้ดนี้เป็นตัวอย่างของการใช้ Java Swing สร้าง GUI ที่สวยงามและมีประสิทธิภาพ โดยไม่ต้องใช้ไลบรารีภายนอกเพิ่มเติม