有才华的人,别忘记给滋润你的那块土壤施肥

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  28 随笔 :: 5 文章 :: 147 评论 :: 0 Trackbacks

        下周完我就工作满一年啦。回想大部分的时间都被好奇心给占去了,这个组件好玩弄一下,那个好玩也弄一下,最后手里还是什么都没得,而本身的工作是基于swing,倒是没花多少精力,最后也是对swing一知半解,今天想研究研究下talbe,却发现被这么个问题给卡住了。
       是这样的给TableModel传入表头和内容,但是直接将table加到frame中去,table显示不了表头如图1,但是将table放到JScrollPane中去,却能显示,如图2。

       

                                     图一      
             
                             图二                                                              
    为什么这样?实在是弄不明白,不知道有那位高手指点下不?
     源码如下:

package kissJava.JTable;

import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
public class TestSortedTable {
    
public static void main(String args[]){
        JFrame frame 
= new JFrame("JTable的header测试");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Object rows[][] 
={
                
"王明""中国"44 },
                
"姚明""中国"25 },
                
"赵子龙""西蜀"1234 },
                
"曹操""北魏"2112 },
                
"Bill Gates""美国"45 },
                
"Mike""英国"33 } }
;
        String columns[] 
= "姓名""国籍""年龄" };
        TableModel model 
= new DefaultTableModel(rows, columns);
        JTable table 
= new JTable(model);
        
        RowSorter
<TableModel> sorter = new TableRowSorter<TableModel>(model);
        table.setRowSorter(sorter);
        
        JScrollPane pane 
= new JScrollPane(table);
        frame.add(pane, BorderLayout.CENTER);
//显示header        
    
//    frame.add(table, BorderLayout.CENTER);//不显示header    
        frame.setSize(300150);
        frame.setVisible(
true);
  }

}

posted on 2008-03-21 12:31 kissjava 阅读(993) 评论(6)  编辑  收藏 所属分类: swing

评论

# re: 关于JTable,为何这样? 2008-03-21 13:52 枯宽
刚找了下,发现不用JScrollPane的时候,加上frame.getContentPane().add(table.getTableHeader(), BorderLayout.NORTH); 也能显示header,可swing为什么要这样???  回复  更多评论
  

# re: 关于JTable,为何这样? 2008-03-21 15:42 枯宽
呼呼。找了jdk。上面说就那样要么用JScollPane要么add(table.getTableHeader())

看了源代码流程是这样的:
JTable-->initializeLocalVars()-->setTableHeader(createDefaultTableHeader());

JTable-->addNotify()-->configureEnclosingScrollPane()-->(JScollPane)setColumnHeaderView(Component view)-->setView(Component view)

...............................  回复  更多评论
  

# re: 关于JTable,为何这样? 2008-03-21 17:20 林子
技术高手..小M来捧捧场了.  回复  更多评论
  

# re: 关于JTable,为何这样? 2008-03-30 09:38 even
我也来逛逛, 现在完全听不懂了。 重新编辑博客更好吧,为什么放在评论里,老江多出手啊!博客就是要经常更新才行,像我家那块地,已经是死水了,好比政府网站,万年不变,后来自己都不愿看了,对了,放点自拍啊!  回复  更多评论
  

# re: 关于JTable,为何这样? 2009-03-14 15:39 hwl
@枯宽
你好!看了你的帖子受益匪浅,我也正有这方面的疑问。
1.你说你找了jdk,上面说就那样,要么用jscrollpane要么用add()。我也去找了一下,怎么我没找到?我用的是Java 2 SE 6 Documentation.是不是我用的jdk不对,我甚至都没看到有关信息,这还是我在写代码时发现的。
2.你所列的源代码流程是怎样弄到的,是看src.zip吗?
真的希望你能发封email给我,给我指点迷津。我的email是
hwljava@163.com
期待你的回复!谢谢!  回复  更多评论
  

# re: 关于JTable,为何这样? 2009-03-14 15:52 hwl
不好意思,刚才第一个问题搞错了,jdk里有这个说明的。我想问的是为什么java要弄成这样?这不是多此一举吗?我刚用JTable(Object[][],Object[]columnname)时,看到这个构造方法里说按照指定的columnname构造表格时还以为这表格就已经包含有表头了。  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: