【问题标题】:How to fit a JTable into a JPanel and make it auto resizeable?如何将 JTable 放入 JPanel 并使其自动调整大小?
【发布时间】:2012-04-09 07:25:19
【问题描述】:

我正在将 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);
        }
    }

【问题讨论】:

    标签: swing jtable jframe jpanel grid-layout


    【解决方案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);
                }
            });
        }
    

    【讨论】:

    • 注意您的(显式)GridLayout 和示例的(隐式)FlowLayout 之间的区别。
    • 如果在 JPanel 中添加 JButton,JButton 将占据 JPanel 的整个空间,并且当您调整窗口大小时,JButton 也会自动调整大小占用。我想对我的 JTable 做同样的事情,完全适合 JPanel 并自动调整大小。
    • 你可能需要一个组件网格;以上。
    猜你喜欢
    • 2013-09-28
    • 2016-11-05
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 2010-11-10
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多