簡體   English   中英

在動態JPanel中添加JScrollPane

[英]Adding a JScrollPane in a dynamic JPanel

我試圖用JScrollPane包圍一個JPanel ,但它只是不會顯示,為什么呢? 我的JPanel由動態創建的組件組成。 每當用戶單擊按鈕時,將創建一個新組件,從而使JPanel更大(通過設置PrefferedSize )。 JScrollPane不會顯示。 請幫忙。 謝謝。

scrpOfPanel = new JScrollPane();
    scrpOfPanel .setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
    scrpOfPanel .setBounds(54, 180, 565, 400);
    panel.add(scrpOfPanel);

    panel = new JPanel();

    panel.setBackground(Color.WHITE);
    panel.setPreferredSize(new Dimension (450, 50));
    panel.setLayout(null);

    scrpOfPanel .setViewportView(panel);
    lblAdd = new JLabel();
    lblAdd.setBounds(420, 6, 38, 25);
    lblAdd.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {
            count++;
            txtItem= new JTextField();
            txtItemNumber = new JTextField();
            lblRemove = new JLabel();
            l
            panel.add(txtItem);
            panel.add(txtItemNumber);
            panel.add(lblRemove);
            if(count>0){
                x+=30;
                y+=30;
                lblRemove.setBounds(420,6+y, 125, 25);
                txtItem.setBounds(225,6+y, 182, 27);
                txtItemNumber.setBounds(35, 6+y, 182, 27);

                if(panel.getComponentCount() >9){

                panel.setPreferredSize(new Dimension(100+y,50+y));
                panel.add(txtItem);
                panel.add(txtItemNumber);
                panel.add(lblRemove);

                }
            }

        }

    });

    panel.add(lblAdd);

不要使用null布局。 Swing旨在與布局管理器一起使用。

從我在代碼中可以看出,每次單擊按鈕時,您都會向面板添加一行3個組件。

使用布局管理器可以很容易地降低這一點。 也許從使用垂直BoxLayout的主面板開始。 然后,當您單擊按鈕時,您將創建一個使用水平BoxLayout的面板,並將3個組件添加到此面板。 然后將此面板添加到主面板。

然后你需要使用:

mainPanel.revalidate();
mainPanel.repaint();

確保調用布局管理器並重新繪制組件。 然后布局管理器將為您管理首選大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM