简体   繁体   中英

Create a custom table in java

I would like to create a table looking like this but with the titles in-sync with the table:

在此处输入图片说明

Any tips on how make the columns being aligned with the rows and also allow auto resize in x-axis? For this I used GridBagLayout . Also tried with JTable but had problems to customize it to hide all default JTable components(like in my picture).

public class MyTableExample extends JFrame {

    public MyTableExample(){
        JPanel contentPanel = new JPanel(new GridBagLayout());
        GridBagConstraints c = new GridBagConstraints();
        c.weightx = 1;
        c.fill = GridBagConstraints.HORIZONTAL;
        contentPanel.add(getTitles(),c);
        c.gridy = 2;
        contentPanel.add(getRow(),c);
        c.gridy = 3;
        contentPanel.add(getRow(),c);

        // MainPanel: Helps positioning the contentPanel
        JPanel mainPanel = new JPanel(new GridBagLayout());
        c.weighty = 1;
        c.anchor = GridBagConstraints.NORTH;
        c.insets = new Insets(20,20,20,20);
        mainPanel.add(contentPanel,c);

        this.add(mainPanel);
        this.pack();
        this.setVisible(true);
    }

    private JPanel getRow(){
        JPanel rowPanel = new JPanel(new GridBagLayout());
        GridBagConstraints c = new GridBagConstraints();
        c.weightx = 1;
        c.weighty = 1;
        c.fill = GridBagConstraints.HORIZONTAL;
        c.anchor = GridBagConstraints.WEST;

        rowPanel.setOpaque(false);
        JLabel col1 = new JLabel("#rowItem");
        JComboBox<String> col2 = new JComboBox<String>();
        JButton col3 = new JButton("rowItem");
        JLabel col4 = new JLabel("rowItem");
        rowPanel.add(col1,c);
        rowPanel.add(col2,c);
        rowPanel.add(col3,c);
        rowPanel.add(col4,c);

        return rowPanel;
    }

    private JPanel getTitles(){
        JPanel titlePanel = new JPanel(new GridBagLayout());
        GridBagConstraints c = new GridBagConstraints();
        c.weightx = 1;
        c.weighty = 1;
        c.fill = GridBagConstraints.HORIZONTAL;
        c.anchor = GridBagConstraints.WEST;

        titlePanel.setOpaque(false);
        JLabel t1 = new JLabel("T1");
        JLabel t2 = new JLabel("Title2");
        JLabel t3 = new JLabel("Title33333333");
        JLabel t4 = new JLabel("T4");
        titlePanel.add(t1,c);
        titlePanel.add(t2,c);
        titlePanel.add(t3,c);
        titlePanel.add(t4,c);

        return titlePanel;
    }

    public static void main(String[] args){
        new MyTableExample();
    }
}

If you're okay with all the cells being the same size, GridLayout would be an easy solution. I'm behind the times on what new layouts are available which might be helpful, but GridBag can have a bit of a learning curve to it. If you want everything to line up, you need to have one GridBagLayout, not one per row.

Use a single panel and place all your components directly in this panel, using a GridBagLayout. That way, all the components will be placed in a single grid, and will thus be aligned correctly.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM