Giải phương trình bậc 2 Java Swing kéo thả

Tạo form như mẫu sau:

Giải phương trình bậc 2 Java Swing kéo thả
From login

Giải phương trình bậc 2 Java Swing kéo thả


From functions

Yêu cầu:

  • Viết chức năng login
  • Viết các chức năng cho từng radio button

Bước 1. Tạo project

– Khởi động NetBean IDE – File -> New Project -> Tab Categories chọn Java -> Tab Project chọn JavaApplication -> Đặt tên cho project -> Finish – Trong project mới tạo (Project JavaSwing), mình tạo một package là vn.edu.uneti.lab12

Giải phương trình bậc 2 Java Swing kéo thả

Bước 2. Tạo các form

2.1. Tạo form đăng nhập (login form).

Giải phương trình bậc 2 Java Swing kéo thả
– Right Click vào Package -> New -> JFrame Form -> Class Name bạn gõ tên form, ở đây là login

Giải phương trình bậc 2 Java Swing kéo thả

– Bạn kéo các thành phần (components) từ cửa sổ Palette phía bên phải IDE vào form và bố trí hợp lí như yêu cầu của đề bài. Phần này dễ và nhiều thao tác nên mình sẽ không hướng dẫn. – Trong cửa sổ properties, bạn chọn tab Code và tiến hành đặt tên cho các components bạn đã kéo vào from. – Phần quan trọng nhất là code ở phần này. Bạn chuyển từ chết độ Design sang Code bằng các Double Click vào các components hoặc chuyển sang tab Source.

Giải phương trình bậc 2 Java Swing kéo thả

– Ok, bây giờ chúng ta sẽ viết code cho form này. Trước hết, do yêu cầu không cao về tình khả chuyển nên bạn có thể config luôn User Name, Password trong code bằng cách sử dụng hằng số.

private static String USER = "Chloe"; private static String PASS = "test1";

– Tiếp theo nút Cancel, bạn sẽ close form và thoát ứng dụng. Bạn sử dụng phương thức Dispose().

private void btCancelActionPerformed(java.awt.event.ActionEvent evt) { this.dispose(); }

– Quan trọng nhất là nút Submit để đăng nhập vào chương trình. Bạn cần kiểm tra User, Password có chính xác hay không để quyết định làm gì tiếp theo. Nếu User, Pass đúng bạn cho người dùng sử dụng các chức năng tức là bật ra form functions và ẩn form login đi. Bạn có thể tham khảo đoạn code dưới đây.

private void btSubmitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btSubmitActionPerformed // Kiểm tra xem các text field có để trống không if (tbUser.getText().equals("Type your Username here!") || tbPass.getText().equals("")) { //Hiển thị thông báo bằng Message Dialog JOptionPane.showMessageDialog(null, "Bạn chưa nhập UserName hoặc Password!", "Lỗi đăng nhập", JOptionPane.OK_OPTION); } // So sánh user, pass người dùng nhập vào và dữ liệu định sẵn if (tbUser.getText().equals(USER) && tbPass.getText().equals(PASS)) { JOptionPane.showMessageDialog(null, "Logged", "Informations", JOptionPane.INFORMATION_MESSAGE); GlobalVariable.l.setVisible(false);// Ẩn form login GlobalVariable.fun.show();// Hiển thị form lựa chọn function } else { JOptionPane.showMessageDialog(null, "Log failure", "Informations", JOptionPane.OK_OPTION); tbUser.requestFocus(); }

– Ở đây mình có sử dụng 1 Abstract Class GlobalVariable mục đích là tạo ra các biến Global dùng chung cho toàn bộ project.

package vn.edu.uneti.lab12; public abstract class GlobalVariable { public static login l = new login(); public static functions fun =new functions();

}


– Ok bạn đã có 1 form login tương đối, ngoài ra bạn có thể sử dụng một số config khác để config các điều kiện khác như:

  • Chỉ cho nhập k kí tự vào các field.
  • Thay đổi kiểu hiển thị của các password.
  •  Các hàm validate dữ liệu từ người dùng.
  •  ….

