所以我正在制作登录系统。根据您的帐户在登录时所具有的角色,它会显示特定于角色的按钮。例如,如果您以员工身份登录,则会看到两个名为RequestStatus和RegisterMissing的按钮。如果您以管理员身份登录,您将看到按钮RequestStatus,RegisterMissing,Reports和UserRoles。 经过一些跟踪和错误(因为我是java的初学者),我设法让它工作!
CODE:
@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;
}
Utilities控制器用于设置当前员工。
我的问题是: 我的程序目前正常运行,因此它会根据您的帐户生成按钮(这很好!)。我现在要做的是按钮还有一个保存在数据库中的链接。因此,当生成按钮时,它会附加一个标签和一个链接,这样当您按下按钮时,它将转到附加到该按钮的链接。
我希望这是有道理的。
我知道在.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中的resultSet(&#34; Link&#34;);给我一个错误说:&#34;从内部类中访问本地变量;需要被宣布为最终版。 在使结果集最终后,它给了我另一个错误说 final ResultSet resultSet = null;
这部分现在给我一个错误说: resultSet = db.executeResultSetQuery(sqlMenu); 无法为最终的变量resultSet赋值。