sinat_38256860
2017-04-14 02:08
采纳率: 33.3%
浏览 2.2k
已采纳

如何在java开发的窗体下插入一个了填写的无限表格?

如何在java开发的窗体下插入一个了填写的无限表格?就像excel表一样?最好能直接插入一个excel表,谢谢大神们了,我是新手好多东西都不懂,希望大神们最好直接发代码,谢谢啦,窗体如下。图片

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • 随风而醒 2017-04-14 02:56
    已采纳
    1. 给你一个最近写的例子参考一下(JTable); (1)
     package com;
    
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.Font;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.util.LinkedList;
    import java.util.List;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.JTextField;
    import javax.swing.table.AbstractTableModel;
    import javax.swing.table.DefaultTableModel;
    
    public class NoPortWindow extends JFrame implements ActionListener {
        // 存储表格信息
    
        // 设置主窗口长和宽
        private static final int WINDOWWIDE = 600;
        private static final int WINDOWHIGH = 420;
    
        // 主窗口对象、右侧图表格式、图表对象
        private JFrame frame = new JFrame();
        private DefaultTableModel tableModel;
        private JTable table = null;
    
        // txt文件对象
        private File file1 = null;
    
        // 标题控件
        private JLabel jText = null;
    
        // 两个文本输入框(输入IP范围)
        private JTextField jTextStart = null;
        private JTextField jTextEnd = null;
    
        // 两个按钮控件(获取IP、端口、mac地址信息;输出txt文件)
        private JButton getItemsBtn = null;
        private JButton outputBtn = null;
    
        // 保存所有的信息条,保存单个信息条
        private List<LinkedList<String>> strList = new LinkedList<LinkedList<String>>();
        private LinkedList<String> infoList = null;
    
        // 主窗口构造方法
        public NoPortWindow() {
            this.liftInformation();// 左侧交互面板
            this.rigthInformation();// 右侧图表显示面板
    
            // 设置主窗口名
            PublicWindowSet.windowAttribute(this, WINDOWWIDE, WINDOWHIGH, "信息查询");
        }
    
        // 左边窗口交互栏
        public void liftInformation() {
            // 1).添加一个文本标签
            jText = new JLabel("请输入IP范围");
            jText.setFont(new Font("宋体", Font.BOLD, 16));
            jText.setBounds(30, 40, 230, 50);
            this.add(jText);
    
            // 2).两个文本输入框
            jTextStart = new JTextField();
            jTextEnd = new JTextField();
    
            jTextStart.setFont(new Font("宋体", Font.BOLD, 16));
            jTextEnd.setFont(new Font("宋体", Font.BOLD, 16));
    
            jTextStart.setBounds(30, 80, 120, 25);
            jTextEnd.setBounds(30, 110, 120, 25);
    
            this.add(jTextStart);
            this.add(jTextEnd);
    
            // 3).两个操作按钮
            getItemsBtn = new JButton("获取信息");
            outputBtn = new JButton("导出txt");
    
            getItemsBtn.setBounds(30, 200, 120, 25);
            outputBtn.setBounds(30, 230, 120, 25);
    
            this.add(getItemsBtn);
            this.add(outputBtn);
    
            // 添加监听响应
            this.getItemsBtn.addActionListener(this);
            this.outputBtn.addActionListener(this);
    
            // 4).设置左右分隔标签
            JLabel awayLabel = new JLabel();
            awayLabel.setBounds(200, 50, 10, 450);
            this.add(awayLabel);
        }
    
        // 右部列表信息
        public void rigthInformation() {
            // 设置JTabel的默认类型(数据来源、图表标题)
            this.tableModel = new DefaultTableModel(new infoList().Info, new infoList().titles);
            // 添加JLabel组件
            this.table = new JTable(this.tableModel);
    
            // 设置列宽度
            table.getColumnModel().getColumn(0).setPreferredWidth(80);
            table.getColumnModel().getColumn(1).setPreferredWidth(150);
            table.getColumnModel().getColumn(2).setPreferredWidth(190);
    
            // 禁止JLabel组件随着窗口的大小而改变
            table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    
            // JTabel组件表格的显示尺寸
            table.setPreferredScrollableViewportSize(new Dimension(420, 0));
    
            // 使列表不可以整列的进行移动
            table.getTableHeader().setReorderingAllowed(false);
    
            // 使列表框可被编辑
            table.enable(true);
    
            // 给JTabel组件添加滑动条
            JScrollPane scr = new JScrollPane(this.table);
    
            // 将带滚动条的Tabel组件添加入面板的东部区域
            this.add(scr, BorderLayout.EAST);
        }
    
        // 图表数据信息
        class infoList extends AbstractTableModel {
            // 标题
            public String[] titles = { "主机名", "IP号", "MAC地址" };
            // 数据
            public Object[][] Info = {}; //
    
            public int getRowCount() {
                return 0;
            }
    
            public int getColumnCount() {
                return 0;
            }
    
            @Override
            public Object getValueAt(int arg0, int arg1) {
                return null;
            }
        }
    
        // 监听按钮响应方法
        public void actionPerformed(ActionEvent e) {
            // 1).“获取信息”按钮响应处理
            if (e.getSource() == this.getItemsBtn) {
                // 获取文本起始IP地址
                String start = jTextStart.getText();
                String end = jTextEnd.getText();
                getinfo(start, end, this);
            }
    
            // 2)."输出"响应按钮
            if (e.getSource() == this.outputBtn) {
                try {
                    file1 = new File("信息.txt");
                    OutputStream outstream = new FileOutputStream(file1);
                    outstream.write("主机名 IP号 MAC地址\n".getBytes());
    
                    // 按行输出信息(信息间隔为空格)
                    for (int rowNum = 0; rowNum < strList.size(); rowNum++) {
                        String StrLine = strList.get(rowNum).get(0) + " " + strList.get(rowNum).get(1) + " "
                                + strList.get(rowNum).get(2) + "\n";
                        outstream.write(StrLine.getBytes());
                    }
                    // 刷新、关闭输出流
                    outstream.flush();
                    outstream.close();
    
                } catch (IOException ioe) {
                    ioe.printStackTrace();
                }
            }
        }
    
        // 刷新图表信息
        private void flushInfo() {
            // 清空图表历史信息
            while (this.tableModel.getRowCount() > 0) {
                this.tableModel.removeRow(this.tableModel.getRowCount() - 1);
            }
    
            // 暂时存储单条信息
            List<String> list = new LinkedList<String>();
    
            // 将strList信息显示到表格中
            // strList = new LinkedList<LinkedList<String>>();
            if (strList != null) {
                for (int i = 0; i < strList.size(); i++) {
                    list = strList.get(i);
                    this.tableModel.addRow(new Object[] { list.get(0), list.get(1), list.get(2) });
                }
            }
        }
    
        // “获取信息”方法
        private void getinfo(String start, String end, NoPortWindow noPortWindow) {
    
            List<String> ipList = new LinkedList<String>();
    
            strList.add(infoList);
            // 刷新加载显示到右侧图表中
            flushInfo();
        }
    }
    
    

    (2)

    package com;
    
    import java.awt.Toolkit;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    
    public class PublicWindowSet {
    
        //窗口大小
        public static void windowAttribute(JFrame jfr, int wide, int high, String title) {
            windowIsCenter(wide, high, jfr);
            jfr.setTitle(title);
            jfr.setSize(wide, high);
            jfr.setVisible(true);
            jfr.setResizable(false);
        }
    
        //中心布局
        public static void windowIsCenter(int windowWide, int windowHigh, JFrame frame) {
            int screenWide = Toolkit.getDefaultToolkit().getScreenSize().width;
            int screenHigh = Toolkit.getDefaultToolkit().getScreenSize().height;
            int x = screenWide / 2 - windowWide / 2;
            int y = screenHigh / 2 - windowHigh / 2;
            frame.setLocation(x, y);
        }
    
        //提示面板
        public static void promptPopUp(String content, String title, JFrame jfr) {
            JOptionPane.showMessageDialog(jfr.getContentPane(), content, title, JOptionPane.INFORMATION_MESSAGE);
        }
    
    }
    
    

    (3)

     package com;
    
    public class Main {
        public static void main(String[] args) {
            new NoPortWindow();   
        }
    }
    

    运行 Main.java

    打赏 评论
  • 点点滴滴的淡淡的 2017-04-14 02:13

    你去研究一下JTable

    打赏 评论

相关推荐 更多相似问题