如何将JTable装入JPanel并使其可自动调整大小?

时间:2012-04-09 07:25:19

标签: swing jtable jframe jpanel grid-layout

我将JTable添加到使用GridLayout的JPanel中,但是我没有像添加JButton时那样得到相同的行为...

我想知道如何使用JTable获得相同的自动调整大小行为,就像将JButton添加到使用GridLayout的JPanel中一样,并且我希望该表使用面板的整个空间。

对不起拼写,英语不是我的母语。希望你们能帮助我!

这是我的代码:

    import javax.swing.*;
    import java.awt.*;

    class Frame extends JFrame {

        private JPanel center;
        private JTable table;

        public Frame(){
            super("Test Jtable");
            this.setLayout(new BorderLayout());        

            this.center = new JPanel(); 
            this.center.setLayout(new GridLayout());

            this.table = new JTable(50,50);
            this.table.setGridColor(Color.black);
            this.table.setCellSelectionEnabled(true);                      

            this.center.add(this.table);
            this.add(this.center,BorderLayout.CENTER);
        }
    }

    public class TestFrame {

        public static void main(String... args) {
            Frame f =new Frame();
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.setSize(400,400);
            f.setVisible(true);
        }
    }

1 个答案:

答案 0 :(得分:1)

将表格添加到滚动窗格,如example

所示
this.center.add(new JScrollPane(this.table));

附录:我使用pack()提倡这样的事情;其他安排是可能的,但不太可用。 setPreferredScrollableViewportSize()方法也可能有所帮助。

import javax.swing.*;
import java.awt.*;

class Frame extends JFrame {

    private JPanel center;
    private JTable table;

    public Frame() {
        super("Test Jtable");
        this.setLayout(new BorderLayout());
        this.center = new JPanel();
        this.center.setLayout(new GridLayout());
        this.table = new JTable(50, 10);
        this.table.setGridColor(Color.black);
        this.table.setCellSelectionEnabled(true);
        this.center.add(this.table);
        this.add(new JScrollPane(this.center), BorderLayout.CENTER);
    }
}

public class TestFrame {

    public static void main(String... args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                Frame f = new Frame();
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                f.pack();
                f.setVisible(true);
            }
        });
    }