在JScrollPane和JPanel中设置JTable的大小,使用JFrame的大小

use*_*818 2 java swing jtable jscrollpane preferredsize

我希望桌子的宽度与框架的宽度相同,当我调整框架大小时,桌子也需要调整大小.我想setSize()JTable不正常工作.你能帮助我吗?

import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;

public class Main extends JFrame {

    public Main() {
        setSize(400, 600);
        String[] columnNames = {"A", "B", "C"};
        Object[][] data = {
            {"Moni", "adsad", 2},
            {"Jhon", "ewrewr", 4},
            {"Max", "zxczxc", 6}
        };

        JTable table = new JTable(data, columnNames);
        JScrollPane tableSP = new JScrollPane(table);

        int A = this.getWidth();
        int B = this.getHeight();

        table.setSize(A, B);
        JPanel tablePanel = new JPanel();
        tablePanel.add(tableSP);
        tablePanel.setBackground(Color.red);

        add(tablePanel);
        setTitle("Marks");

        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                Main ex = new Main();
                ex.setVisible(true);
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

mKo*_*bel 13

看看

table.setPreferredScrollableViewportSize(table.getPreferredSize());
table.setFillsViewportHeight(true);
Run Code Online (Sandbox Code Playgroud)

对于您在此处发布的代码


Rob*_*bin 7

摆脱所有的setSize电话.然后摆脱tablePanel,只是在tableSP直接的内容窗格中JFrame.

JFrame默认情况下,a的内容窗格具有a BorderLayout,并且向其添加组件BorderLayout#CENTER(当您只使用add不带约束时,这是默认设置)将确保该组件采用父容器的大小.

快速调整您的代码

public class Main extends JFrame {

    public Main() {
        String[] columnNames = {"A", "B", "C"};
        Object[][] data = {
            {"Moni", "adsad", 2},
            {"Jhon", "ewrewr", 4},
            {"Max", "zxczxc", 6}
        };

        JTable table = new JTable(data, columnNames);
        JScrollPane tableSP = new JScrollPane(table);
        tableSP.setPreferredSize( 400, 600 );

        add(tableSP);
        setTitle("Marks");

        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        pack();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                Main ex = new Main();
                ex.setVisible(true);
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

小旁注:没有理由延长JFrame.只需使用一个