用java做电话号码管理系统

用Jtabel表格做的,想添加一个功能,提取Jtabel 里的值存入文件中,使得在JTable中修改数据文件里的值也随着更改

1.定义一个电话号码的javabean, 2.用JFrame实现界面,用JTable显示数据; 3.把数据保存在List对象; 4.用ObjectOutputStream保存对象。 参考代码:

<span class="hljs-keyword">package</span> T10;

<span class="hljs-keyword">import</span> javax.swing.JFrame;
<span class="hljs-keyword">import</span> javax.swing.JPanel;
<span class="hljs-keyword">import</span> javax.swing.JScrollPane;
<span class="hljs-keyword">import</span> javax.swing.JTable;
<span class="hljs-keyword">import</span> javax.swing.table.AbstractTableModel;
<span class="hljs-keyword">import</span> java.awt.Dimension;
<span class="hljs-keyword">import</span> java.awt.GridLayout;
<span class="hljs-keyword">import</span> java.util.Vector;

<span class="hljs-keyword">import</span> javax.swing.table.JTableHeader;

<span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span class="hljs-title class_">TableDemo</span> <span class="hljs-keyword">extends</span> <span class="hljs-title class_">JFrame</span> {
    <span class="hljs-comment">/**
     * 表格(JTable):主要功能是显示数据
     * 
     * */</span>
    <span class="hljs-keyword">public</span> <span class="hljs-title function_">TableDemo</span><span class="hljs-params">()</span> {
        <span class="hljs-built_in">super</span>(<span class="hljs-string">"表格例子"</span>);
        <span class="hljs-comment">//设置该面板为网格布局</span>
        <span class="hljs-built_in">this</span>.getContentPane().setLayout(<span class="hljs-keyword">new</span> <span class="hljs-title class_">GridLayout</span>(<span class="hljs-number">1</span>, <span class="hljs-number">0</span>));
        <span class="hljs-comment">//使用改写后的tableModel类来创建一个表格</span>
        <span class="hljs-type">JTable</span> <span class="hljs-variable">table</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">JTable</span>(<span class="hljs-keyword">new</span> <span class="hljs-title class_">MyTableModel</span>());
        <span class="hljs-comment">//设置单元格选中为真</span>
<span class="hljs-comment">//        table.setCellSelectionEnabled(true);</span>
        <span class="hljs-comment">//允许选中行</span>
        table.setRowSelectionAllowed(<span class="hljs-literal">true</span>);
        
        <span class="hljs-comment">//获取表头</span>
        <span class="hljs-type">JTableHeader</span>  <span class="hljs-variable">th</span> <span class="hljs-operator">=</span> table.getTableHeader();
        th.setReorderingAllowed(<span class="hljs-literal">false</span>);
<span class="hljs-comment">//        th.setReorderingAllowed(true);</span>
        
        <span class="hljs-comment">//系统自动设置表格的大小</span>
<span class="hljs-comment">//        table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);</span>
        <span class="hljs-comment">//设置表格的默认显示大小</span>
        table.setPreferredScrollableViewportSize(<span class="hljs-keyword">new</span> <span class="hljs-title class_">Dimension</span>(<span class="hljs-number">500</span>, <span class="hljs-number">70</span>));
        <span class="hljs-comment">//将该表格放到一个滚动面板中去</span>
        <span class="hljs-type">JScrollPane</span> <span class="hljs-variable">scrollPane</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">JScrollPane</span>(table);
        <span class="hljs-comment">//将该滚动面板再加入到内容面板中去</span>
        <span class="hljs-built_in">this</span>.add(scrollPane);
        <span class="hljs-built_in">this</span>.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        <span class="hljs-built_in">this</span>.pack();
        <span class="hljs-built_in">this</span>.setVisible(<span class="hljs-literal">true</span>);

    }

    <span class="hljs-comment">//内部类实现抽象的TableModel,并改写必要的方法</span>
    <span class="hljs-keyword">class</span> <span class="hljs-title class_">MyTableModel</span> <span class="hljs-keyword">extends</span> <span class="hljs-title class_">AbstractTableModel</span> {
        <span class="hljs-comment">//表头的标题</span>
        <span class="hljs-keyword">private</span> String[] columnNames = {<span class="hljs-string">"姓名"</span>, <span class="hljs-string">"年龄"</span>, <span class="hljs-string">"成绩"</span>, <span class="hljs-string">"作弊"</span>,<span class="hljs-string">"学期"</span>};
        <span class="hljs-comment">//表格中显示的记录</span>
        <span class="hljs-keyword">private</span> Object[][] data = { 
                {<span class="hljs-string">"笨笨"</span>, <span class="hljs-keyword">new</span> <span class="hljs-title class_">Integer</span>(<span class="hljs-number">12</span>), <span class="hljs-string">"85"</span>, <span class="hljs-keyword">new</span> <span class="hljs-title class_">Boolean</span>(<span class="hljs-literal">false</span>),<span class="hljs-string">"第1学期"</span>},
                {<span class="hljs-string">"张山"</span>, <span class="hljs-keyword">new</span> <span class="hljs-title class_">Integer</span>(<span class="hljs-number">13</span>), <span class="hljs-string">"70"</span>, <span class="hljs-keyword">new</span> <span class="hljs-title class_">Boolean</span>(<span class="hljs-literal">true</span>),<span class="hljs-string">"第1学期"</span>},
                {<span class="hljs-string">"李飞"</span>, <span class="hljs-keyword">new</span> <span class="hljs-title class_">Integer</span>(<span class="hljs-number">12</span>), <span class="hljs-string">"75"</span>, <span class="hljs-keyword">new</span> <span class="hljs-title class_">Boolean</span>(<span class="hljs-literal">false</span>),<span class="hljs-string">"第1学期"</span>},
                {<span class="hljs-string">"关羽"</span>, <span class="hljs-keyword">new</span> <span class="hljs-title class_">Integer</span>(<span class="hljs-number">11</span>), <span class="hljs-string">"60"</span>, <span class="hljs-keyword">new</span> <span class="hljs-title class_">Boolean</span>(<span class="hljs-literal">true</span>),<span class="hljs-string">"第1学期"</span>},
                {<span class="hljs-string">"大雄"</span>, <span class="hljs-keyword">new</span> <span class="hljs-title class_">Integer</span>(<span class="hljs-number">14</span>), <span class="hljs-string">"50"</span>, <span class="hljs-keyword">new</span> <span class="hljs-title class_">Boolean</span>(<span class="hljs-literal">false</span>),<span class="hljs-string">"第1学期"</span>},
                {<span class="hljs-string">"萧萧"</span>, <span class="hljs-keyword">new</span> <span class="hljs-title class_">Integer</span>(<span class="hljs-number">13</span>), <span class="hljs-string">"83"</span>, <span class="hljs-keyword">new</span> <span class="hljs-title class_">Boolean</span>(<span class="hljs-literal">false</span>),<span class="hljs-string">"第1学期"</span>}
        };
        
        <span class="hljs-comment">//得到表格列长度</span>
        <span class="hljs-keyword">public</span> <span class="hljs-type">int</span> <span class="hljs-title function_">getColumnCount</span><span class="hljs-params">()</span> {
            <span class="hljs-keyword">return</span> columnNames.length;
        }
       <span class="hljs-comment">//得到表格行数</span>
        <span class="hljs-keyword">public</span> <span class="hljs-type">int</span> <span class="hljs-title function_">getRowCount</span><span class="hljs-params">()</span> {
            <span class="hljs-keyword">return</span> data.length;
        }
       <span class="hljs-comment">//得到表格列名</span>
        <span class="hljs-keyword">public</span> String <span class="hljs-title function_">getColumnName</span><span class="hljs-params">(<span class="hljs-type">int</span> col)</span> {
            System.out.println(<span class="hljs-string">" 该列的列名为:"</span>+columnNames[col]);
            <span class="hljs-keyword">return</span> columnNames[col];
        }
       <span class="hljs-comment">//得到指定单元的值</span>
        <span class="hljs-keyword">public</span> Object <span class="hljs-title function_">getValueAt</span><span class="hljs-params">(<span class="hljs-type">int</span> row, <span class="hljs-type">int</span> col)</span> {
            System.out.println(<span class="hljs-string">" 该单元的值为data["</span>+row+<span class="hljs-string">"]["</span>+col+<span class="hljs-string">"] :"</span>+data[row][col]);
            <span class="hljs-keyword">return</span> data[row][col];
        }
        <span class="hljs-comment">//返回指定列的数据类型,不需要调用</span>
        <span class="hljs-keyword">public</span> Class <span class="hljs-title function_">getColumnClass</span><span class="hljs-params">(<span class="hljs-type">int</span> c)</span> {
            <span class="hljs-keyword">return</span> getValueAt(<span class="hljs-number">0</span>, c).getClass();
        }
       <span class="hljs-comment">//设置单元格是否可修改,系统自动执行</span>
        <span class="hljs-keyword">public</span> <span class="hljs-type">boolean</span> <span class="hljs-title function_">isCellEditable</span><span class="hljs-params">(<span class="hljs-type">int</span> row, <span class="hljs-type">int</span> col)</span> {
            <span class="hljs-keyword">if</span> (col < <span class="hljs-number">2</span>) {
                <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>; <span class="hljs-comment">//不能修改</span>
            } <span class="hljs-keyword">else</span> {
                <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>; <span class="hljs-comment">//可以修改</span>
            }
        }
        <span class="hljs-comment">//设置单元格的值,不需要调用,系统自动赋值</span>
        <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">setValueAt</span><span class="hljs-params">(Object value, <span class="hljs-type">int</span> row, <span class="hljs-type">int</span> col)</span> {
            data[row][col] = value;
            <span class="hljs-comment">//更新界面</span>
            fireTableCellUpdated(row, col);
        }
    }

   <span class="hljs-comment">//让该表格在线程安全模式下运行</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">main</span><span class="hljs-params">(String[] args)</span> {
        javax.swing.SwingUtilities.invokeLater(<span class="hljs-keyword">new</span> <span class="hljs-title class_">Runnable</span>() {
            <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">run</span><span class="hljs-params">()</span> {
                <span class="hljs-keyword">new</span> <span class="hljs-title class_">TableDemo</span>();
            }
        });
    }
}