我正在尝试创建一个简单的Swing UI,它显示一个文本区域列表,所有这些都在彼此之下。 我想要一个滚动条,允许我在列表中垂直滚动。
但是,我似乎无法使网格中的条目可见并保持这种状态。
似乎条目出现了几分之一秒然后再次消失。我根本无法理解它。
这是我的代码:
public class MyWindow extends JFrame {
JPanel stretchPanel;
JScrollPane scrollpane;
JPanel centrePanel;
JScrollBar scrollbar;
public MyWindow(String title) {
super(title);
BorderLayout layout = new BorderLayout();
setLayout(layout);
stretchPanel = new JPanel();
scrollpane = new JScrollPane();
stretchPanel.setLayout(new FlowLayout());
centrePanel = new JPanel();
centrePanel.setLayout(new GridLayout(0, 1));
scrollbar = new JScrollBar(JScrollBar.VERTICAL);
scrollpane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scrollpane.setVerticalScrollBar(scrollbar);
scrollpane.setViewportView(stretchPanel);
stretchPanel.add(centrePanel);
scrollpane.add(stretchPanel);
add(scrollpane, BorderLayout.CENTER);
fillGrid();
setVisible(true);
}
public void fillGrid() {
centrePanel.removeAll();
for (int i = 0; i < 20; i++) {
TextField entry = new TextField("Hello");
centrePanel.add(entry);
}
scrollpane.setPreferredSize(new Dimension(800, 700));
pack();
}
public static void main(String[] args) {
new MyWindow("d");
}
}
非常感谢任何帮助!
答案 0 :(得分:2)
您正在将您的JPanel添加到JScrollPane,这是您永远不应该做的事情。您需要使用JPanel设置视图端口视图,以便将其添加到JScrollPane的视口中,如JScrollPane教程和API解释。所以不是
scrollpane.add(stretchPanel);
而是
scrollpane.setViewportView(stretchPanel);
其他问题: