Java的问题,表格无法显示

Waitxl 2013-10-17 10:14:59
小弟是新手,请各位大神看看,哪里出了问题
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.table.*;
import java.lang.Object.*;
import java.util.*;
import java.sql.*;

public class ZhuJieMian extends JFrame{
JButton b1=new JButton("商品管理");
JButton b2=new JButton("采购管理");
JButton b3=new JButton("销售管理");
JButton b4=new JButton("用户管理");
JButton b5=new JButton("权限管理");
JLabel l1=new JLabel("商品编号");
JLabel l2=new JLabel("商品名称");
JLabel l3=new JLabel("商品价格");
JLabel l4=new JLabel("生产日期");
JLabel l5=new JLabel("生产地");
JLabel l6=new JLabel("库存量");

public int screanWidth2,screanHeight2;
AbstractTableModel tm;
Vector vector;
String title[]={"商品编号","商品名称","商品价格","生产日期","生产地","库存量"};

public static void main(String[] args){
new ZhuJieMian();

}

public ZhuJieMian()
{
Toolkit tool=getToolkit();
Dimension dim=tool.getScreenSize();
screanWidth2=dim.width;
screanHeight2=dim.height;
createTable();
setTitle("商品管理");
setLayout(null);

Component add = add(b1);
add(b2);
add(b3);
add(b4);
add(b5);
b1.setBounds(15, 535, 100, 20);
b2.setBounds(130, 535, 100, 20);
b3.setBounds(245, 535, 100, 20);
b4.setBounds(360, 535, 100, 20);
b5.setBounds(475, 535, 100, 20);
setBounds(360,20,600,600);
setVisible(true);

}
void createTable()
{
JTable table;
JScrollPane scroll;
vector=new Vector();
tm=new AbstractTableModel()
{
public int getColumnCount()
{
return title.length;
}

public int getRowCount()
{
return vector.size();
}

public Object getValueAt(int row,int column)
{
if(!vector.isEmpty())
return ((Vector)vector.elementAt(row)).elementAt(column);
else
return null;
}

public void setValueAt(Object value,int row,int column)
{

}

public String getcoulumnName(int column)
{
return title[column];
}

public Class getColumnClass(int c)
{
return getValueAt(0,c).getClass();
}

public boolean isCellEditable(int row,int column)
{
return false;
}
};
table=new JTable(tm);
table.setToolTipText("Display Query Result");
table.setAutoResizeMode(table.AUTO_RESIZE_ALL_COLUMNS);
table.setCellSelectionEnabled(false);
table.setShowVerticalLines(true);
scroll=new JScrollPane(table);
scroll.setPreferredSize(new Dimension(400,200));
add(scroll);
}
}
...全文
558 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
失落夏天 2013-10-19
  • 打赏
  • 举报
回复
引用 16 楼 Waitxl 的回复:
[quote=引用 8 楼 AA5279AA 的回复:] 前几天写的一个表格的例子,你参考下吧。。。 这个例子我测试过,应该没问题的
你看我的思路跟你的思路是不是差不多的? 首先我定义一个带一个参数的方法建立表格,比如createTable(Vector op),然后我在构造方法里面调用createTable()方法创造一个空表格并显示在窗体中,然后如果查询数据库信息,就把获取的信息封装在一个向量中,把这个向量当做参数传递给createTable()方法,在表格中显示获取的信息。[/quote] 首先那叫对象或者集合,不叫向量。 第二,你“然后如果查询数据库信息,就把获取的信息封装在一个向量中,把这个向量当做参数传递”这一步是对的。 第三,你调用了createTable,尤其适用DefaultTableModel进行代理的话,那么只需要对DefaultTableModel进行增删改的操作,那么table就会作出相应的改动。 这时应该是改table,而不是你所说的createTable()在创建table. 所以,把这个向量当做参数传递 应该传递到updateTable()或者addTable()这样的方法中,而不是createTable()
Waitxl 2013-10-18
  • 打赏
  • 举报
回复
引用 8 楼 AA5279AA 的回复:
前几天写的一个表格的例子,你参考下吧。。。 这个例子我测试过,应该没问题的
你看我的思路跟你的思路是不是差不多的? 首先我定义一个带一个参数的方法建立表格,比如createTable(Vector op),然后我在构造方法里面调用createTable()方法创造一个空表格并显示在窗体中,然后如果查询数据库信息,就把获取的信息封装在一个向量中,把这个向量当做参数传递给createTable()方法,在表格中显示获取的信息。
Waitxl 2013-10-18
  • 打赏
  • 举报
回复
引用 8 楼 AA5279AA 的回复:
前几天写的一个表格的例子,你参考下吧。。。 这个例子我测试过,应该没问题的
我写这代码的目的就是在文本框中输入商品编号,然后在数据库中读取对应编号那一行的数据显示在表格中,按你的思路怎么把返回的数据封装成Vector<User>的形式?
Waitxl 2013-10-18
  • 打赏
  • 举报