2.2. Tạo form functions

Giải phương trình bậc 2 Java Swing kéo thả
– Bạn tạo ra một JFrame Form mới như 2.1 và đặt tên là functions. – Bạn kéo thả các components như hình vẽ đề bài yêu cầu.

– Lưu ý:

  • Các radio button bạn phải nhóm vào 1 group với mục đích chỉ cho chọn 1 radio button tại 1 thời điểm.
  • Cần config cho 1 radio button nào đó được chọn mặc định ( Mục đích đảm bảo tính logic.).

– Nút Exit bạn có thể code như sau:
private void btExitActionPerformed(java.awt.event.ActionEvent evt) { this.dispose(); GlobalVariable.l.setVisible(true); } – Nút Display bạn có thể tham khảo đoạn code dưới:

private void btDisplayActionPerformed(java.awt.event.ActionEvent evt) { if (rbg.getSelection() == btr1.getModel()) { GlobalVariable.fun.setVisible(false); pbt1 pt = new pbt1(); pt.show(); } if (rbg.getSelection() == btr2.getModel()) { GlobalVariable.fun.setVisible(false); ptb2 pt = new ptb2(); pt.show(); } if (rbg.getSelection() == btr3.getModel()) { GlobalVariable.fun.setVisible(false); Prime pt = new Prime(); pt.show(); } }

2.3. Giải phương trình bậc nhất.

Giải phương trình bậc 2 Java Swing kéo thả
– Bạn tạo form như hình vẽ trên. – Code nút Close:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed this.dispose(); GlobalVariable.fun.setVisible(true); }

– Code nút Solve:

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { if (tbA.getText().equals("") || tbB.getText().equals("")) { JOptionPane.showMessageDialog(null, "Bạn phải nhập dữ liệu cho 2 trường a, b.", "Error", JOptionPane.OK_OPTION); } else { float a = 0, b = 0; try { a = Float.parseFloat(tbA.getText()); b = Float.parseFloat(tbB.getText()); if (b != 0) { tbRe.setText("" + (-a / b)); } else { tbRe.setText("Phương trình vô số nghiệm trên R."); } } catch (Exception e) { JOptionPane.showMessageDialog(null, "Dữ liệu không đúng.", "Error", JOptionPane.OK_OPTION); tbA.requestFocus(); } } }

– Ngoài ra các bạn có thể handle event người dùng click vào biểu tưởng close của form như sau:

private void formWindowClosing(java.awt.event.WindowEvent evt) { int check=JOptionPane.showConfirmDialog(this,"Are you sure exit?", "Confirm", JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE); if(check ==JOptionPane.YES_OPTION){ System.exit(1); System.out.println(evt.toString()); } }

2.4. Giải phương trình bậc 2

Giải phương trình bậc 2 Java Swing kéo thả
– Bạn tạo form theo mẫu trên. – Code nút Close:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { this.dispose(); GlobalVariable.fun.setVisible(true); }

