2

我有将 JTextFields @runtime 添加到 JPanel 的 Java 应用程序。基本上用户单击一个按钮并添加新的 JTextField,再次单击再次添加...

每个新的 JTextField 都位于前一个的正下方。显然我很快就用完了空间,所以我正在尝试使用 JScrollPane,这就是地狱开始的地方,因为无论我尝试什么,它都不起作用。

  1. 右键单击 JPanel 并包含在滚动窗格中。没用。
  2. 在阅读了一些示例后,我意识到我必须将 JPanel 作为 JScrollPane 构造函数的参数。我通过右键单击 ScrollPane 和 CustomizeCode 来做到这一点。因为显然自动生成的代码在 NetBeans 中受到保护,我不能手动更改所有这些声明等。还是不行。
  3. 我确实尝试将 JPanel 和/或 JScrollPane 的 PreferedSize 设置为 null,但没有帮助。
  4. JScrollPane 是我们称之为 TabJPanel 的子项(它又是 TabbedPane 的一个选项卡)。我试图弄乱他们的关系,基本上尝试了 JFrame、JPanel(持有文本字段)、TabJPanel 和 JScrollPane 之间所有可能的亲子关系,但没有任何效果。
  5. 我还让 VerticalScrollBar“始终可见”,以防万一。所以我看到了滚动条,只是用 JTextFields 填充 JPanel 不会影响它。
  6. 当 JTextFields 太多时,它们会“低于”JPanel 的底部边框,我再也看不到它们了。

添加新 JTextFields 的代码是这样的,以防万一。

JTextField newField = new JTextField( columns );
Rectangle coordinates = previousTextField.getBounds();
newField.setBounds(coordinates.x , coordinates.y + 50, coordinates.width, coordinates.height);

JPanel.add(newField);
JPanel.revalidate();
JPanel.repaint();

很抱歉,我只是想提供尽可能多的信息,因为作为新手,我不知道什么是完全相关的,什么不是。提前致谢 :)

4

3 回答 3

2

由于现在有另一个答案,我也在添加我的建议。

这听起来就像在JTable单列中使用 a 的问题。尚不可编辑JList(并且可能永远不会)。

JTable将为您处理布局问题,您可以通过表格轻松访问这些值。

使用你自己的TableModel(在你的情况下一个简单的Vector就足够了),并为它添加值。

于 2010-01-13T06:57:53.467 回答
0

您可以选择使用LayoutManager,而不是直接在组件上设置边界。为了测试这一点,一个简单的单列GridLayout将对齐设置为垂直应该证明这个概念。

panel.setLayout(new GridLayout(0,1));

参数中的零rows允许根据需要将行添加到布局中。

于 2010-01-13T06:48:59.280 回答
0

我这样做是为了添加一个滚动窗格,创建一个面板并用几个组件填充它,然后在要添加它的组件中创建一个滚动窗格,剪切并粘贴所有细节将落入的面板并调整滚动窗格的大小。由于组件占用的空间比在滚动窗格上右键单击并选择设计此容器的可见空间要大,因此您可以增加滚动窗格的大小并添加尽可能多的组件。

于 2013-05-26T15:51:39.100 回答