回复
[/quote] 难得你有一份钻研swing的心,具体代码我肯定不可能帮你写了,我能帮的只是所以一个比较详细的思路吧 比较标准的来的话, 首先我可以定义一个方法获取数据库的数据,把返回的数据封装成 Vector<User>的形式。并把这个对象传入显示的方法中。 //可以这样来显示 public void ZhuJieMian(Vector<User> list){ for(User user:list){ Vector<Object> newRow = new Vector<Object>(); newRow.add(user.getName()); newRow.add(user.getId()); myTable.addRow(newRow); } } public List<User> selectDB(){ //这里写查询数据的代码 } [/quote] 我写这代码的目的就是在文本框中输入商品编号,然后在数据库中读取对应编号那一行的数据显示在表格中,按你的思路怎么把返回的数据封装成Vector<User>的形式?
失落夏天 2013-10-18
  • 打赏
  • 举报
回复
引用 12 楼 Waitxl 的回复:
[quote=引用 8 楼 AA5279AA 的回复:] 前几天写的一个表格的例子,你参考下吧。。。 这个例子我测试过,应该没问题的

public Test4(){
     JFrame f=new JFrame();
    DefaultTableModel myTable=new DefaultTableModel();
    JTable table=new JTable(myTable);
    table.setPreferredScrollableViewportSize(new Dimension(550,30));
    myTable.addColumn("姓名");
    myTable.addColumn("MM");
    myTable.addColumn("NN");
    int number=3;
    int k=0;
    while(k++!=4){
        Vector<Object> newRow = new Vector<Object>();
        for (int i = 1; i <= number; i++) {
            newRow.add(i);
        }
        
        myTable.addRow(newRow);
    }
     
    table.setPreferredScrollableViewportSize(new Dimension(550,30));
    JScrollPane scrollPane=new JScrollPane(table);
    f.getContentPane().add(scrollPane,BorderLayout.CENTER);
    f.setTitle("Simple Table");
    f.pack();
    f.show();
    f.addWindowListener(new WindowAdapter() {
                        public void windowClosing(WindowEvent e) {
                          System.exit(0);
                        }
                      });
   }
   public static void main(String[] args){
     Test4 b=new Test4();
   }
  }
请问怎么在你写的表格基础上从数据库读取信息,然后显示在表格上?这是我根据你的表格写的代码,但是我不知道怎么把数据显示在表格上。

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.table.*;
import java.lang.Object.*;
import java.util.*;
import java.sql.*;
//import management_system.*;

