爪哇 - 自动滚动通过增加更多的JPanels于母公司的JPanel

问题描述 投票:-1回答:2

我只是学习创建使者例如App。我设置父JPanel的布局GridLayout网格。

现在我想的JPanel显示滚动条时,我添加更多JPanels超过父JPanel的大小。

我试着将它添加到ScrollPane中,但它不工作娄是一个示例图像,

很抱歉,如果我的问题是不能完全解释的。我会尝试,如果需要更多的解释。

enter image description here

java swing jpanel jscrollpane
2个回答
0
投票

路上,我看到它,你的情况与BoxLayout(用小“伎俩”)内Y_AXIS一个BorderLayout会更优雅。看看下面SSCCE:有一行为了回答你的问题,以网格布局发表评论。

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;

import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
import javax.swing.border.LineBorder;

public class ChatFrame extends JFrame {
    static int x = 1;

    public ChatFrame() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(500, 500);
        setLocationRelativeTo(null);

        getContentPane().setLayout(new BorderLayout());
        JPanel gridPanel = new JPanel(new GridLayout(0, 1));
        // Comment the following line to see behavior with grid layout
        gridPanel.setLayout(new BoxLayout(gridPanel, BoxLayout.Y_AXIS));

        final JScrollPane sp = new JScrollPane(gridPanel);
        getContentPane().add(sp);

        final String helloWorld = "Hello world, ";
        Timer t = new Timer(1000, e -> {
            ChatPanel cp = new ChatPanel(helloWorld + (x++));
            gridPanel.add(cp);
            // Scroll to the last chat.
            sp.getVerticalScrollBar().setValue(sp.getVerticalScrollBar().getMaximum());
            gridPanel.repaint();
            gridPanel.revalidate();
        });
        t.start();
    }

    private static class ChatPanel extends JPanel {
        public ChatPanel(String chat) {
            super(new BorderLayout());
            setBorder(new LineBorder(Color.red));
            JLabel chatLabel = new JLabel(chat);
            add(chatLabel, BorderLayout.CENTER);
            // a kind of "trick"
            setMaximumSize(new Dimension(getMaximumSize().width, getPreferredSize().height));
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new ChatFrame().setVisible(true));
    }
}

预习:

enter image description here


0
投票

每个人都试图解决我的问题,但在我的情况下,它并不能帮助我。所以我尝试一切可能的事情,我可以。

因为我看到scrollBarJScrollPanel出现根据JPanel的大小,所以我试图增加JPanel的大小,这解决了我的问题。下面是我所说的例子和说明。

加入所有JPanels到父JPanel后,我配置父heightJPanel到{父heightJPanel +(子heightJPanel * number of msgs)}

考虑下面的代码:

msgPanel.setPreferredSize(new Dimension(268,418+(new msg().getPreferredSize().height*(msgs.length-4)));

这里的-4是做可以容纳父JPanels的默认大小JPanel的默认号码

© www.soinside.com 2019 - 2024. All rights reserved.