首页 > Java > java教程 > 为什么我的 JTable 没有出现在我的 JFrame (Java) 中?

为什么我的 JTable 没有出现在我的 JFrame (Java) 中?

Barbara Streisand
发布: 2024-12-07 02:25:18
原创
594 人浏览过

Why Isn't My JTable Showing Up in My JFrame (Java)?

JTable 未在 JFrame (Java) 中显示

问题:

JTable 未出现在 JFrame 中,尽管被添加到

调查:

提供的代码尝试使用 add(tbl_Accounts) 和 add(scrollPane) 将 JTable 添加到 JFrame。然而,问题似乎出在其他地方。

根本原因:

正如评论中提到的,使用 setLayout(null) 可能会导致组件放置问题。虽然表格已添加到 JFrame,但由于布局管理不正确而未显示。

解决方案:

要解决此问题,应该使用适当的布局管理器用过的。在此示例中,可以采用 BorderLayout 和 GridLayout 的组合。

修改后的代码:

以下修改后的代码使用 GridLayout 作为主面板,使用 BorderLayout 作为主面板。顶部面板和底部面板的 BoxLayout:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;

public class JTableFrameExample {

    private JFrame frame;
    private JPanel mainPane;
    private JPanel topPane;
    private JPanel tablePane;
    private JPanel bottomPane;

    // ... (code continues as before)

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new JTableFrameExample().createAndShowGui();
            }
        });
    }

    public void createAndShowGui() {
        frame = new JFrame(getClass().getSimpleName());

        int rows = 30;
        int cols = 3;

        String[][] data = new String[rows][cols];

        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                data[i][j] = i + "-" + j;
            }
        }

        String[] columnNames = { "Column1", "Column2", "Column3" };

        table = new JTable(data, columnNames);

        scroll = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

        table.setPreferredScrollableViewportSize(new Dimension(420, 250));
        table.setFillsViewportHeight(true);

        frame.setLayout(new BorderLayout());

        topPane = new JPanel();
        topPane.setLayout(new BorderLayout());

        JLabel selectAccountLabel = new JLabel("Select Account");
        topPane.add(selectAccountLabel, BorderLayout.WEST);

        JButton selectAccountButton = new JButton("Select Account");
        topPane.add(selectAccountButton, BorderLayout.EAST);

        frame.add(topPane, BorderLayout.NORTH);

        tablePane = new JPanel();
        tablePane.add(scroll);

        frame.add(tablePane, BorderLayout.CENTER);

        bottomPane = new JPanel();
        bottomPane.setLayout(new GridLayout(0, 5, 3, 3));

        // ... (code continues as before)

        frame.add(bottomPane, BorderLayout.SOUTH);

        frame.pack();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
登录后复制

在此更新的代码中,BoxLayout 已已删除。这允许底部窗格中的组件以更像网格的方式排列。框架中的 BorderLayout 已用于 topPane 和 tablePane 组件,可以轻松放置这些元素。

通过这些更改,JTable 现在应该在 JFrame 中正确显示。

以上是为什么我的 JTable 没有出现在我的 JFrame (Java) 中?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板