public class ZhuJieMian extends JFrame implements ActionListener{
JButton b1=new JButton("商品管理");
JButton b2=new JButton("采购管理");
JButton b3=new JButton("销售管理");
JButton b4=new JButton("用户管理");
JButton b5=new JButton("权限管理");
JButton bb1=new JButton("查询");
JButton bb2=new JButton("添加");
JButton bb3=new JButton("修改");
JButton bb4=new JButton("删除");
JButton bb5=new JButton("确认修改");
        
JLabel  l1=new JLabel("商品编号");
JLabel  l2=new JLabel("商品名称");
JLabel  l3=new JLabel("商品价格");
JLabel  l4=new JLabel("生产日期");
JLabel  l5=new JLabel("生产地");
JLabel  l6=new JLabel("库存量");

JTextField t1=new JTextField(10);
JTextField t2=new JTextField(10);
JTextField t3=new JTextField(10);
JTextField t4=new JTextField(10);
JTextField t5=new JTextField(10);
JTextField t6=new JTextField(10);

String GoodsNum_input;
String GoodsName_input;
String GoodsName_price_input;
String Production_Data_input;
String Production_Place_input;
String Inventory_input;//库存量输入值

JTable table;
JScrollPane scroll;
Vector vector;
Vector rec_vector=new Vector();

public int screanWidth2,screanHeight2; 
//AbstractTableModel tm;
//Vector vector;
String title[]={"商品编号","商品名称","商品价格","生产日期","生产地","库存量"};

public static void main(String[] args){
  new ZhuJieMian();

 }

public    ZhuJieMian()
    {
        
   /*     Toolkit tool=getToolkit();   
        Dimension dim=tool.getScreenSize();    
        screanWidth2=dim.width;    
        screanHeight2=dim.height; 
         */
         
        
    JFrame f=new JFrame();
    DefaultTableModel myTable=new DefaultTableModel();
    JTable table=new JTable(myTable);
   // table.setPreferredScrollableViewportSize(new Dimension(550,100));
    for(int i=0;i<=5;i++)
    {
    myTable.addColumn(title[i]); 
    }
    int number=3;
    int k=0;
   while(k++!=20){
        Vector newRow = new Vector();
     /*   for (int i = 1; i <= number; i++) {
            newRow.add(2);
        }   */
         
        myTable.addRow(newRow);
    } 
      
    table.setPreferredScrollableViewportSize(new Dimension(600,220));
    JScrollPane scrollPane=new JScrollPane(table);
    getContentPane().add(scrollPane,BorderLayout.CENTER);
    
    
    setTitle("Simple Table");
    pack();
    show();
        
        setTitle("商品管理");    
        setLayout(null);
      //  add(table);
        add(b1);
        add(b2);
        add(b3);
        add(b4);
        add(b5);
        
        add(bb1);
        add(bb2);
        add(bb3);
        add(bb4);
        add(bb5);
        
        add(l1);
        add(l2);
        add(l3);
        add(l4);
        add(l5);
        add(l6);
        
        add(t1);
        add(t2);
        add(t3);
        add(t4);
        add(t5);
        add(t6);
        
        l1.setBounds(80,250,100,20);
        l2.setBounds(80,300,100,20);
        l3.setBounds(80,350,100,20);
        l4.setBounds(80,400,100,20);
        l5.setBounds(80,450,100,20);
        l6.setBounds(80,500,100,20);
        
        t1.setBounds(170,250,150,20);
        t2.setBounds(170,300,150,20);
        t3.setBounds(170,350,150,20);
        t4.setBounds(170,400,150,20);
        t5.setBounds(170,450,150,20);
        t6.setBounds(170,500,150,20);
        
        b1.setBounds(15, 535, 100, 20);
        b2.setBounds(130, 535, 100, 20);
        b3.setBounds(245, 535, 100, 20);
        b4.setBounds(360, 535, 100, 20);
        b5.setBounds(475, 535, 100, 20);
        
        bb1.setBounds(400,275,100,20);
        bb2.setBounds(400,330,100,20);
        bb3.setBounds(400,385,100,20);
        bb4.setBounds(400,440,100,20);
        bb5.setBounds(530,385,100,20);
        
         b4.addActionListener(this);
         b2.addActionListener(this);
         b3.addActionListener(this);
         bb1.addActionListener(this);
      // table.setBounds(0,0,1000,300);
        setBounds(360,20,650,600);
        setVisible(true);        
}

public void actionPerformed(ActionEvent e) {
       Connection con; 
       Statement sql; 
       ResultSet rs;  
       GoodsNum_input=t1.getText();
    
       if(e.getSource()==b2) {   
           new PurchaseManagement();
       this.setVisible(false);
       }
       if(e.getSource()==b3) {   
           new SalesManagement();
       this.setVisible(false);
       }
       if(e.getSource()==b4) {   
           new UserManagement();
       this.setVisible(false);
       }
       if(e.getSource()==bb1)
    {
           try
       {
                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                String url = "jdbc:odbc:SuperMaket";
                con = DriverManager.getConnection(url);
                sql = con.createStatement();
                rs = sql.executeQuery("SELECT * FROM CustomMessage where GoodsNum='"
                        + GoodsNum_input + "'");
                 if(rs.next()==true)
            {   
                vector.removeAllElements();
                rs.previous();
                 while(rs.next())
                 {
                     rec_vector.addElement(rs.getString(1));
                     rec_vector.addElement(rs.getString(2));
                     rec_vector.addElement(rs.getInt(3));
                     rec_vector.addElement(rs.getString(4));
                     rec_vector.addElement(rs.getString(5));
                     rec_vector.addElement(rs.getInt(6));
                     vector.addElement(rec_vector);
                     myTable.addRow(vector);
                 }
            }
                 else
            {
           JOptionPane.showMessageDialog(this,"帐户或密码错误\n请重新输入","提示",
                   JOptionPane.WARNING_MESSAGE); 
            }
       }
              catch (SQLException g)
       {
          System.out.println(g);
       } 
       catch (Exception e1)
       {
                // TODO Auto-generated catch block
                e1.printStackTrace();
        }    
    }            
  }
}
[/quote] 难得你有一份钻研swing的心,具体代码我肯定不可能帮你写了,我能帮的只是所以一个比较详细的思路吧 比较标准的来的话, 首先我可以定义一个方法获取数据库的数据,把返回的数据封装成 Vector<User>的形式。并把这个对象传入显示的方法中。 //可以这样来显示 public void ZhuJieMian(Vector<User> list){ for(User user:list){ Vector<Object> newRow = new Vector<Object>(); newRow.add(user.getName()); newRow.add(user.getId()); myTable.addRow(newRow); } } public List<User> selectDB(){ //这里写查询数据的代码 }
Waitxl 2013-10-18
  • 打赏
  • 举报
回复
引用 8 楼 AA5279AA 的回复:
前几天写的一个表格的例子,你参考下吧。。。 这个例子我测试过,应该没问题的

