有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java所有JPanel都没有显示在我的JFrame中

我在a Jframe上加了3 JPanels。那些JPanels包含O+图像和标签

当我试图显示JFrame时,它没有正确显示所有元素。请帮忙

        JButton next=new JButton("next");
        next.addMouseListener(new MouseListener() {

            @Override
            public void mouseReleased(MouseEvent e) {}
            @Override
            public void mousePressed(MouseEvent e) {}
            @Override
            public void mouseExited(MouseEvent e) {}
            @Override
            public void mouseEntered(MouseEvent e) {}
            @Override
            public void mouseClicked(MouseEvent e) {
                System.out.println("mouse next clicked");
                 nextAction(n, tempList);
            }
        });

        JButton ok= new JButton("ok");
        JLabel pageLabel= new JLabel("page"+x);
        btnPanel.add(pre);
        btnPanel.add(pageLabel);
        btnPanel.add(next);
        okBtn.add(ok,BorderLayout.PAGE_END);
        layout.setHgap(10);
        layout.setVgap(10);
        extPanel.setSize(50,50);
        extPanel.setLayout(layout);

        //frame.setLayout(new FlowLayout());
        //frame.setLayout(new GridLayout());
        //frame.setLayout(new BorderLayout());

        frame.setLayout(new BoxLayout(frame.getContentPane(),BoxLayout.Y_AXIS));
        frame.add(extPanel);
        frame.add(btnPanel);
        frame.add(okBtn,BorderLayout.PAGE_END);

        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

