Почему моя панель JScrollPane появляется над панелью, пока я не начну ее прокручивать? - PullRequest
0 голосов
/ 20 января 2020

Вот код для моего GUI

Метод, с которым у меня возникла проблема с loggedInView. Другие методы работают правильно.

Похоже, что JScrollPAne появляется над панелью, которую он должен содержать. Таким образом, любой элемент на Панели не виден, пока я не начну прокручивать ScrollPAne, после чего он станет видимым.

public class test1 {

    private JFrame frame;
    private final JPanel statePanel = new JPanel();
    private JPanel panel_1;
    private JButton btnLogIn;
    private JButton btnSignUp_1;
    private JPanel panel_3;
    private JTextField username;
    private JPasswordField passwordField;
    private JTextField pseudo;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    test1 window = new test1();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public test1() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.getContentPane().setBackground(Color.GRAY);
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        JLabel lblDearFriend = new JLabel("Dear Friend");
        lblDearFriend.setFont(new Font("Purisa", Font.BOLD, 12));
        lblDearFriend.setBounds(175, 10, 113, 15);
        frame.getContentPane().add(lblDearFriend);
        statePanel.setBackground(Color.RED);
        statePanel.setBounds(346, 0, 104, 25);

        frame.getContentPane().add(statePanel);

        panel_1 = new JPanel();
        panel_1.setBounds(0, 26, 450, 244);
        entrypointview(panel_1);

        frame.getContentPane().add(panel_1);
        panel_1.setLayout(null);