public Test4(){
     JFrame f=new JFrame();
    DefaultTableModel myTable=new DefaultTableModel();
    JTable table=new JTable(myTable);
    table.setPreferredScrollableViewportSize(new Dimension(550,30));
    myTable.addColumn("姓名");
    myTable.addColumn("MM");
    myTable.addColumn("NN");
    int number=3;
    int k=0;
    while(k++!=4){
        Vector<Object> newRow = new Vector<Object>();
        for (int i = 1; i <= number; i++) {
            newRow.add(i);
        }
        
        myTable.addRow(newRow);
    }
     
    table.setPreferredScrollableViewportSize(new Dimension(550,30));
    JScrollPane scrollPane=new JScrollPane(table);
    f.getContentPane().add(scrollPane,BorderLayout.CENTER);
    f.setTitle("Simple Table");
    f.pack();
    f.show();
    f.addWindowListener(new WindowAdapter() {
                        public void windowClosing(WindowEvent e) {
                          System.exit(0);
                        }
                      });
   }
   public static void main(String[] args){
     Test4 b=new Test4();
   }
  }
请问怎么在你写的表格基础上从数据库读取信息,然后显示在表格上?这是我根据你的表格写的代码,但是我不知道怎么把数据显示在表格上。

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.table.*;
import java.lang.Object.*;
import java.util.*;
import java.sql.*;
//import management_system.*;

public class ZhuJieMian extends JFrame implements ActionListener{
JButton b1=new JButton("商品管理");
JButton b2=new JButton("采购管理");
JButton b3=new JButton("销售管理");
JButton b4=new JButton("用户管理");
JButton b5=new JButton("权限管理");
JButton bb1=new JButton("查询");
JButton bb2=new JButton("添加");
JButton bb3=new JButton("修改");
JButton bb4=new JButton("删除");
JButton bb5=new JButton("确认修改");
        
JLabel  l1=new JLabel("商品编号");
JLabel  l2=new JLabel("商品名称");
JLabel  l3=new JLabel("商品价格");
JLabel  l4=new JLabel("生产日期");
JLabel  l5=new JLabel("生产地");
JLabel  l6=new JLabel("库存量");

JTextField t1=new JTextField(10);
JTextField t2=new JTextField(10);
JTextField t3=new JTextField(10);
JTextField t4=new JTextField(10);
JTextField t5=new JTextField(10);
JTextField t6=new JTextField(10);

String GoodsNum_input;
String GoodsName_input;
String GoodsName_price_input;
String Production_Data_input;
String Production_Place_input;
String Inventory_input;//库存量输入值

JTable table;
JScrollPane scroll;
Vector vector;
Vector rec_vector=new Vector();

public int screanWidth2,screanHeight2; 
//AbstractTableModel tm;
//Vector vector;
String title[]={"商品编号","商品名称","商品价格","生产日期","生产地","库存量"};

public static void main(String[] args){
  new ZhuJieMian();

 }

public    ZhuJieMian()
    {
        
   /*     Toolkit tool=getToolkit();   
        Dimension dim=tool.getScreenSize();    
        screanWidth2=dim.width;    
        screanHeight2=dim.height; 
         */
         
        
    JFrame f=new JFrame();
    DefaultTableModel myTable=new DefaultTableModel();
    JTable table=new JTable(myTable);
   // table.setPreferredScrollableViewportSize(new Dimension(550,100));
    for(int i=0;i<=5;i++)
    {
    myTable.addColumn(title[i]); 
    }
    int number=3;
    int k=0;
   while(k++!=20){
        Vector newRow = new Vector();
     /*   for (int i = 1; i <= number; i++) {
            newRow.add(2);
        }   */
         
        myTable.addRow(newRow);
    } 
      
    table.setPreferredScrollableViewportSize(new Dimension(600,220));
    JScrollPane scrollPane=new JScrollPane(table);
    getContentPane().add(scrollPane,BorderLayout.CENTER);
    
    
    setTitle("Simple Table");
    pack();
    show();
        
        setTitle("商品管理");    
        setLayout(null);
      //  add(table);
        add(b1);
        add(b2);
        add(b3);
        add(b4);
        add(b5);
        
        add(bb1);
        add(bb2);
        add(bb3);
        add(bb4);
        add(bb5);
        
        add(l1);
        add(l2);
        add(l3);
        add(l4);
        add(l5);
        add(l6);
        
        add(t1);
        add(t2);
        add(t3);
        add(t4);
        add(t5);
        add(t6);
        
        l1.setBounds(80,250,100,20);
        l2.setBounds(80,300,100,20);
        l3.setBounds(80,350,100,20);
        l4.setBounds(80,400,100,20);
        l5.setBounds(80,450,100,20);
        l6.setBounds(80,500,100,20);
        
        t1.setBounds(170,250,150,20);
        t2.setBounds(170,300,150,20);
        t3.setBounds(170,350,150,20);
        t4.setBounds(170,400,150,20);
        t5.setBounds(170,450,150,20);
        t6.setBounds(170,500,150,20);
        
        b1.setBounds(15, 535, 100, 20);
        b2.setBounds(130, 535, 100, 20);
        b3.setBounds(245, 535, 100, 20);
        b4.setBounds(360, 535, 100, 20);
        b5.setBounds(475, 535, 100, 20);
        
        bb1.setBounds(400,275,100,20);
        bb2.setBounds(400,330,100,20);
        bb3.setBounds(400,385,100,20);
        bb4.setBounds(400,440,100,20);
        bb5.setBounds(530,385,100,20);
        
         b4.addActionListener(this);
         b2.addActionListener(this);
         b3.addActionListener(this);
         bb1.addActionListener(this);
      // table.setBounds(0,0,1000,300);
        setBounds(360,20,650,600);
        setVisible(true);        
}

public void actionPerformed(ActionEvent e) {
       Connection con; 
       Statement sql; 
       ResultSet rs;  
       GoodsNum_input=t1.getText();
    
       if(e.getSource()==b2) {   
           new PurchaseManagement();
       this.setVisible(false);
       }
       if(e.getSource()==b3) {   
           new SalesManagement();
       this.setVisible(false);
       }
       if(e.getSource()==b4) {   
           new UserManagement();
       this.setVisible(false);
       }
       if(e.getSource()==bb1)
    {
           try
       {
                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                String url = "jdbc:odbc:SuperMaket";
                con = DriverManager.getConnection(url);
                sql = con.createStatement();
                rs = sql.executeQuery("SELECT * FROM CustomMessage where GoodsNum='"
                        + GoodsNum_input + "'");
                 if(rs.next()==true)
            {   
                vector.removeAllElements();
                rs.previous();
                 while(rs.next())
                 {
                     rec_vector.addElement(rs.getString(1));
                     rec_vector.addElement(rs.getString(2));
                     rec_vector.addElement(rs.getInt(3));
                     rec_vector.addElement(rs.getString(4));
                     rec_vector.addElement(rs.getString(5));
                     rec_vector.addElement(rs.getInt(6));
                     vector.addElement(rec_vector);
                     myTable.addRow(vector);
                 }
            }
                 else
            {
           JOptionPane.showMessageDialog(this,"帐户或密码错误\n请重新输入","提示",
                   JOptionPane.WARNING_MESSAGE); 
            }
       }
              catch (SQLException g)
       {
          System.out.println(g);
       } 
       catch (Exception e1)
       {
                // TODO Auto-generated catch block
                e1.printStackTrace();
        }    
    }            
  }
}
失落夏天 2013-10-17
  • 打赏
  • 举报
