Java GUI:將JPanel添加進JScrollPane


實現的目標:

因為在滾動框中含有很多個Java GUI 組件,因此這里采用JPanel面板包住這些組件,在用JScrollPane實現滾動

問題1:布局揉在一起

JPanel有自己默認的布局方式,因此在這里我們要自己設置流式布局

jPanel_qanda.setLayout(null);

問題2:滾動條未生效

剛開始的時候我是直接設置JPanel的大小 setSize(int width, int height) 不管設置多大,都沒有滾動條

最后百度,看到了一個博客:https://www.cnblogs.com/tianguook/archive/2012/03/21/2410807.html

jPanel_qanda.setPreferredSize(new Dimension(800,1000));

滾動條出現!

問題3:組件不顯示

PS:今天在寫GUI的時候,因為粗心,出現了一個問題:

容器add組件后,運行時不出現,當鼠標移動到目標位置時,組件才浮現出來

原因:setBounds 寫在了 add方法的前面去了

貼一下所有代碼,自用的,有點亂:

  public static void qanda(){
        final JFrame frame=menu(new JFrame());
        user.setNickname("zs");
        user.setRole(1);
        
        List<Qanda> questions=qandaDao.getQuestions();
        
        JButton jButton_ask=new JButton("Ask Question");
        frame.add(jButton_ask);
        jButton_ask.setBounds(440, 200, 120, 30);
        jButton_ask.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                
            }
        });
        
        JPanel jPanel_qanda=new JPanel();
        jPanel_qanda.setPreferredSize(new Dimension(800,150*questions.size()));
        jPanel_qanda.setLayout(null);
        for (int i = 0; i < questions.size(); i++) {
            String name=questions.get(i).getName();
            String time=questions.get(i).getTime();
            String content=questions.get(i).getContent();
            
            JLabel jLabel_name=new JLabel("Name:"+name);
            jPanel_qanda.add(jLabel_name);
            jLabel_name.setBounds(20, 20+150*i, 60, 20);
            JLabel jLabel_time=new JLabel("Time:"+time);
            jPanel_qanda.add(jLabel_time);
            jLabel_time.setBounds(220, 20+150*i, 160, 20);
            JButton jButton_answer=new JButton("Answer");
            jPanel_qanda.add(jButton_answer);
            jButton_answer.setBounds(420, 20+150*i, 120, 30);
            jButton_answer.addActionListener(new ActionListener() {
                
                @Override
                public void actionPerformed(ActionEvent e) {
                    // TODO Auto-generated method stub
                    
                }
            });
            
            JButton jButton_check=new JButton("Check");
            jPanel_qanda.add(jButton_check);
            jButton_check.setBounds(620, 20+150*i, 120, 30);
            jButton_check.addActionListener(new ActionListener() {
                
                @Override
                public void actionPerformed(ActionEvent e) {
                    // TODO Auto-generated method stub
                    
                }
            });
            JTextArea jTextArea_content=new JTextArea(content);
            jPanel_qanda.add(jTextArea_content);
            jTextArea_content.setBounds(20, 50+150*i, 740, 80);
        }
        
        JScrollPane jScrollPane_userInfo=new JScrollPane(jPanel_qanda,ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
                ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
        frame.add(jScrollPane_userInfo);
        jScrollPane_userInfo.setBounds(100, 250, 800, 200);
        jScrollPane_userInfo.setFont(new Font("Dialog", 0, 20));
    }
    /**
     * 用戶信息
     */
    public static void userInfo(){
        JFrame frame=new JFrame();
        user.setNickname("zs");
        frame.setSize(1000,600);
        frame.setVisible(true);
        frame.setResizable(false);
        frame.setLocation((Toolkit.getDefaultToolkit().getScreenSize().width-400)/2,
                (Toolkit.getDefaultToolkit().getScreenSize().height-320)/2);
        frame.setTitle("Notice");
        frame.setLayout(null);
        frame=menu(frame);
        List<User> users=userDao.getUsers();
        String[][] userInfos=new String[users.size()][4];
        for(int i=0;i<users.size();i++){
            userInfos[i][0]=users.get(i).getNickname();
            userInfos[i][1]=users.get(i).getAccount();
            userInfos[i][2]=users.get(i).getEmail();
            if(users.get(i).getRole()==0){
                userInfos[i][3]="Student";
            }else{
                userInfos[i][3]="Teacher";
            }
        }
        String[] header=new String[]{"Name","Account","Email","Role"};
        JTable jTable_userInfo=new JTable(userInfos,header);
        JScrollPane jScrollPane_userInfo=new JScrollPane(jTable_userInfo,ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
                ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
        frame.add(jScrollPane_userInfo);
        jScrollPane_userInfo.setBounds(100, 200, 800, 200);
        jScrollPane_userInfo.setFont(new Font("Dialog", 0, 20));
        
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM