package com.jdhr.view;import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingConstants;import com.jdhr.model.HeroModel;
import com.jdhr.model.UserModel;public class MainWindows extends JFrame implements ActionListener,MouseListener
{
JMenu jm1, jm2, jm3, jm4, jm5, jm6, jm7, jm8;
JMenuItem jmi1, jmi2, jmi3;
JMenuBar jmb;
JPanel jp1, jp2, jp3,jp4;
JLabel jl1, jl2,jl3,jl4,jp5;
JTextField jtf;
JScrollPane jsp1;
JSplitPane jsp;
JTable jt;
JButton jb1,jb2,jb3,jb4;
Cursor cs;
CardLayout cl;
Font font = new Font("微软雅黑", Font.PLAIN, 36);
Font font2 = new Font("微软雅黑", Font.PLAIN, 14);
int w = Toolkit.getDefaultToolkit().getScreenSize().width;
int h = Toolkit.getDefaultToolkit().getScreenSize().height; float weight=0.2f; public static void main(String[] args)
{
new MainWindows();
} // 菜单栏
public void MainMenu()
{
jm1 = new JMenu("国家机构");
jm1.setFont(font2);
jmi1 = new JMenuItem("新增(N)");
jmi1.setFont(font2);
jmi2 = new JMenuItem("合并(U)");
jmi2.setFont(font2);
jmi3 = new JMenuItem("撤销(R)");
jmi3.setFont(font2);
jm1.add(jmi1);
jm1.add(jmi2);
jm1.add(jmi3);
jm2 = new JMenu("人员管理");
jm2.setFont(font2);
jm3 = new JMenu("合同管理");
jm3.setFont(font2);
jm4 = new JMenu("人事异动");
jm4.setFont(font2);
jm5 = new JMenu("培训管理");
jm5.setFont(font2);
jm6 = new JMenu("绩效管理");
jm6.setFont(font2);
jm7 = new JMenu("考勤休假");
jm7.setFont(font2);
jm8 = new JMenu("薪酬管理");
jm8.setFont(font2); jmb = new JMenuBar(); jmb.add(jm1);
jmb.add(jm2);
jmb.add(jm3);
jmb.add(jm4);
jmb.add(jm5);
jmb.add(jm6);
jmb.add(jm7);
jmb.add(jm8);
this.setJMenuBar(jmb);
} // 主面板
public void MainPanel()
{
cs = new Cursor(Cursor.HAND_CURSOR);
cl = new CardLayout(); jp1 = new JPanel();
jp1.setLayout(new GridLayout(5, 1));

jl1 = new JLabel("国家管理",SwingConstants.CENTER);
jl1.setCursor(cs);
jl1.setEnabled(false);
jl1.addMouseListener(this); jl2 = new JLabel("人员管理",SwingConstants.CENTER);
jl2.setCursor(cs);
jl2.setEnabled(false);
jl2.addMouseListener(this); jp1.add(jl1);
jp1.add(jl2);


Icon icon = new ImageIcon("/image/htly.jpg");
jl3 = new JLabel(icon,SwingConstants.CENTER);
jp3 = new JPanel(cl);
HeroPanel ep = new HeroPanel();
NationPanel np = new NationPanel();
jp3.add(jl3,"1");
jp3.add(ep,"2");
jp3.add(np,"3");

jsp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, jp1, jp3);
jsp.setDividerSize(5);
this.add(jsp);

} // 主方法
public MainWindows()
{
this.MainPanel();
this.MainMenu();
this.setTitle("灰太郎管理系统"); Image image = Toolkit.getDefaultToolkit().createImage("/image/htl.jpg");
this.setIconImage(image);
this.setSize(w/2 , h /2 - 28);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
} @Override
public void actionPerformed(ActionEvent e)
{ } @Override
public void mouseClicked(MouseEvent e)
{
if (e.getSource() == jl1)
{ cl.show(jp3, "3");
}
else if (e.getSource() == jl2)
{ cl.show(jp3, "2");
} } @Override
public void mouseEntered(MouseEvent e)
{
if (e.getSource() == jl1)
{
jl1.setEnabled(true); }
else if (e.getSource() == jl2)
{
jl2.setEnabled(true);
} } @Override
public void mouseExited(MouseEvent e)
{
if (e.getSource() == jl1)
{
jl1.setEnabled(false);
jl1.setCursor(cs);
}
else if (e.getSource() == jl2)
{
jl2.setEnabled(false);
jl2.setCursor(cs);
} } @Override
public void mousePressed(MouseEvent e)
{
// TODO Auto-generated method stub } @Override
public void mouseReleased(MouseEvent e)
{
// TODO Auto-generated method stub }}package com.jdhr.view;
import java.awt.*;
import java.awt.Event.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.*;
import javax.swing.table.*;import com.jdhr.model.HeroModel;
public class NationPanel extends JPanel implements ActionListener
{
JPanel jp1,jp2,jp3,jp4,jp5;
JLabel jl1,jl2;
JTextField jtf;
JButton jb1,jb2,jb3,jb4,jb5;
JTable jtable;
JScrollPane jsp;
HeroModel hm; public static void main(String[] args)
{

}
public NationPanel()
{
// 最上边
jp1 = new JPanel();
jl1 = new JLabel("请输入您要查询的国家名称:");
jtf = new JTextField(20);
jb5 = new JButton("查询");
jb5.addActionListener(this);
jp1.add(jl1);
jp1.add(jtf);
jp1.add(jb5);

// 中间
jp2 = new JPanel(new BorderLayout());
hm = new HeroModel();
String sql = "select * from nation order by naid";
String[] pars = {};
hm = new HeroModel();
hm.queryHeros(sql, pars);
jtable= new JTable(hm);
jsp = new JScrollPane(jtable);
jp2.add(jsp);


// 最下边
jp3 = new JPanel(new FlowLayout(FlowLayout.LEFT));
jp4 = new JPanel(new FlowLayout(FlowLayout.RIGHT));
jl2 = new JLabel("总共有***行数据");
jp3.add(jl2);
jb1 = new JButton("详细信息");
jb2 = new JButton("添加");
jb2.addActionListener(this);
jb3 = new JButton("修改");
jb4 = new JButton("删除");
jp4.add(jb1);
jp4.add(jb2);
jp4.add(jb3);
jp4.add(jb4);

jp5 = new JPanel(new BorderLayout());
jp5.add(jp3,"West");
jp5.add(jp4,"East");
this.setLayout(new BorderLayout());
this.setVisible(true);
this.add(jp1,"North");
this.add(jp2,"Center");
this.add(jp5,"South");
}
@Override
public void actionPerformed(ActionEvent e)
{
// TODO Auto-generated method stub
if(e.getSource()==jb5)
{
String name = this.jtf.getText().trim();
String sql = "select * from nation where naname = ?";
String[] pars = {name};
hm = new HeroModel();
hm.queryHeros(sql, pars);
jtable.setModel(hm);
}
if(e.getSource() == jb2)
{

AddNation an = new AddNation();

}
}

}package com.jdhr.view;import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;import com.jdhr.model.HeroModel;public class AddNation extends JFrame implements ActionListener
{ JLabel jl1, jl2, jl3;
JTextField jtf1, jtf2, jtf3;
JButton jb1, jb2;
JPanel jp1, jp2, jp3;// public static void main(String[] args)
// {
// new AddNation();
//
// } public AddNation()
{
jl1 = new JLabel("国家编号:  ");
jl2 = new JLabel("国家名称:  ");
jl3 = new JLabel("国都地址:  "); jtf1 = new JTextField(20);
jtf2 = new JTextField(20);
jtf3 = new JTextField(20); jb1 = new JButton("添加");
jb1.addActionListener(this);
jb2 = new JButton("取消");
jb2.addActionListener(this); jp1 = new JPanel(new GridLayout(3, 1));
jp2 = new JPanel(new GridLayout(3, 1));
jp3 = new JPanel(); jp1.add(jl1);
jp1.add(jl2);
jp1.add(jl3); jp2.add(jtf1);
jp2.add(jtf2);
jp2.add(jtf3); jp3.add(jb1);
jp3.add(jb2); this.add(jp1, "West");
this.add(jp2, "Center");
this.add(jp3, "South");
this.setTitle("添加国家");
this.setSize(300, 160);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); } @Override
public void actionPerformed(ActionEvent e)
{
// 添加
if (e.getSource() == jb1)
{
HeroModel hm = new HeroModel();
String sql = "insert into nation values(?,?,?)";
String[] pars = { jtf1.getText().trim(), jtf2.getText().trim(),
jtf3.getText().trim() };
if (!hm.Updein(sql, pars))
{
JOptionPane.showConfirmDialog(this, "添加失败");
} this.dispose();
}
if (e.getSource() == jb2)
{
this.dispose();
} }}
通过调用AddNation()这个界面数据之后,不能在JTable中实时地显示出来,请问该怎么办???

解决方案 »

  1.   

    你可以去看一下javax.swing.table.AbstractTableModel这个类
      

  2.   

    你把HeroModel和UserModel代码也贴出来,否则代码无法编译调试,应该能调通的
      

  3.   

    以下是Heromodel代码package com.jdhr.model;import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.util.Vector;import javax.swing.table.AbstractTableModel;import com.jdhr.db.SqlHelper;public class HeroModel extends AbstractTableModel
    { Vector rowDate,columnName;
    public static void main(String[] args)
    {
    // TODO Auto-generated method stub }
    public void queryHeros(String sql,String[] pars)
    {
    columnName = new Vector();
    rowDate = new Vector();

    SqlHelper sh = null;
    sh = new SqlHelper();
    ResultSet rs = sh.query(sql, pars);
    try
    {
    ResultSetMetaData rsm = rs.getMetaData();
    for(int i=0; i<rsm.getColumnCount();i++)
    {
    columnName.add(rsm.getColumnName(i+1));
    }
    while(rs.next())
    {
    Vector hang = new Vector();
    for(int i=0;i<rsm.getColumnCount();i++)
    {
    hang.add(rs.getString(i+1));
    }
    rowDate.add(hang);

    }
    }
    catch (Exception e)
    {
    e.printStackTrace();
    }
    finally
    {
    sh.close();
    }
    }
    public boolean Updein(String sql,String[] pars)
    {
    SqlHelper sh = new SqlHelper();
    return sh.Updein(sql, pars);

    }
    @Override
    public int getColumnCount()
    {
    // TODO Auto-generated method stub
    return this.columnName.size();
    }
    @Override
    public int getRowCount()
    {
    // TODO Auto-generated method stub
    return this.rowDate.size();
    }
    @Override
    public Object getValueAt(int arg0, int arg1)
    {
    // TODO Auto-generated method stub
    return ((Vector)this.rowDate.get(arg0)).get(arg1);
    }
    @Override
    public String getColumnName(int column) 
    {
    // TODO Auto-generated method stub
    return (String)this.columnName.get(column);
    }}
      

  4.   

    这是Usermodel代码package com.jdhr.model;import java.sql.*;
    import java.util.*;import javax.swing.event.*;
    import javax.swing.table.AbstractTableModel;
    import javax.swing.*;import com.jdhr.db.*;public class UserModel
    {

    public String checkUser(String id, String p)
    {
    String job = "";
    SqlHelper sh = null;
    try
    {
    String sql = "select heros.herojob from heros,login where heros.heroid=login.heroid and login.heroid= ? and login.password= ?";
    String[] pars = {id,p};
    sh = new SqlHelper();
    ResultSet rs = sh.query(sql, pars);
    if (rs.next())
    {
    job = rs.getString(1);
    }
    }
    catch (Exception e)
    {
    e.printStackTrace();
    }
    finally
    {
    sh.close();
    }
    return job;
    }
    }
      

  5.   

    哥们  怎么老是研究swing啊??
      

  6.   

    只给你实现了添加数据的功能,面板是能够显示数据实时的更新,没有将添加的数据持久化到数据库你自己添加吧。HeroPanel代码我也没有,注解掉了,你自己再改。public class MainWindows extends JFrame implements ActionListener,MouseListener
    {
        JMenu jm1, jm2, jm3, jm4, jm5, jm6, jm7, jm8;
        JMenuItem jmi1, jmi2, jmi3;
        JMenuBar jmb;
        JPanel jp1, jp2, jp3,jp4;
        JLabel jl1, jl2,jl3,jl4,jp5;
        JTextField jtf;
        JScrollPane jsp1;
        JSplitPane jsp;
        JTable jt;
        JButton jb1,jb2,jb3,jb4;
        Cursor cs;
        CardLayout cl;
        Font font = new Font("微软雅黑", Font.PLAIN, 36);
        Font font2 = new Font("微软雅黑", Font.PLAIN, 14);
        int w = Toolkit.getDefaultToolkit().getScreenSize().width;
        int h = Toolkit.getDefaultToolkit().getScreenSize().height;    float weight=0.2f;    public static void main(String[] args)
        {
            new MainWindows();
        }    // 菜单栏
        public void MainMenu()
        {
            jm1 = new JMenu("国家机构");
            jm1.setFont(font2);
            jmi1 = new JMenuItem("新增(N)");
            jmi1.setFont(font2);
            jmi2 = new JMenuItem("合并(U)");
            jmi2.setFont(font2);
            jmi3 = new JMenuItem("撤销(R)");
            jmi3.setFont(font2);
            jm1.add(jmi1);
            jm1.add(jmi2);
            jm1.add(jmi3);
            jm2 = new JMenu("人员管理");
            jm2.setFont(font2);
            jm3 = new JMenu("合同管理");
            jm3.setFont(font2);
            jm4 = new JMenu("人事异动");
            jm4.setFont(font2);
            jm5 = new JMenu("培训管理");
            jm5.setFont(font2);
            jm6 = new JMenu("绩效管理");
            jm6.setFont(font2);
            jm7 = new JMenu("考勤休假");
            jm7.setFont(font2);
            jm8 = new JMenu("薪酬管理");
            jm8.setFont(font2);        jmb = new JMenuBar();        jmb.add(jm1);
            jmb.add(jm2);
            jmb.add(jm3);
            jmb.add(jm4);
            jmb.add(jm5);
            jmb.add(jm6);
            jmb.add(jm7);
            jmb.add(jm8);
            this.setJMenuBar(jmb);
        }    // 主面板
        public void MainPanel()
        {
            cs = new Cursor(Cursor.HAND_CURSOR);
            cl = new CardLayout();        jp1 = new JPanel();
            jp1.setLayout(new GridLayout(5, 1));
            
            jl1 = new JLabel("国家管理",SwingConstants.CENTER);
            jl1.setCursor(cs);
            jl1.setEnabled(false);
            jl1.addMouseListener(this);        jl2 = new JLabel("人员管理",SwingConstants.CENTER);
            jl2.setCursor(cs);
            jl2.setEnabled(false);
            jl2.addMouseListener(this);        jp1.add(jl1);
            jp1.add(jl2);
            
            
            Icon icon = new ImageIcon("/image/htly.jpg");
            jl3 = new JLabel(icon,SwingConstants.CENTER);
            jp3 = new JPanel(cl);
    //        HeroPanel ep = new HeroPanel();
            NationPanel np = new NationPanel();
            jp3.add(jl3,"1");
    //        jp3.add(ep,"2");
            jp3.add(np,"3");
            
            jsp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, jp1, jp3);
            jsp.setDividerSize(5);
            this.add(jsp);
                    
        }    // 主方法
        public MainWindows()
        {
            this.MainPanel();
            this.MainMenu();
            this.setTitle("灰太郎管理系统");        Image image = Toolkit.getDefaultToolkit().createImage("/image/htl.jpg");
            this.setIconImage(image);
            this.setSize(w/2 , h /2 - 28);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setVisible(true);
        }    @Override
        public void actionPerformed(ActionEvent e)
        {    }    @Override
        public void mouseClicked(MouseEvent e)
        {
            if (e.getSource() == jl1)
            {            cl.show(jp3, "3");
            }
            else if (e.getSource() == jl2)
            {            cl.show(jp3, "2");
            }    }    @Override
        public void mouseEntered(MouseEvent e)
        {
            if (e.getSource() == jl1)
            {
                jl1.setEnabled(true);        }
            else if (e.getSource() == jl2)
            {
                jl2.setEnabled(true);
            }    }    @Override
        public void mouseExited(MouseEvent e)
        {
            if (e.getSource() == jl1)
            {
                jl1.setEnabled(false);
                jl1.setCursor(cs);
            }
            else if (e.getSource() == jl2)
            {
                jl2.setEnabled(false);
                jl2.setCursor(cs);
            }    }    @Override
        public void mousePressed(MouseEvent e)
        {
            // TODO Auto-generated method stub    }    @Override
        public void mouseReleased(MouseEvent e)
        {
            // TODO Auto-generated method stub    }}
    public class AddNation extends JFrame implements ActionListener
    {
    HeroModel dataModel=null;
        JLabel jl1, jl2, jl3;
        JTextField jtf1, jtf2, jtf3;
        JButton jb1, jb2;
        JPanel jp1, jp2, jp3;    public static void main(String[] args)
        {
    //        new AddNation();    }    public AddNation(HeroModel hm)
        {
         dataModel=hm;
            jl1 = new JLabel("国家编号:  ");
            jl2 = new JLabel("国家名称:  ");
            jl3 = new JLabel("国都地址:  ");        jtf1 = new JTextField(20);
            jtf2 = new JTextField(20);
            jtf3 = new JTextField(20);        jb1 = new JButton("添加");
            jb1.addActionListener(this);
            jb2 = new JButton("取消");
            jb2.addActionListener(this);        jp1 = new JPanel(new GridLayout(3, 1));
            jp2 = new JPanel(new GridLayout(3, 1));
            jp3 = new JPanel();        jp1.add(jl1);
            jp1.add(jl2);
            jp1.add(jl3);        jp2.add(jtf1);
            jp2.add(jtf2);
            jp2.add(jtf3);        jp3.add(jb1);
            jp3.add(jb2);        this.add(jp1, "West");
            this.add(jp2, "Center");
            this.add(jp3, "South");
            this.setTitle("添加国家");
            this.setSize(300, 160);
            
            this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            this.setLocationRelativeTo(null);
            this.setVisible(true);
        }    @Override
        public void actionPerformed(ActionEvent e)
        {
            // 添加
            if (e.getSource() == jb1)
            {
             String str1=jtf1.getText().trim();
             String str2=jtf2.getText().trim();
             String str3=jtf3.getText().trim();
            
             dataModel.addRow(str1, str2, str3);
    //            HeroModel hm = new HeroModel();
    //            String sql = "insert into nation values(?,?,?)";
    //            String[] pars = { jtf1.getText().trim(), jtf2.getText().trim(),
    //                    jtf3.getText().trim() };
    //            if (!hm.Updein(sql, pars))
    //            {
    //                JOptionPane.showConfirmDialog(this, "添加失败");
    //            }            this.dispose();
            }
            if (e.getSource() == jb2)
            {
                this.dispose();
            }    }}
    public class HeroModel extends AbstractTableModel { Vector<Vector> rowDate; //负责存储jtable模型当中的数据值 ,包含的元素也是Vector
    //这种用Vector不怎么推荐用

    Vector<String> columnName;//负责维护jtable的列名称

    public HeroModel(){
    columnName = new Vector<String>();
    columnName.add("序号");
    columnName.add("名称");
    columnName.add("值");
    rowDate = new Vector<Vector>();

    //这里我自己添加几个数据,以为SqlHelper连接的表不清楚

    for(int i=0;i<5;i++){
    Vector<String> v=new Vector<String>();
    v.add("序号"+i);
    v.add("名称"+i);
    v.add("值"+i);
    rowDate.add(v);
    }
    } public static void main(String[] args) {
    // TODO Auto-generated method stub } public void queryHeros(String sql, String[] pars) {
    // SqlHelper sh = null;
    // sh = new SqlHelper();
    // ResultSet rs = sh.query(sql, pars);
    // try {
    // ResultSetMetaData rsm = rs.getMetaData();
    // for (int i = 0; i < rsm.getColumnCount(); i++) {
    // columnName.add(rsm.getColumnName(i + 1));
    // }
    // while (rs.next()) {
    // Vector hang = new Vector();
    // for (int i = 0; i < rsm.getColumnCount(); i++) {
    // hang.add(rs.getString(i + 1));
    // }
    // rowDate.add(hang);
    //
    // }
    // } catch (Exception e) {
    // e.printStackTrace();
    // } finally {
    //// sh.close();
    // }
    } public boolean Updein(String sql, String[] pars) {
    // SqlHelper sh = new SqlHelper();
    // return sh.Updein(sql, pars);
    return true; }

    /**
     * 添加一行记录,这里需要根据自己需要实现,这是个实例
     * @param str1
     * @param str2
     * @param str3
     * @return
     */
    public boolean addRow(String str1,String str2,String str3){
    boolean result=false;
    try{

    Vector<String> v=new Vector<String>();
    v.add(str1);
    v.add(str2);
    v.add(str3);

    if(rowDate==null){
    rowDate=new Vector<Vector>();
    }
    rowDate.add(v);

    this.fireTableRowsInserted(getRowCount(), getColumnCount()+3);
    result=true;
    }catch(Exception e){
    e.printStackTrace();
    }

    return result;
    }

    @Override
    public int getColumnCount() {
    // TODO Auto-generated method stub
    // System.out.println("一共有列数:"+columnName.size());
    return this.columnName.size();
    } @Override
    public int getRowCount() {
    // TODO Auto-generated method stub
    // System.out.println("一共有行数:"+rowDate.size());
    return this.rowDate.size();
    } @Override
    public Object getValueAt(int arg0, int arg1) {
    // TODO Auto-generated method stub
    return (this.rowDate.get(arg0)).get(arg1);
    } @Override
    public String getColumnName(int column) {
    // TODO Auto-generated method stub
    return this.columnName.get(column);
    }}
      

  7.   

    你之前只做了数据的持久化工作,对jtable没有做任何的调整,肯定无法在界面显示出来。
    我主要做的就是在jtable的模型层添加了addRow()的一个实例方法,当添加数据之后,调用模型层的addRow()方法,这样就能更新jtable。对于修改和删除数据我没有实现,你照着葫芦画瓢吧。