回复
前几天写的一个表格的例子,你参考下吧。。。 这个例子我测试过,应该没问题的

public Test4(){
     JFrame f=new JFrame();
    DefaultTableModel myTable=new DefaultTableModel();
    JTable table=new JTable(myTable);
    table.setPreferredScrollableViewportSize(new Dimension(550,30));
    myTable.addColumn("姓名");
    myTable.addColumn("MM");
    myTable.addColumn("NN");
    int number=3;
    int k=0;
    while(k++!=4){
        Vector<Object> newRow = new Vector<Object>();
        for (int i = 1; i <= number; i++) {
            newRow.add(i);
        }
        
        myTable.addRow(newRow);
    }
     
    table.setPreferredScrollableViewportSize(new Dimension(550,30));
    JScrollPane scrollPane=new JScrollPane(table);
    f.getContentPane().add(scrollPane,BorderLayout.CENTER);
    f.setTitle("Simple Table");
    f.pack();
    f.show();
    f.addWindowListener(new WindowAdapter() {
                        public void windowClosing(WindowEvent e) {
                          System.exit(0);
                        }
                      });
   }
   public static void main(String[] args){
     Test4 b=new Test4();
   }
  }
Waitxl 2013-10-17
  • 打赏
  • 举报
回复
[quote=引用 6 楼 huxiweng 的回复:] [quote=引用 5 楼 Waitxl 的回复:] [quote=引用 1 楼 huxiweng 的回复:] 见谅,菜鸟,刚刚学!
teemai 2013-10-17
  • 打赏
  • 举报
回复
引用 5 楼 Waitxl 的回复:
[quote=引用 1 楼 huxiweng 的回复:]

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.table.*;
import java.lang.Object.*;
import java.util.*;
import java.sql.*;

public class ZhuJieMian extends JFrame {
	JButton b1 = new JButton("商品管理");
	JButton b2 = new JButton("采购管理");
	JButton b3 = new JButton("销售管理");
	JButton b4 = new JButton("用户管理");
	JButton b5 = new JButton("权限管理");
	JLabel l1 = new JLabel("商品编号");
	JLabel l2 = new JLabel("商品名称");
	JLabel l3 = new JLabel("商品价格");
	JLabel l4 = new JLabel("生产日期");
	JLabel l5 = new JLabel("生产地");
	JLabel l6 = new JLabel("库存量");

	JTable table;
	JScrollPane scroll;
	
	public int screanWidth2, screanHeight2;
	AbstractTableModel tm;
	Vector vector;
	String title[] = { "商品编号", "商品名称", "商品价格", "生产日期", "生产地", "库存量" };

