有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

NetBeans中的Java Swing滚动窗格

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

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

  1. 右键单击JPanel并将其包含在滚动窗格中。没用
  2. 在阅读了一些示例之后,我意识到我必须将JPanel作为JScrollPane构造函数的参数。我是通过右键单击滚动窗格和自定义代码来实现的。因为显然自动生成的代码在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();

抱歉发了这么长的帖子,我只是想提供尽可能多的信息,因为作为一个新手,我不知道什么是完全相关的,什么是不相关的。提前感谢:)


共 (3) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

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

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

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

  3. # 3 楼答案

    由于现在还有另一个答案,我也在补充我的建议

    这听起来很像是一个问题,将JTable与单个列一起使用JListnot yet editable(而且可能永远不会是)

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

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