Это может показаться довольно простой проблемой, но я не понимаю, почему мой код не работает, и я был бы очень признателен, если бы один из вас, прекрасные люди, быстро посмотрите, почему это так.Как изменить центральную панель JField Border Layout
Так что я пытаюсь создать графический интерфейс для проекта, и я решил пойти с макетом границы. Наверху находится JPanel
с логотипом и названием, которое останется неизменным. слева - JPanel
с несколькими кнопками, которые потенциально могут изменить цвет. Наконец, в центре происходит волшебство. До сих пор мне удалось создать экран входа в систему, который работает, и мне предоставляется доступ, однако когда он пытается забрать меня на главный экран, ничего не происходит.
Что должно произойти (в соответствии с логикой я прикладной) является то, что JPanel
в центре должен стать пустым, однако, как вы можете сказать, что это не происходит. Логикой кода я создал два JPanels
, один для входа и один для главного экрана. У меня есть глобальная переменная state
, и если пароль правильный, то state
становится 1 и код будет отозван. В коде есть оператор switch-case, в котором говорится, что если state
равно 1, то не загружать в логин JPanel
, а скорее на главный экран, однако, как вы можете сказать, это не работает.
Любая помощь относительно того, почему это не работает, или какие-либо идеи по другому пути завершения этого, что будет работать, будут очень благодарны вам!
public class Border implements ActionListener{
JFrame f = new JFrame();
JButton loginButton, homeButton, starButton, elementButton, userButton, aboutButton, creditsButton, addUserButton;
JTextField usernameField, passwordField, addUsernameField, addPasswordField;
JSpinner addStateField;
int state;
String username;
Boolean success;
Border(){
JButton b2=new JButton("SOUTH");;
//JButton b3=new JButton("EAST");;
JButton b4=new JButton("WEST");;
JButton b5=new JButton("CENTER");;
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(topBar(),BorderLayout.NORTH);
JPanel panel = new JPanel();
f.add(b2,BorderLayout.SOUTH);
//f.add(b3,BorderLayout.EAST);
f.add(menuBar(state),BorderLayout.WEST);
switch (state) {
case 0:
f.add(loginCentre(),BorderLayout.CENTER);
break;
case 1:
f.add(homeScreenCenter(),BorderLayout.CENTER);
break;
case 4:
f.add(addUserCenter(),BorderLayout.CENTER);
break;
}
f.setSize(1000,600);
f.setVisible(true);
}
public JPanel menuBar(int state){
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
String[] options = {"Home", "Check Star", "Add Element", "Add User","About", "Credits"};
for (int i = 0; i < options.length; i++){
JButton button = new JButton(options[i]);
if (i == state - 1 && state != 0){
button.setBackground(Color.cyan);
} else {
button.setBackground(Color.LIGHT_GRAY);
}
button.setBorder(new BevelBorder(BevelBorder.RAISED));
button.setHorizontalAlignment(SwingConstants.RIGHT);
switch(i){
case 0:
homeButton = new JButton();
homeButton = button;
homeButton.addActionListener(this);
break;
case 1:
starButton = new JButton();
starButton = button;
starButton.addActionListener(this);
break;
case 2:
elementButton = new JButton();
elementButton = button;
elementButton.addActionListener(this);
break;
case 3:
userButton = new JButton();
userButton = button;
userButton.addActionListener(this);
break;
case 4:
aboutButton = new JButton();
aboutButton = button;
aboutButton.addActionListener(this);
break;
case 5:
creditsButton = new JButton();
creditsButton = button;
creditsButton.addActionListener(this);
break;
}
}
panel.add(homeButton);
panel.add(Box.createRigidArea(new Dimension(20,15)));
panel.add(starButton);
panel.add(Box.createRigidArea(new Dimension(20,15)));
panel.add(elementButton);
panel.add(Box.createRigidArea(new Dimension(20,15)));
panel.add(userButton);
panel.add(Box.createRigidArea(new Dimension(20,15)));
panel.add(aboutButton);
panel.add(Box.createRigidArea(new Dimension(20,15)));
panel.add(creditsButton);
panel.add(Box.createRigidArea(new Dimension(20,15)));
panel.setBackground(Color.white);
return panel;
}
public JPanel topBar(){
ImageIcon icon = new ImageIcon(getClass().getResource("Resources\\logo.jpg"));
JPanel panel = new JPanel();
JLabel title = new JLabel("Star Explorer");
title.setHorizontalAlignment(SwingConstants.CENTER);
title.setFont(new Font("Castellar",Font.PLAIN, 18));
panel.add(title);
panel.add(Box.createRigidArea(new Dimension(500,0)));
JLabel label = new JLabel("");
label.setIcon(icon);
label.setHorizontalAlignment(SwingConstants.RIGHT);
panel.add(label);
return panel;
}
public JPanel loginCentre(){
JLabel name = new JLabel("Username:");
usernameField = new JTextField("username");
JLabel pass = new JLabel("Password:");
passwordField = new JTextField("password");
loginButton = new JButton("login");
JPanel screen = new JPanel();
screen.setLayout(new BoxLayout(screen, BoxLayout.PAGE_AXIS));
screen.setBorder(new TitledBorder("login"));
name.setAlignmentX(Component.RIGHT_ALIGNMENT);
usernameField.setAlignmentX(Component.CENTER_ALIGNMENT);
pass.setAlignmentX(Component.RIGHT_ALIGNMENT);
passwordField.setAlignmentX(Component.CENTER_ALIGNMENT);
loginButton.setAlignmentX(Component.LEFT_ALIGNMENT);
loginButton.addActionListener(this);
screen.add(name);
screen.add(Box.createRigidArea(new Dimension(0,10)));
screen.add(usernameField);
screen.add(Box.createRigidArea(new Dimension(0,10)));
screen.add(pass);
screen.add(Box.createRigidArea(new Dimension(0,10)));
screen.add(passwordField);
screen.add(Box.createRigidArea(new Dimension(0,10)));
screen.add(loginButton);
JPanel fin = new JPanel();
fin.setSize(600, 400);
//fin.setLayout(new BoxLayout(screen, BoxLayout.PAGE_AXIS));
fin.add(Box.createRigidArea(new Dimension(0,100)));
fin.add(screen);
return fin;
}
public JPanel addUserCenter(){
JLabel name = new JLabel("Username:");
addUsernameField = new JTextField("username");
JLabel pass = new JLabel("Password:");
addPasswordField = new JTextField("password");
JLabel st = new JLabel("State:");
SpinnerModel spinnerModel = new SpinnerNumberModel(0,0,1,1);
addStateField = new JSpinner(spinnerModel);
addUserButton = new JButton("login");
JPanel screen = new JPanel();
screen.setLayout(new BoxLayout(screen, BoxLayout.PAGE_AXIS));
screen.setBorder(new TitledBorder("login"));
name.setAlignmentX(Component.RIGHT_ALIGNMENT);
addUsernameField.setAlignmentX(Component.CENTER_ALIGNMENT);
pass.setAlignmentX(Component.RIGHT_ALIGNMENT);
addPasswordField.setAlignmentX(Component.CENTER_ALIGNMENT);
addUserButton.setAlignmentX(Component.LEFT_ALIGNMENT);
addUserButton.addActionListener(this);
screen.add(name);
screen.add(Box.createRigidArea(new Dimension(0,10)));
screen.add(addUsernameField);
screen.add(Box.createRigidArea(new Dimension(0,10)));
screen.add(pass);
screen.add(Box.createRigidArea(new Dimension(0,10)));
screen.add(addPasswordField);
screen.add(Box.createRigidArea(new Dimension(0,10)));
screen.add(addStateField);
screen.add(Box.createRigidArea(new Dimension(0,10)));
screen.add(addUserButton);
JPanel fin = new JPanel();
fin.setSize(600, 400);
//fin.setLayout(new BoxLayout(screen, BoxLayout.PAGE_AXIS));
fin.add(Box.createRigidArea(new Dimension(0,100)));
fin.add(screen);
return fin;
}
public JPanel homeScreenCenter(){
JPanel fin = new JPanel();
fin.setSize(600, 400);
fin.add(Box.createRigidArea(new Dimension(0,100)));
return fin;
}
public void actionPerformed(ActionEvent e){
LoginDetails login = new LoginDetails();
if (e.getSource() == loginButton){
System.out.println(usernameField.getText());
if (usernameField.getText() == "" || passwordField.getText() == ""){
return;
} else if (login.login(usernameField.getText(), passwordField.getText())){
JOptionPane.showMessageDialog(null, "ACCESS GRANTED!");
username = usernameField.getText();
success = true;
state = 1;
f.setVisible(false);
Border.run();
} else {
JOptionPane.showMessageDialog(null, "ACCESS DENIED!", "WRONG PASSWORD", JOptionPane.ERROR_MESSAGE);
}
}
if (e.getSource() == userButton && success){
if (login.addToFilePermission(username)){
state = 4;
f.setVisible(false);
Border.run();
} else {
JOptionPane.showMessageDialog(null, "ACCESS DENIED!", "INVALID PERMISSIONS", JOptionPane.ERROR_MESSAGE);
}
}
if (e.getSource() == addUserButton && addUsernameField.getText() != "" && addPasswordField.getText() != ""){
User u = new User(addUsernameField.getText(), addPasswordField.getText(),(int) addStateField.getValue());
login.addToFile(u);
}
}
public static void main(String[] args) {
new Border();
}
public static void run() {
new Border();
}
Спасибо! - Сэм
Что-то быстро добавить, кнопка только на левом, которая реализуется кнопка AddUser, и что не работает либо: Так что, если кто-нибудь знает, почему это так, то это было бы очень оценили!
Чтобы лучше помочь, отправьте сообщение [MCVE] или [Short, Self Contained, Correct Example] (http://www.sscce.org/). Это было бы более полезно, чем публикация 3 снимков экрана. –
@AndrewThompson проблема в том, что я не уверен, где проблема на самом деле происходит в коде. –
Это часть того, что создает SSCCE/MCVE, ** предназначено для выяснения **, как описано в документе SSCCE! Учитывая, что вы, очевидно, не читали его, голосование на основе «отсутствия исследований». Следуйте предложенным ссылкам и *** внимательно прочитайте содержание. *** –