	public static void main(String[] args) {
		new ZhuJieMian();
	}

	public ZhuJieMian() {
		Toolkit tool = getToolkit();
		Dimension dim = tool.getScreenSize();
		screanWidth2 = dim.width;
		screanHeight2 = dim.height;
		createTable();
		setTitle("商品管理");
		setLayout(null);
		add(table);
		add(scroll);
		add(b1);
		add(b2);
		add(b3);
		add(b4);
		add(b5);
		b1.setBounds(15, 535, 100, 20);
		b2.setBounds(130, 535, 100, 20);
		b3.setBounds(245, 535, 100, 20);
		b4.setBounds(360, 535, 100, 20);
		b5.setBounds(475, 535, 100, 20);
		setBounds(360, 20, 600, 600);
		setVisible(true);

	}

	void createTable() {
		
		vector = new Vector();
		tm = new AbstractTableModel() {
			public int getColumnCount() {
				return title.length;
			}

			public int getRowCount() {
				return vector.size();
			}

			public Object getValueAt(int row, int column) {
				if (!vector.isEmpty())
					return ((Vector) vector.elementAt(row)).elementAt(column);
				else
					return null;
			}

			public void setValueAt(Object value, int row, int column) {

			}

			public String getcoulumnName(int column) {
				return title[column];
			}

			public Class getColumnClass(int c) {
				return getValueAt(0, c).getClass();
			}

			public boolean isCellEditable(int row, int column) {
				return false;
			}
		};
		table = new JTable(tm);
		table.setToolTipText("Display Query Result");
		table.setAutoResizeMode(table.AUTO_RESIZE_ALL_COLUMNS);
		table.setCellSelectionEnabled(false);
		table.setShowVerticalLines(true);
		table.setBounds(0, 0, 400, 200);
		scroll = new JScrollPane(table);
		scroll.setPreferredSize(new Dimension(400, 200));
		add(scroll);
	}
}
我添加了一句设置显示单元格之间的分割线 table.setShowHorizontalLines(true); 但是没有显示 再问一句 String title[] = { "商品编号", "商品名称", "商品价格", "生产日期", "生产地", "库存量" }; 这个数组里面的名称怎么显示在列表第一行中呢?[/quote] 你那个vector里没有数据,以前的一个demo,你参考下。你那个层级有点乱。

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import java.awt.Dimension;
import java.awt.GridLayout;
 
/** 
 * TableDemo is just like SimpleTableDemo, except that it
 * uses a custom TableModel.
 */
public class TableDemo extends JPanel {
    private boolean DEBUG = false;
 
    public TableDemo() {
        super(new GridLayout(1,0));
 
        JTable table = new JTable(new MyTableModel());
        table.setPreferredScrollableViewportSize(new Dimension(500, 70));
        table.setFillsViewportHeight(true);
 
        //Create the scroll pane and add the table to it.
        JScrollPane scrollPane = new JScrollPane(table);
 
        //Add the scroll pane to this panel.
        add(scrollPane);
    }
 
    class MyTableModel extends AbstractTableModel {
        private String[] columnNames = {"First Name",
                                        "Last Name",
                                        "Sport",
                                        "# of Years",
                                        "Vegetarian"};
        private Object[][] data = {
            {"Mary", "Campione",
             "Snowboarding", new Integer(5), new Boolean(false)},
            {"Alison", "Huml",
             "Rowing", new Integer(3), new Boolean(true)},
            {"Kathy", "Walrath",
             "Knitting", new Integer(2), new Boolean(false)},
            {"Sharon", "Zakhour",
             "Speed reading", new Integer(20), new Boolean(true)},
            {"Philip", "Milne",
             "Pool", new Integer(10), new Boolean(false)},
        };
 
        public int getColumnCount() {
            return columnNames.length;
        }
 
        public int getRowCount() {
            return data.length;
        }
 
        public String getColumnName(int col) {
            return columnNames[col];
        }
 
        public Object getValueAt(int row, int col) {
            return data[row][col];
        }
 
        /*
         * JTable uses this method to determine the default renderer/
         * editor for each cell.  If we didn't implement this method,
         * then the last column would contain text ("true"/"false"),
         * rather than a check box.
         */
        public Class getColumnClass(int c) {
            return getValueAt(0, c).getClass();
        }
 
        /*
         * Don't need to implement this method unless your table's
         * editable.
         */
        public boolean isCellEditable(int row, int col) {
            //Note that the data/cell address is constant,
            //no matter where the cell appears onscreen.
            if (col < 2) {
                return false;
            } else {
                return true;
            }
        }
 
        /*
         * Don't need to implement this method unless your table's
         * data can change.
         */
        public void setValueAt(Object value, int row, int col) {
            if (DEBUG) {
                System.out.println("Setting value at " + row + "," + col
                                   + " to " + value
                                   + " (an instance of "
                                   + value.getClass() + ")");
            }
 
            data[row][col] = value;
            fireTableCellUpdated(row, col);
 
            if (DEBUG) {
                System.out.println("New value of data:");
                printDebugData();
            }
        }
 