– Code nut Solve:

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { if (tbA.getText().equals("") || tbB.getText().equals("") || tbC.getText().equals("")) { JOptionPane.showMessageDialog(null, "Bạn phải nhập dữ liệu cho 3 trường a, b, c.", "Error", JOptionPane.OK_OPTION); tbA.requestFocus(); } else { float a = 0, b = 0, c = 0; try { a = Float.parseFloat(tbA.getText()); b = Float.parseFloat(tbB.getText()); c = Float.parseFloat(tbC.getText()); if (a == 0) { if (b == 0) { if (c == 0) { tbRe.setText("Phương trình vô nghiệm trên R."); return; } else { tbRe.setText("Phương trình vô nghiệm trên R."); } } else { if (c == 0) { tbRe.setText("Phương trình có nghiệm x=0."); return; } else { tbRe.setText("Phương trình có nghiệm x=" + (-c / b)); return; } } } else { float delta = b * b - 4 * a * c; if (delta < 0) //a khac ko { tbRe.setText("Phương trình vô nghiệm trên R."); return; } else if (delta == 0) { tbRe.setText("Phương trình có nghiệm kép \nx1= x2= " + (-b / (2 * a))); return; } else { tbRe.setText("Phương trình có 2 nghiệm.\nx1= " + ((-b + Math.sqrt(delta)) / (2 * a)) + "\nx2= " + ((-b - Math.sqrt(delta)) / (2 * a))); return; } } } catch (Exception e) { JOptionPane.showMessageDialog(null, "Dữ liệu không đúng.", "Error", JOptionPane.OK_OPTION); tbA.requestFocus(); } } }

2.5. Kiểm tra số nguyên tố.

Giải phương trình bậc 2 Java Swing kéo thả
– Bạn thiết thế form như hình trên. – Code nút Check:

private void btCheckActionPerformed(java.awt.event.ActionEvent evt) { if (tbN.getText().equals("")) { JOptionPane.showMessageDialog(null, "Bạn chưa nhập dữ liệu.", "Error", JOptionPane.OK_OPTION); } else { try { int n = Integer.parseInt(tbN.getText()); System.out.println(n); if (n <= 0) { JOptionPane.showMessageDialog(null, "Bạn phải nhập vào một số nguyên dương.", "Error", JOptionPane.OK_OPTION); return; } else { boolean f = false; if (n == 1) { JOptionPane.showMessageDialog(null, tbN.getText() + " không phải là số nguyên tố.", "Informations", JOptionPane.INFORMATION_MESSAGE); return; } else if (n == 2 || n == 3) { JOptionPane.showMessageDialog(null, tbN.getText() + " là số nguyên tố.", "Informations", JOptionPane.INFORMATION_MESSAGE); return; } else { if(Pr(n)) JOptionPane.showMessageDialog(null, tbN.getText() + " là số nguyên tố.", "Informations", JOptionPane.INFORMATION_MESSAGE); else JOptionPane.showMessageDialog(null, tbN.getText() + " không phải là số nguyên tố.", "Informations", JOptionPane.INFORMATION_MESSAGE); } } } catch (Exception e) { System.out.println(e.toString()); JOptionPane.showMessageDialog(null, "Bạn phải nhập vào một số nguyên dương.", "Error", JOptionPane.OK_OPTION); } } }

– Ở đây mình sử dụng hàm kiểm tra số nguyên tố.

public static boolean Pr(int n){ if(n<=1) return false; if (n==2||n==3) return true; for (int i = 2; i <= (int)Math.sqrt(n); i++) { if(n%i==0) return false; } return true; }

2.6. Kiểm tra số hoàn hảo.

– Các bạn có thể tự code và design phần này. – Khái niệm số hoàn hảo rất đơn giản, bạn có thể tìm kiếm trên mạng. Nhưng có thể hiểu một cách đơn giản:”Số hoàn hảo có tổng các ước bằng chính nó.”. – Bạn có thể sử dụng đoạn code bên dưới để có được hình ảnh các components có tính khả chuyển cao hơn. Tức là các component này sẽ gần với hình dạng của hệ điều hành nhất. Trong form login.java bạn sửa hàm main thành:

public static void main(String args[]) { /* Set the Nimbus look and feel */ // /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.

* For details seehttp://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html

*/ try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(login.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(login.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(login.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(login.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } // try { /* Create and display the form */ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException ex) { Logger.getLogger(login.class.getName()).log(Level.SEVERE, null, ex); } catch (InstantiationException ex) { Logger.getLogger(login.class.getName()).log(Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { Logger.getLogger(login.class.getName()).log(Level.SEVERE, null, ex); } catch (UnsupportedLookAndFeelException ex) { Logger.getLogger(login.class.getName()).log(Level.SEVERE, null, ex); } GlobalVariable.l.show(); }

Toàn bộ code bạn có thể download tại:Click here