        /*
        JPanel panel_2 = new JPanel();
        panel_2.setBorder(new LineBorder(new Color(0, 0, 0), 3, true));
        panel_2.setBounds(0, 0, 103, 244);
        panel_1.add(panel_2);
        panel_2.setLayout(null);

        panel_3 = new JPanel();
        panel_3.setBorder(new LineBorder(new Color(0, 0, 0), 2, true));
        panel_3.setBounds(104, 0, 346, 244);
        panel_1.add(panel_3);
        */  
    }

    public void entrypointview(JPanel panel)

    {
        panel.setLayout(null);
        btnLogIn=new JButton("Log In");
        btnLogIn.setBounds(177, 80, 77, 25);
        btnLogIn.addActionListener(new ActionListener()
        {
              public void actionPerformed(ActionEvent e)
              {          
                  panel.removeAll();
                  panel.repaint();

                  frame.getContentPane().remove(panel);

                  viewLogin(panel);
                  //panel.validate();
                  panel.repaint();
                  panel.updateUI();

                  frame.getContentPane().add(panel);         
              }
            });
        panel.add(btnLogIn);

        btnSignUp_1 = new JButton("Sign Up");
        btnSignUp_1.setBounds(163, 117, 117, 25);
        btnSignUp_1.addActionListener(new ActionListener()
        {
              public void actionPerformed(ActionEvent e)
              {
                  panel.removeAll();
                  panel.repaint();

                  frame.getContentPane().remove(panel);

                  viewSignup(panel);
                //panel.validate();
                  panel.repaint();
                  panel.updateUI();

                  frame.getContentPane().add(panel);         
              }
            });
        panel.add(btnSignUp_1);
    }
    public void viewSignup(JPanel panel)
    {       
        username = new JTextField();
        username.setBounds(158, 48, 114, 19);
        panel.add(username);
        username.setColumns(10);

        pseudo = new JTextField();
        pseudo.setBounds(158, 110, 139, 19);
        panel.add(pseudo);
        pseudo.setColumns(10);

        JLabel lblUsername = new JLabel("Username");
        lblUsername.setBounds(55, 50, 72, 15);
        panel.add(lblUsername);

        passwordField = new JPasswordField();
        passwordField.setBounds(158, 79, 127, 19);
        panel.add(passwordField);

        JLabel lblPassword = new JLabel("Password");
        lblPassword.setBounds(65, 77, 70, 15);
        panel.add(lblPassword);

        JLabel lblSessionPseudo = new JLabel("Session Pseudo");
        lblSessionPseudo.setBounds(34, 104, 113, 15);
        panel.add(lblSessionPseudo);

        JButton btnSignUp = new JButton("Sign Up");
        btnSignUp.setBounds(158, 160, 117, 25);
        panel.add(btnSignUp);   
    }
    public void viewLogin(JPanel panel)
    {   
        panel.setLayout(null);
        username = new JTextField();
        username.setBounds(158, 48, 114, 19);
        panel.add(username);
        username.setColumns(10);

        pseudo = new JTextField();
        pseudo.setBounds(158, 110, 139, 19);
        panel.add(pseudo);
        pseudo.setColumns(10);

        JLabel lblUsername = new JLabel("Username");
        lblUsername.setBounds(55, 50, 72, 15);
        panel.add(lblUsername);

        passwordField = new JPasswordField();
        passwordField.setBounds(158, 79, 127, 19);
        panel.add(passwordField);

        JLabel lblPassword = new JLabel("Password");
        lblPassword.setBounds(65, 77, 70, 15);
        panel.add(lblPassword);

        JLabel lblSessionPseudo = new JLabel("Session Pseudo");
        lblSessionPseudo.setBounds(34, 104, 113, 15);
        panel.add(lblSessionPseudo);

        JButton btnLogin = new JButton("Log In");
        btnLogin.setBounds(158, 160, 117, 25);
        btnLogin.addActionListener(new ActionListener()
        {
              public void actionPerformed(ActionEvent e)
              {

                  panel.removeAll();
                  panel.repaint();

                  frame.getContentPane().remove(panel);

                  loggedInView(panel);
                  panel.validate();
                  panel.repaint();
                  panel.updateUI();
                  frame.getContentPane().add(panel);
              }
            });
        panel.add(btnLogin);        
    }
    public boolean  verifylogin(String username,String password)
    {
        return true; 

    }
    public boolean  challengepseudo(String pseudo)
    {
        return true; 

    }
    public boolean  challengeusername(String username)
    {
        return true;        
    }

    public void loggedInView(JPanel panel)
    {
        statePanel.setBackground(Color.GREEN);
        //panel.setLayout(null);
        JPanel test=new JPanel(new GridLayout(0,1));
        test.setBorder(new LineBorder(new Color(0, 0, 0), 3, true));
        test.setBounds(0, 0, 100, 240);

        test=onlineUserToLabel(test,new CurrentUser());
        //panel.add(test);
        test.setPreferredSize(new Dimension(100,500));

        JScrollPane scroller = new JScrollPane(test);

        scroller.setSize(120, 240);

        scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        //scroller.setBorder(null);
        //panel_1.add(panel_2);

        panel.add(scroller);

        JPanel panel_3 = new JPanel(new GridLayout(0,1));
        //panel_3.setLayout(new BoxLayout(panel_3,BoxLayout.Y_AXIS));

        panel_3.setBorder(new LineBorder(new Color(0, 0, 0), 2, true));
        panel_3.setBounds(120, 0, 350, 244);

        ArrayList <AbstractMessage>list=new ArrayList <AbstractMessage>();
        for( int j=0;j<10;j++)
        {
        list.add(new TextMessage("mike", "none", new Date(), "Hello World"));
        list.add(new TextMessage("none", "mike", new Date(), "Hey!"));
        }
        panel_3=messagesToPanel(panel_3,list,new CurrentUser());

        /*

        panel_3.add(messageToPanel(new TextMessage("mike", "none", new Date(), "Hello World"),new CurrentUser()));
        panel_3.add(messageToPanel(new TextMessage("none", "mike", new Date(), "Hey!"),new CurrentUser()));
        panel_3.add(messageToPanel(new TextMessage("mike", "none", new Date(), "Hello World"),new CurrentUser()));
        panel_3.add(messageToPanel(new TextMessage("none", "mike", new Date(), "Hey!"),new CurrentUser()));
        panel_3.add(messageToPanel(new TextMessage("mike", "none", new Date(), "Hello World"),new CurrentUser()));
        panel_3.add(messageToPanel(new TextMessage("none", "mike", new Date(), "Hey!"),new CurrentUser()));
        panel_3.add(messageToPanel(new TextMessage("mike", "none", new Date(), "Hello World"),new CurrentUser()));
        panel_3.add(messageToPanel(new TextMessage("none", "mike", new Date(), "Hey!"),new CurrentUser()));
        panel_3.add(messageToPanel(new TextMessage("mike", "none", new Date(), "Hello World"),new CurrentUser()));
        panel_3.add(messageToPanel(new TextMessage("none", "mike", new Date(), "Hey!"),new CurrentUser()));
        panel_3.add(messageToPanel(new TextMessage("mike", "none", new Date(), "Hello World"),new CurrentUser()));
        panel_3.add(messageToPanel(new TextMessage("none", "mike", new Date(), "Hey!"),new CurrentUser()));
        */
        JScrollPane scroller2 = new JScrollPane(panel_3);
        scroller2.setSize(330, 200);
            //scroller.setLocation(108, 12);
            scroller2.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
            scroller2.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
            //scroller2.setLocation(100, 20);
            scroller2.setBorder(null);

            scroller2.setBounds(120, 0, 330, 200);

            JScrollBar vertical2 = scroller2.getVerticalScrollBar();    
            vertical2.setMaximum(list.size()*40);

            vertical2.setValue(list.size()*40);         
            panel.add(scroller2);
    }
    public JPanel messageToPanel(AbstractMessage am,AbstractUserInfo user)
    {   

         JPanel messagePanel=null;

      switch(am.getType()) {
      case Text:
          messagePanel= new JPanel();
         messagePanel.setPreferredSize(new Dimension(350,40));
         if(user.getUserid().equals(am.getSenderid()))
                {messagePanel.setBackground(Color.BLUE);}
         else {
            messagePanel.setBackground(Color.RED);
         }
         messagePanel.add(new JLabel(AbstractMessage.getTextMessage(am).getText_content()));
         break;       
      }               
    return messagePanel;
    }

    public JPanel onlineUserToLabel(JPanel panel,AbstractUserInfo a)
    {   
        //panel.add(BorderLayout.CENTER, scroller);

          for (int i=0; i<30; i++) {

              JLabel lab = new JLabel(a.getPseudo().concat(" (").concat(a.getUserid().concat(") ")));
              lab.setBounds(0, i*20, 100, 20);
              panel.add(lab);
          }
        return panel;
        }   

    public JPanel messagesToPanel(JPanel panel,ArrayList<AbstractMessage> a,AbstractUserInfo user)
    {       
        //panel.add(BorderLayout.CENTER, scroller);
            int i=0;
          for( AbstractMessage am :a)
          {
              JPanel mP=messageToPanel(am,user);
              mP.setBounds(0,40*i,350,40);
              i++;
              panel.add(mP);
          }

        return panel;
        }   
}
...