        private void printDebugData() {
            int numRows = getRowCount();
            int numCols = getColumnCount();
 
            for (int i=0; i < numRows; i++) {
                System.out.print("    row " + i + ":");
                for (int j=0; j < numCols; j++) {
                    System.out.print("  " + data[i][j]);
                }
                System.out.println();
            }
            System.out.println("--------------------------");
        }
    }
 
    /**
     * Create the GUI and show it.  For thread safety,
     * this method should be invoked from the
     * event-dispatching thread.
     */
    private static void createAndShowGUI() {
        //Create and set up the window.
        JFrame frame = new JFrame("TableDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
        //Create and set up the content pane.
        TableDemo newContentPane = new TableDemo();
        newContentPane.setOpaque(true); //content panes must be opaque
        frame.setContentPane(newContentPane);
 
        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }
 
    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}
Waitxl 2013-10-17
  • 打赏
  • 举报
回复
引用 1 楼 huxiweng 的回复:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.table.*;
import java.lang.Object.*;
import java.util.*;
import java.sql.*;

public class ZhuJieMian extends JFrame {
	JButton b1 = new JButton("商品管理");
	JButton b2 = new JButton("采购管理");
	JButton b3 = new JButton("销售管理");
	JButton b4 = new JButton("用户管理");
	JButton b5 = new JButton("权限管理");
	JLabel l1 = new JLabel("商品编号");
	JLabel l2 = new JLabel("商品名称");
	JLabel l3 = new JLabel("商品价格");
	JLabel l4 = new JLabel("生产日期");
	JLabel l5 = new JLabel("生产地");
	JLabel l6 = new JLabel("库存量");

	JTable table;
	JScrollPane scroll;
	
	public int screanWidth2, screanHeight2;
	AbstractTableModel tm;
	Vector vector;
	String title[] = { "商品编号", "商品名称", "商品价格", "生产日期", "生产地", "库存量" };

	public static void main(String[] args) {
		new ZhuJieMian();
	}

	public ZhuJieMian() {
		Toolkit tool = getToolkit();
		Dimension dim = tool.getScreenSize();
		screanWidth2 = dim.width;
		screanHeight2 = dim.height;
		createTable();
		setTitle("商品管理");
		setLayout(null);
		add(table);
		add(scroll);
		add(b1);
		add(b2);
		add(b3);
		add(b4);
		add(b5);
		b1.setBounds(15, 535, 100, 20);
		b2.setBounds(130, 535, 100, 20);
		b3.setBounds(245, 535, 100, 20);
		b4.setBounds(360, 535, 100, 20);
		b5.setBounds(475, 535, 100, 20);
		setBounds(360, 20, 600, 600);
		setVisible(true);

	}

	void createTable() {
		
		vector = new Vector();
		tm = new AbstractTableModel() {
			public int getColumnCount() {
				return title.length;
			}

			public int getRowCount() {
				return vector.size();
			}

			public Object getValueAt(int row, int column) {
				if (!vector.isEmpty())
					return ((Vector) vector.elementAt(row)).elementAt(column);
				else
					return null;
			}

			public void setValueAt(Object value, int row, int column) {

			}

			public String getcoulumnName(int column) {
				return title[column];
			}

			public Class getColumnClass(int c) {
				return getValueAt(0, c).getClass();
			}

			public boolean isCellEditable(int row, int column) {
				return false;
			}
		};
		table = new JTable(tm);
		table.setToolTipText("Display Query Result");
		table.setAutoResizeMode(table.AUTO_RESIZE_ALL_COLUMNS);
		table.setCellSelectionEnabled(false);
		table.setShowVerticalLines(true);
		table.setBounds(0, 0, 400, 200);
		scroll = new JScrollPane(table);
		scroll.setPreferredSize(new Dimension(400, 200));
		add(scroll);
	}
}
我添加了一句设置显示单元格之间的分割线 table.setShowHorizontalLines(true); 但是没有显示 再问一句 String title[] = { "商品编号", "商品名称", "商品价格", "生产日期", "生产地", "库存量" }; 这个数组里面的名称怎么显示在列表第一行中呢?
Defonds 版主 2013-10-17
  • 打赏
  • 举报
回复
引用 3 楼 Waitxl 的回复:
[quote=引用 2 楼 defonds 的回复:] 好久不见 swing 了。Java UI 编程,先不要嵌套那么多,眼见为实,步步为营吧,这一步成功了再加下一个 feature。
意思是swing已经不用了?这个是作业[/quote]没这个意思,我们用的少而已。多了解下 Java UI 还是很能深入理解 Java 编程思想的。一开始就直接扎进 SSH 项目反而会不知所以。
Waitxl 2013-10-17
  • 打赏
  • 举报
回复
引用 2 楼 defonds 的回复:
好久不见 swing 了。Java UI 编程,先不要嵌套那么多,眼见为实,步步为营吧,这一步成功了再加下一个 feature。
意思是swing已经不用了?这个是作业
Defonds 版主 2013-10-17
  • 打赏
  • 举报
回复
好久不见 swing 了。Java UI 编程,先不要嵌套那么多,眼见为实,步步为营吧,这一步成功了再加下一个 feature。
teemai 2013-10-17
  • 打赏
  • 举报
回复

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.table.*;
import java.lang.Object.*;
import java.util.*;
import java.sql.*;

public class ZhuJieMian extends JFrame {
	JButton b1 = new JButton("商品管理");
	JButton b2 = new JButton("采购管理");
	JButton b3 = new JButton("销售管理");
	JButton b4 = new JButton("用户管理");
	JButton b5 = new JButton("权限管理");
	JLabel l1 = new JLabel("商品编号");
	JLabel l2 = new JLabel("商品名称");
	JLabel l3 = new JLabel("商品价格");
	JLabel l4 = new JLabel("生产日期");
	JLabel l5 = new JLabel("生产地");
	JLabel l6 = new JLabel("库存量");

	JTable table;
	JScrollPane scroll;
	
	public int screanWidth2, screanHeight2;
	AbstractTableModel tm;
	Vector vector;
	String title[] = { "商品编号", "商品名称", "商品价格", "生产日期", "生产地", "库存量" };

	public static void main(String[] args) {
		new ZhuJieMian();
	}

	public ZhuJieMian() {
		Toolkit tool = getToolkit();
		Dimension dim = tool.getScreenSize();
		screanWidth2 = dim.width;
		screanHeight2 = dim.height;
		createTable();
		setTitle("商品管理");
		setLayout(null);
		add(table);
		add(scroll);
		add(b1);
		add(b2);
		add(b3);
		add(b4);
		add(b5);
		b1.setBounds(15, 535, 100, 20);
		b2.setBounds(130, 535, 100, 20);
		b3.setBounds(245, 535, 100, 20);
		b4.setBounds(360, 535, 100, 20);
		b5.setBounds(475, 535, 100, 20);
		setBounds(360, 20, 600, 600);
		setVisible(true);

	}

	void createTable() {
		
		vector = new Vector();
		tm = new AbstractTableModel() {
			public int getColumnCount() {
				return title.length;
			}

			public int getRowCount() {
				return vector.size();
			}

			public Object getValueAt(int row, int column) {
				if (!vector.isEmpty())
					return ((Vector) vector.elementAt(row)).elementAt(column);
				else
					return null;
			}

			public void setValueAt(Object value, int row, int column) {

			}

			public String getcoulumnName(int column) {
				return title[column];
			}

			public Class getColumnClass(int c) {
				return getValueAt(0, c).getClass();
			}

			public boolean isCellEditable(int row, int column) {
				return false;
			}
		};
		table = new JTable(tm);
		table.setToolTipText("Display Query Result");
		table.setAutoResizeMode(table.AUTO_RESIZE_ALL_COLUMNS);
		table.setCellSelectionEnabled(false);
		table.setShowVerticalLines(true);
		table.setBounds(0, 0, 400, 200);
		scroll = new JScrollPane(table);
		scroll.setPreferredSize(new Dimension(400, 200));
		add(scroll);
	}
}
Waitxl 2013-10-17
  • 打赏
  • 举报
回复
引用 8 楼 AA5279AA 的回复:
前几天写的一个表格的例子,你参考下吧。。。 这个例子我测试过,应该没问题的

public Test4(){
     JFrame f=new JFrame();
    DefaultTableModel myTable=new DefaultTableModel();
    JTable table=new JTable(myTable);
    table.setPreferredScrollableViewportSize(new Dimension(550,30));
    myTable.addColumn("姓名");
    myTable.addColumn("MM");
    myTable.addColumn("NN");
    int number=3;
    int k=0;
    while(k++!=4){
        Vector<Object> newRow = new Vector<Object>();
        for (int i = 1; i <= number; i++) {
            newRow.add(i);
        }
        
        myTable.addRow(newRow);
    }
     
    table.setPreferredScrollableViewportSize(new Dimension(550,30));
    JScrollPane scrollPane=new JScrollPane(table);
    f.getContentPane().add(scrollPane,BorderLayout.CENTER);
    f.setTitle("Simple Table");
    f.pack();
    f.show();
    f.addWindowListener(new WindowAdapter() {
                        public void windowClosing(WindowEvent e) {
                          System.exit(0);
                        }
                      });
   }
   public static void main(String[] args){
     Test4 b=new Test4();
   }
  }
请问这个语句有什么用? table.setPreferredScrollableViewportSize(new Dimension(550,30));
runnersun 2013-10-17
  • 打赏
  • 举报
回复
支持defonds的建议,复杂的界面可以一个一个来

51,409

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