当前位置: 首页 > 知识库问答 >
问题:

JScrollPane,添加到JPanel还是JTable?

濮波
2023-03-14

我已经在这个问题上搜索了几个小时,但似乎没有任何效果。

我有一个JTable,框架内有一个JPanel。该表包含来自数据库的数据,但要存储大量数据(因此需要JScrollPane)

下面是我的代码:

public GeneralDisplay()
{
    Insets insets = getInsets();

    panel = new JPanel();
    scrollVert = new JScrollPane(panel);
    scrollVert.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

    scrollHor = new JScrollPane(panel);
    scrollHor.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

    newSoftwareBtn = new JButton("New");
    removeSofwtareBtn = new JButton("Remove");
    editSofwtareBtn = new JButton("Edit");

    ResultSet results;

    try
    {
        results = statement.executeQuery("SELECT * FROM Software");

        cSoftware = new JTable(buildTableModel(results));
    }
    catch(SQLException sqlEx)
    {
        JOptionPane.showMessageDialog(null, "Error: SQL error!");
        //System.exit(1);
    }

    ///////////////////////////////////////////////////
    //Adding to form
    ///////////////////////////////////////////////////

    getContentPane().add(panel);
    cSoftware.setBackground(null);
    cSoftware.getTableHeader().setBackground(null);
    //pack();

    panel.add(scrollVert);
    panel.add(scrollHor);
    panel.add(cSoftware.getTableHeader());
    panel.add(cSoftware);
    panel.add(newSoftwareBtn);
    panel.add(removeSofwtareBtn);
    panel.add(editSofwtareBtn);
    panel.add(scrollVert);
    panel.add(scrollHor);

    panel.revalidate();
    panel.repaint();

    //////////////////////////////////////////////////////

    //////////////////////////////////////////////////////
    //Position on form
    //////////////////////////////////////////////////////

    Dimension size = newSoftwareBtn.getPreferredSize();
    newSoftwareBtn.setBounds(5 + insets.left, 480 + insets.top, size.width, size.height);

    size = removeSofwtareBtn.getPreferredSize();
    removeSofwtareBtn.setBounds(55 + insets.left, 480 + insets.top, size.width, size.height);

    size = editSofwtareBtn.getPreferredSize();
    editSofwtareBtn.setBounds(105 + insets.left, 480 + insets.top, size.width, size.height);

我的代码可能不是很好,因为我已经遵循了几个关于如何克服这个问题的教程,并将它们混合在一起。

任何帮助都很感激!

编辑:

共有1个答案

岳英锐
2023-03-14

首先,您不需要创建两个JScrollPanes来同时拥有垂直和水平滚动条。

就ScrollPane与其他组件分离而言,您需要将JTable添加到ScrollPane,然后将其添加到JPanel。类似于这样:

JScrollPane scrollPane = new JScrollPane();
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

scrollPane.add(cSoftware);
panel.add(scrollPane);
//add buttons etc

在您的原始代码中,您向JPanel添加了您的(空的)ScrollPanels和您的表。

 类似资料:
  • 问题内容: 我有一个gui,它的Panel包含一系列标签和TextField,并使用spring布局(这是mainPanel),而另一个Panel仅包含button(buttonPanel)。我正在尝试使我的mainPanel也具有垂直滚动条。我想实现我的GUI,以便在JFrame中有2个面板。mainPanel出现在框架的顶部,而buttonPanel出现在mainPanel的下方。 我的问题是

  • 我目前有一个主JFrame包含几个JPanels,每个面板中都有一些文本。创建JPanels的代码在一个单独的类中(它“实现”JPanels)。如何仅向单个面板添加JScrollPane? 我已经花了一些时间尝试这样做,但什么也没有发生。顺便说一下,我的JPanel使用GridLayout 上面的类是另一个面板类的实例变量,它是主面板“MenuHold”的实例变量。但使用“MenuHolder”的

  • 我目前正在尝试使用Swift中的GridBagLayout构建GUI。 在尝试为我正在处理的项目制作GUI时,遇到了一个问题: 创建物品列表时,面板超过了我的屏幕高度,因此我将框架的首选大小设置为900像素。 但是,该列表的高度超过900像素。因此,我尝试将一个JScrollPane添加到包含列表的面板中。只是没有一个。 我的框架架构是这样的:框架f- 我将ScrollPane应用于这些对象中的任

  • 因此,我的问题是面板被插入到JScrollPane中,这些面板的大小正在减小,但没有滚动条。 这是我的代码,我已经播种很远:

  • 我有一个JFrame(黑色)包含一个主JPanel(灰色),这个JPanel包含另外三个JPanels:North和South(红色)以及Center(蓝色)。中央的蓝色JPanel将在程序过程中动态添加大量的JPanel(绿色)。当中心JPanel已满时,我希望一个JScrollbar自动出现,向下滚动中心面板,并看到它包含的所有子(绿色)面板。谁能帮帮我吗?问题是滚动条根本没有出现,如果我在蓝

  • 我试图将JTable添加到JScrollPane中。但是做完这个我就看不到桌子了。 我怎么了?