【问题标题】:Swing Dynamic JTable creationSwing 动态 JTable 创建
【发布时间】:2014-03-14 08:40:15
【问题描述】:

我想根据输入动态创建表。如果输入为 5,则将有 5 个JTables,然后我应该能够唯一地识别这 5 个表,以便之后我可以单独处理这 5 个表。

我在做

table=new Jtable()

,但我想要

table1=new Jtable(),table2=new Jtable(),table3=new Jtable()

依此类推自动生成。I输入上限为18。

我该怎么做?

【问题讨论】:

标签: java swing dynamic jtable


【解决方案1】:

试试这样的东西(未经测试):

ArrayList<JTable> tables = new ArrayList<JTables>();
for(int i=0; i<5; i++) {
  tables.add(new JTabel());
}

【讨论】:

    【解决方案2】:

    这个呢:

    ArrayList<JTable> tables = new ArrayList<JTable>();
    for (int i = 0; i < 18; i++) {
        tables.add(new JTable());
    }
    
    private JComponent createGUI() {
        JPanel pnl = new JPanel();
        for (JTable jTable : tables) {
            pnl.add(jTable);
        }
        return pnl;
    }
    

    更新示例:

    public class Display extends JFrame {
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    new Display().setVisible(true);
                }
            });
        }
    
        private ArrayList<JTable> tables = new ArrayList<JTable>(){{
            for (int i = 0; i < 18; i++) {
                add(new JTable(new DefaultTableModel(3,3)));
            }
        }};
    
        public Display() {
            super("Title");
            this.setSize(832, 594);
            this.setLocationRelativeTo(null); // to center frame on screen
            this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    
            JPanel content = new JPanel();
            content.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
            content.setLayout(new BoxLayout(content, BoxLayout.PAGE_AXIS));
            for (JTable table : tables) {
                content.add( createGUI(table) );
            }
    
            this.getContentPane().setLayout(new BorderLayout());
            this.getContentPane().add(content, BorderLayout.CENTER);
        }
    
        private JPanel createGUI(JTable table) {
            JPanel pnl = new JPanel(new BorderLayout());
            pnl.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
            pnl.add(table.getTableHeader(), BorderLayout.NORTH);
            pnl.add(table, BorderLayout.CENTER);
            return pnl;
        }
    
    }
    

    【讨论】:

    • @oliholz。谢谢你的回复。我给你看代码,我哪里出错了。代码如下:setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);设置边界(100、100、832、594); contentPane = new JPanel(); contentPane.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));设置内容窗格(内容窗格); contentPane.setLayout(null);
    • 。非常感谢您的帮助。解决方案很接近。现在让我深入了解我的问题,也许你会明白我真正想要什么。我需要 8 个名为 Retailer1 的表,零售商 2 等等,4 个批发商表作为批发商 1,批发商 2,2 个分销商表和 1 个工厂表。现在每个表将相互交互以填充单元格。我将直接在单元格中输入一些内容,对于一些将是计算并且单元格将被相应地填充。类似于 Microsoft Excel。那么我该怎么做呢?表格应该有唯一的名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-04
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多