swing JAVA JScrollPane未显示
我有一个带有滚动条的JPanel,我想向它添加很多JLabel。但是滚动条不起作用。我无法使用滚动条,即使面板已满,也不会滚动。这是我的密码:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Scroll {
public static void main(String[] args) {
JPanel panel = new JPanel(new GridLayout(0,1));
JPanel p = new JPanel(new BorderLayout());
JScrollPane scroll = new JScrollPane(panel);
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
p.add(scroll, BorderLayout.NORTH);
JButton but = new JButton("OK");
p.add(but, BorderLayout.SOUTH);
but.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
panel.add(new JLabel("Some random text"));
scroll.revalidate();
p.repaint();p.revalidate();
}
});
JFrame frame = new JFrame();
frame.setSize(800,200);
frame.setVisible(true);
frame.add(p);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
}
}
# 1 楼答案
如前所述,您可能应该使用
JList
或JTable
来实现您的用例关于这个问题,这是因为除了
CENTER
之外的所有BorderLayout
约束将扩展到其组件所占的空间,即使这意味着它们将扩展到屏幕边界之外(在您的例子中,NORTH
部分在每次单击按钮后都会向南扩展)要解决此问题,请明确指定组件的首选尺寸,如果使用
BorderLayout
将组件添加到非中心面板部分,这些组件可能会无限增长:我在这里使用
-1
表示它不重要(我可以使用任何其他值),因为布局管理器无论如何都会忽略它(使用BorderLayout.NORTH
组件被水平拉伸以占据所有可用的水平空间)# 2 楼答案
你的问题似乎在于你的布局经理。我认为当你不使用BorderLayout时,BorderLayout的行为会很奇怪。中间位置。我换了线
到
然后,为了使文本从顶部而不是居中显示,我将面板组件的布局管理器更改为BoxLayout。发件人:
到
这似乎给了我你想要的功能。让我知道这是否解决了你的问题