所以我在做一个登录系统。根据您登录时帐户的角色,它将显示特定于角色的按钮。例如,如果您以雇员身份登录,您将看到两个按钮,称为requeststatus和registermissing。如果您以管理员身份登录,您将看到按钮requeststatus、registermissing、reports和userroles。经过一点摸索和错误(因为我是java的初学者),我设法使它工作!
代码:
@FXML
private TextField textUsername;
@FXML
private PasswordField textPassword;
Stage dialogStage = new Stage();
Scene scene;
ResultSet resultSet = null;
//Login for employee
@FXML
private void handleButtonAction(ActionEvent event) {
Database db = new Database();
String username = textUsername.getText();
String password = textPassword.getText();
int usrID = 0;
int roleID = 0;
//String RoleID = EmpSelect.getValue();
String sql = String.format("SELECT * FROM Employee "
+ "WHERE username = '%s' "
+ "and password = '%s' ",
//+ "and RoleID = '%s' ",
username, password);
infoBox("sql [" + sql + "]", "Success", null);
try {
resultSet = db.executeResultSetQuery(sql);
if (!resultSet.next()) {
infoBox("Enter Correct Username and Password", "Failed", null);
} else {
//infoBox("Login Successfull", "Success", null);
resultSet.first();
usrID = resultSet.getInt("idEmployee");
roleID = resultSet.getInt("RoleID");
utilities.setEmployee(usrID, roleID);
FXMLDocumentController controller = new FXMLDocumentController();
utilities.newAnchorpane("EmployeeHomescreen", paneLogin);
infoBox("Login Successfull", "Success", null);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void infoBox(String infoMessage, String titleBar, String headerMessage) {
Alert alert = new Alert(AlertType.INFORMATION);
alert.setTitle(titleBar);
alert.setHeaderText(headerMessage);
alert.setContentText(infoMessage);
alert.showAndWait();
}
所以基本上我在这里做的是,公司的一个员工可以登录,它显示查询的结果,这样我就知道它工作了。
import static com.mycompany.mavenproject2.LoginController.infoBox;
import java.net.URL;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
/**
*
* @author John
*/
public class WorkerHomescreenController implements Initializable {
@FXML
private AnchorPane actualmain;
@FXML
private Pane mainpage;
@FXML
private Label label1;
@FXML
private Button but1, but2, but3, but4;
@FXML
private VBox VBPane;
@Override
public void initialize(URL url, ResourceBundle rb) {
//infoBox("User ID = " + utilities.userID, "Success", null);
Database db = new Database();
ResultSet resultSet = null;
String sqlMenu = String.format("SELECT * FROM Menu "
+ "WHERE idMenu IN (SELECT MenuID FROM MenuRoles WHERE RoleID = " + utilities.roleID + ") ");
//+ "AND Active = True");
try {
resultSet = db.executeResultSetQuery(sqlMenu);
int i=0;
GridPane gpnael = new GridPane();
while (resultSet.next()) {
Button button = new Button(resultSet.getString("Link"));
gpnael.add (button, i++, 1 );
button.setStyle("-fx-font: 22 arial; -fx-base: #d81e05; "
+ "-fx-background-radius: 0; -fx-border-width: 1 0 0 0; "
+ "-fx-border-color: white; -fx-font-weight: bold; "
+ "-fx-font-size: 18;");
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
try {
resultSet.getURL("Link");
} catch (SQLException ex) {
Logger.getLogger(WorkerHomescreenController.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
}
} catch (SQLException e) {
e.printStackTrace();
}
}
Utilities utilities = new Utilities();
//Methods to open other pages
@FXML
private void openRequestStatus(ActionEvent event) {
utilities.newPane("RequestStatus", but1, mainpage, label1);
}
@FXML
private void openRegisterMissing(ActionEvent event) {
utilities.newPane("RegisterMissing", but2, mainpage, label1);
}
@FXML
private void openRequestTest(ActionEvent event) {
utilities.newPane("RequestStatus", but3, mainpage, label1);
}
@FXML
private void openRegistertesting(ActionEvent event) {
utilities.newPane("RegisterMissing", but4, mainpage, label1);
}
}
这是登录后重定向到的页面的控制器。此页面当前的设置方式是,根据您用于登录的帐户的roleid,它将生成包含我存储在数据库中的信息的按钮。
公用设施控制器:
public static int userID;
public static int roleID;
@FXML
public void setEmployee(int idEmployee, int RoleID) {
this.userID = idEmployee;
this.roleID = RoleID;
}
实用程序控制器用于设置当前员工。
我的问题是:我的程序目前可以根据你的帐户生成按钮(这很好!)。我现在想做的是,按钮有一个链接保存在数据库中以及。因此,当按钮生成时,它有一个标签和一个链接附着在它上面,这样当您按下按钮时,它将转到附着在按钮上的链接。
我希望这有道理。
我知道在一个.fxml文件中,如果你在里面做一个按钮,你可以给它一个onaction事件,这样如果你按下按钮,它就会带你到正确的页面。
我的数据库是这样的:
EMPLOYEE Table
idEmployee firstname lastname username password RoleID
1 John Doe John123 Test123 1
2 Tim Gardener Tim123 Welcome123 2
ROLES Table
idRole roleName
1 Employee
2 Manager
MENU Table
idMenu Name Link
1 but1 RequestStatus
2 but2 RegisterMissing
3 but3 Reports
4 but4 UserRoles
MenuRoles Table
MenuID RoleID
1 1
1 2
2 1
2 2
3 2
4 2
我希望你们能帮我解决这个问题,谢谢你们抽出时间我很感激!
编辑1:在阅读了评论之后,我编辑了一些代码。我现在遇到的问题是resultset.geturl(“link”)中的resultset;给我一个错误:“本地variabel是从内部类访问的;需要宣布为最终决定。在使resultset为final之后,它给了我另一个错误:final resultset resultset=null;
这部分现在给出了一个错误:resultset=db.executeSultSetQuery(sqlmenu);无法为最终VariableResultSet赋值。
暂无答案!
目前还没有任何答案,快来回答吧!