共 (2) 个答案

  1. # 1 楼答案

            Statement st = null;
    
            ResultSet rs = null;
            String url = "jdbc:mysql://localhost:3306/jframe";
            String user = "root";
            String password = "root";
    
            ArrayList<JPanel> panelList =new ArrayList<JPanel>();
    
    
                Class.forName("com.mysql.jdbc.Driver");
                con = DriverManager.getConnection(url, user, password);
                st = con.createStatement();
                String query ="SELECT * FROM sample";
                rs =  st.executeQuery(query);
                int k= 1; 
        if(rs.next()){
    
            do{
    
                JPanel panel1= new JPanel();
                String s1= rs.getString("id");
                String s2= rs.getString("name");
                String s3= rs.getString("path");
                String s4= rs.getString("duration");
                String s5= rs.getString("date");
    
                ImageIcon image = new ImageIcon(s3);
                JLabel idLabel= new JLabel(s1);
                JLabel nameLabel= new JLabel(s2);
                JLabel imageLabel = new JLabel("", image, JLabel.CENTER);
                //JLabel imageLabel= new JLabel(image);
                //imageLabel.setSize(100,100);
    
               //imageLabel.setOpaque(true);
                JLabel durationLabel= new JLabel(s4);
                JLabel dateLabel= new JLabel(s5);
                panel1.add(idLabel);
                panel1.add(imageLabel);
                panel1.add(nameLabel);
                panel1.add(durationLabel);
                panel1.add(dateLabel);
                panel1.setLayout(new FlowLayout());
                panel1.setName("panel"+k);
                //panel1.setSize(10,10);
                //panel1.setBorder(BorderFactory.createLineBorder(Color.blue, 4, true));
                panel1.setBorder(blueBorder);
                panel1.setLayout(new BoxLayout(panel1, BoxLayout.Y_AXIS));
                final JPanel tempPanel= panel1;
    
                panel1.addMouseListener(new MouseListener() {
    
                    @Override
                    public void mouseReleased(MouseEvent arg0) {
                        // TODO Auto-generated method stub
    
                    }
    
                    @Override
                    public void mousePressed(MouseEvent me) {
    
    
                    }
    
                    @Override
                    public void mouseExited(MouseEvent arg0) {
                        // TODO Auto-generated method stub
    
                    }
    
                    @Override
                    public void mouseEntered(MouseEvent arg0) {
                        // TODO Auto-generated method stub
    
                    }
    
                    @Override
                    public void mouseClicked(MouseEvent me) {
                        JPanel test= (JPanel)me.getComponent();
                        MainClass.panelColor(test);
    
                    }
                });
                panelList.add(panel1);
                panelList.size();
                k++;
            }while(rs.next());
    
        }//if
        int i;
        do{
        for (i=0;i<4;i++){
            extPanel.add(panelList.get(i));     
        }//for
        int x=1;
        display(panelList,extPanel,x);
        }while(1<0);
    
    
        }catch(Exception e){
            System.out.println(e);
        }//catch
    }
    public static void nextAction(int n,ArrayList<JPanel> panelList){
        try{
        System.out.println("next action executed");
         extPanel.removeAll();
         btnPanel.removeAll();
         okBtn.removeAll();
        int i;
        for(i=4*n;i<4*(n+1);i++){
            extPanel.add(panelList.get(i)); 
            //Panel2 pan= new Panel2(extPanel);
        }
    
        int x=n+1;
        display(panelList, extPanel, x);
        }catch(Exception e){
            System.out.println(e);
        }
    }   
    
    public static void preAction(int n,ArrayList<JPanel> panelList){
        try{
        System.out.println("next action executed");
         extPanel.removeAll();
         btnPanel.removeAll();
         okBtn.removeAll();
        int i;
        for(i=(n-1)*4;i<4*n;i ){
            extPanel.add(panelList.get(i)); 
        }
    
        int x=n-1;
        display(panelList, extPanel, x);
        }catch(Exception e){
            System.out.println(e);
        }
    }
    public static void display(ArrayList<JPanel> list,JPanel extPanel,int x){
    
        final int n=x;
        int temp=1;
        final ArrayList<JPanel> tempList= list;
        JButton pre=new JButton("previous");
        if(x==1) {
            pre.setVisible(false);
        }
        pre.addMouseListener(new MouseListener() {
    
            @Override
            public void mouseReleased(MouseEvent arg0) {}
            @Override
            public void mousePressed(MouseEvent arg0) {}
            @Override
            public void mouseExited(MouseEvent arg0) {}         
            @Override
            public void mouseEntered(MouseEvent arg0) {}
    
            @Override
            public void mouseClicked(MouseEvent arg0) {
                System.out.println("mouse pre clicked");
                preAction(n, tempList); 
            }
        });
    
    
        JButton next=new JButton("next");
        next.addMouseListener(new MouseListener() {
    
            @Override
            public void mouseReleased(MouseEvent e) {}
            @Override
            public void mousePressed(MouseEvent e) {}
            @Override
            public void mouseExited(MouseEvent e) {}
            @Override
            public void mouseEntered(MouseEvent e) {}
            @Override
            public void mouseClicked(MouseEvent e) {
                System.out.println("mouse next clicked");
                 nextAction(n, tempList);
            }
        });
        JButton ok= new JButton("ok");
        JLabel pageLabel= new JLabel("page"+x);
        btnPanel.add(pre);
        btnPanel.add(pageLabel);
        btnPanel.add(next);
        okBtn.add(ok,BorderLayout.PAGE_END);
        layout.setHgap(10);
        layout.setVgap(10);
        extPanel.setSize(50,50);
        extPanel.setLayout(layout);
    
        //frame.setLayout(new FlowLayout());
        GridLayout gr= new GridLayout(0,1);
        frame.setLayout(gr);
    
        //frame.setLayout(new BoxLayout(frame.getContentPane(),BoxLayout.Y_AXIS));
        frame.add(extPanel);
        frame.add(btnPanel);
        frame.add(okBtn,BorderLayout.PAGE_END);
    
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        temp=x;
        }//method
    public static JPanel expMethod(JPanel jp){
        jp.setBorder(BorderFactory.createLineBorder(Color.red, 4, true));
        return jp;
    }
    
  2. # 2 楼答案

    假设你提到的三个面板是btnPanel,okBtn(?)还有extPanel,包括一个你忘了复制的pre按钮,如果我用SwingUtilities启动你的代码的话。正如npinti评论的那样,invokeLater——我获得了一个小窗口

    enter image description here

    在你的代码中,我用这个替换了。我的主要类测试从JFrame扩展而来

    你说的“正确”到底是什么意思