java - JScrollPane,添加到JPanel 还是JTable?

标签 java swing jtable jpanel jscrollpane

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

我有一个 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);

enter image description here

在图像中,JScrollPane 在标有红色方 block 的区域中可见。我在表中有更多不可见的数据,这就是为什么我想将 JScrollPane 添加到表中,但我在表下方的面板上也有按钮,这就是我想将它添加到面板中的原因。

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

感谢任何帮助!

编辑:

我注意到我两次将卷轴添加到面板。我现在已经删除了它,但如果那是你认为的那样,我仍然没有解决问题

另一张图片是我在面板上添加 GridLayout 时发生的情况

enter image description here

最佳答案

首先,您无需创建两个 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

在您的原始代码中,您将(空的)ScrollPanel 和表格都添加到了 JPanel。

关于java - JScrollPane,添加到JPanel 还是JTable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32586848/

相关文章:

java - 为什么将方法参数重新分配给局部变量?

java - 在 JFrame 上启用 Split View

java - 为什么 firePropertyChange(String propertyName, Object oldValue, Object newValue) protected 而不是公开的?

java - 基于 TableView 自动更改 TableModel?

java - 如何制作一个可供用户逐个单元选择的 JTable?

java - 向 JTable 中插入一行

java - Spring @valid 不起作用

java - 使用正则表达式验证密码(包含字母和数字以及特殊字符)。{8,}

java - 如何检测重传的数据包以在java中的TCP套接字中丢弃它们

java - 如何在 JTextPane 的同一行显示两个 DIV?