Maison > Java > javaDidacticiel > Pourquoi ma JTable n'apparaît-elle pas dans mon JFrame (Java) ?

Pourquoi ma JTable n'apparaît-elle pas dans mon JFrame (Java) ?

Barbara Streisand
Libérer: 2024-12-07 02:25:18
original
596 Les gens l'ont consulté

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

JTable ne s'affiche pas dans JFrame (Java)

Problème :

Une JTable n'apparaît pas dans un JFrame, malgré étant ajouté à it.

Enquête :

Le code fourni tente d'ajouter la JTable au JFrame en utilisant add(tbl_Accounts) et add(scrollPane). Cependant, le problème semble résider ailleurs.

Cause première :

Comme mentionné dans les commentaires, l'utilisation de setLayout(null) peut entraîner des problèmes de placement des composants. Pendant que le tableau est ajouté au JFrame, il n'est pas affiché en raison d'une gestion de mise en page incorrecte.

Solution :

Pour résoudre ce problème, un gestionnaire de mise en page approprié doit être utilisé. Dans cet exemple, une combinaison de BorderLayout et GridLayout peut être utilisée.

Code révisé :

Le code révisé suivant utilise un GridLayout pour le panneau principal, un BorderLayout pour le panneau supérieur et un BoxLayout pour le panneau inférieur :

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);
    }
}
Copier après la connexion

Dans ce code mis à jour, le BoxLayout a été supprimé. Cela permet aux composants du bottomPane d'être disposés de manière plus semblable à une grille. Le BorderLayout dans le cadre a été utilisé pour les composants topPane et tablePane, permettant un placement facile de ces éléments.

Avec ces modifications, le JTable devrait désormais s'afficher correctement dans le JFrame.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal