Set size of JTable in JScrollPane and in JPanel with the size of the JFrame

廉价感情. 提交于 2019-12-06 11:21:41

have look at

table.setPreferredScrollableViewportSize(table.getPreferredSize());
table.setFillsViewportHeight(true);

for the code you posted here

Get rid of all the setSize calls. Then get rid of the tablePanel and just at the tableSP directly to the content pane of the JFrame.

The content pane of a JFrame has by default a BorderLayout, and adding a component to the BorderLayout#CENTER (which is the default when you simply use add without constraints) will make sure the component takes the size of the parent container.

Quickly adjusted your code

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);
            }
        });
    }
}

Small side-note: there is no reason to extend JFrame. Just use one

As an alternative, use GridLayout for your tablePanel and pack() the enclosing Window.

import java.awt.Color;
import java.awt.GridLayout;
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() {
        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(new GridLayout());
        tablePanel.add(tableSP);
        tablePanel.setBackground(Color.red);

        add(tablePanel);
        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);
            }
        });
    }
}

Here is an answer:

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

public class Main extends JFrame {
    JTable table = new JTable();
    DefaultTableModel model = new DefaultTableModel(new Object[][]{},new String[]{"A","B","C"});
    public Main() {
        super("Mark");
        table.setModel(model);
        add(new JScrollPane(table));

   }

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

            public void run() {
                Main ex = new Main();
                ex.setDefaultCloseOperation(EXIT_ON_CLOSE);
                ex.setLocationByPlatform(true);
                ex.pack();
                ex.setVisible(true);
            }
        });
    }
}

Quite simplified, but same. :)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!