gpt4 book ai didi

Java swing - 可滚动 GridLayout 中的项目不可见

转载 作者:行者123 更新时间:2023-12-02 03:28:27 25 4
gpt4 key购买 nike

我正在尝试创建一个简单的 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");
}

}

非常感谢任何帮助!

最佳答案

您正在将 JPanel 添加到 JScrollPane,这是您永远不应该做的事情。您需要使用 JPanel 设置视口(viewport) View ,以便将其添加到 JScrollPane 的视口(viewport)中,如 JScrollPane 教程和 API 所解释的那样。所以不是

scrollpane.add(stretchPanel);

而是

scrollpane.setViewportView(stretchPanel);

其他问题:

  • 为什么要创建自己的 JScrollBar 而不是使用 JScrollPane 提供的默认 JScrollBar?
  • 由于您要显示 JTextField 网格,也许您应该创建并显示 JTable。

关于Java swing - 可滚动 GridLayout 中的项目不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38437217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com