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

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

Barbara Streisand
Release: 2024-12-07 02:25:18
Original
592 people have browsed it

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

JTable Not Displaying in JFrame (Java)

Problem:

A JTable is not appearing within a JFrame, despite being added to it.

Investigation:

The code provided attempts to add the JTable to the JFrame using add(tbl_Accounts) and add(scrollPane). However, the problem seems to lie elsewhere.

Root Cause:

As mentioned in the comments, the use of setLayout(null) can cause issues with component placement. While the table is added to the JFrame, it is not being shown due to incorrect layout management.

Solution:

To resolve this, a proper layout manager should be used. In this example, a combination of BorderLayout and GridLayout can be employed.

Revised Code:

The following revised code uses a GridLayout for the main panel, a BorderLayout for the top panel, and a BoxLayout for the bottom panel:

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);
    }
}
Copy after login

In this updated code, the BoxLayout has been removed. This allows the components in the bottomPane to be arranged in a more grid-like manner. The BorderLayout in the frame has been used for the topPane and tablePane components, allowing for easy placement of these elements.

With these changes, the JTable should now display correctly within the JFrame.

The above is the detailed content of Why Isn't My JTable Showing Up in My JFrame (Java)?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template