1. 程式人生 > >Swing元件中JList的運用

Swing元件中JList的運用

一丶簡述
JTable是將資料以表格的形式顯示給使用者看的一種元件,它包括行和列,其中每列代表一種屬性,例如:學號,姓名,成績等等。而每行代表的是一個實體,例如一個學生。在JTable中,預設情況下列會平均分配父容器的寬度,你可以通過滑鼠改變列的寬度,還可以交換列的排列順。下面進入正題,介紹JTable的一些建構函式,JTable有許多構造函,這裡只對部分建構函式和功能進行介紹。
二、構造一個 JTable
構造一個 JTable來顯示二維陣列rowData 中的值,其列名稱為 columnNames。
程式碼如下


public JTableTest()
{
    intiComponent
(); } /** * 初始化窗體元件 */ private void intiComponent() { /* * 設定JTable的列名 */ String[] columnNames = { "姓名", "學號", "性別", "工期", "學院", "學校" }; Object[][] obj = new Object[2][6]; for (int i = 0; i < 2; i++) { for (int j = 0; j < 6; j++) { switch
(j) { case 0: obj[i][j] = "甲乙丙 "; break; case 1: obj[i][j] = "123456"; break; case 2: obj[i][j] = "男"; break; case
3: obj[i][j] = "十年"; break; case 4: obj[i][j] = "電腦科學與應用數學學院"; break; case 5: obj[i][j] = "xx學院"; break; } } } /* * JTable的其中一種構造方法 */ JTable table = new JTable(obj, columnNames); /* * 設定JTable的列預設的寬度和高度 */ TableColumn column = null; int colunms = table.getColumnCount(); for(int i = 0; i < colunms; i++) { column = table.getColumnModel().getColumn(i); /*將每一列的預設寬度設定為100*/ column.setPreferredWidth(100); } /* * 設定JTable自動調整列表的狀態,此處設定為關閉 */ table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); /*用JScrollPane裝載JTable,這樣超出範圍的列就可以通過滾動條來檢視*/ JScrollPane scroll = new JScrollPane(table); scroll.setSize(300, 200); add(scroll); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.pack(); } public static void main(String[] args) { new JTableTest(); }

執行結果如圖:
在這裡插入圖片描述

三、構造一個JTable
構造一個JTable,使用資料模型dm、預設的列模型和預設的選擇模型對其進行初始化。

程式碼如下:


/**
 * 初始化窗體元件 
 */
private void intiComponent()
{
    JTable table = new JTable(new MyTableModel());

    /* 用JScrollPane裝載JTable,這樣超出範圍的列就可以通過滾動條來檢視 */
    JScrollPane scroll = new JScrollPane(table);
    add(scroll);
    this.setVisible(true);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.pack();
}

private class MyTableModel extends AbstractTableModel
{
    /*
     * 這裡和剛才一樣,定義列名和每個資料的值
     */
    String[] columnNames =
            { "姓名", "學號", "年齡", "成績", "選擇" };
    Object[][] data = new Object[2][5];

    /**
     * 構造方法,初始化二維陣列data對應的資料 
     */
    public MyTableModel()
    {
        for (int i = 0; i < 2; i++)
        {
            for (int j = 0; j < 5; j++)
            {
                if (0 == i)
                {
                    switch (j)
                    {
                        case 0:
                            data[i][j] = "甲";
                            break;
                        case 1:
                            data[i][j] = "20170101";
                            break;
                        case 2:
                            data[i][j] = "18";
                            break;
                        case 3:
                            data[i][j] = "90";
                            break;
                        case 4:
                            data[i][j] = new Boolean(false);
                            break;
                    }
                }
                if (1 == i)
                {
                    switch (j)
                    {
                        case 0:
                            data[i][j] = "乙";
                            break;
                        case 1:
                            data[i][j] = "20170102";
                            break;
                        case 2:
                            data[i][j] = "18";
                            break;
                        case 3:
                            data[i][j] = "63";
                            break;
                        case 4:
                            data[i][j] = new Boolean(false);
                            break;
                    }
                }
            }
        }
    }

    // 以下為繼承自AbstractTableModle的方法,可以自定義  
    /**
     * 得到列名 
     */
    @Override
    public String getColumnName(int column)
    {
        return columnNames[column];
    }

    /**
     * 重寫方法,得到表格列數 
     */
    @Override
    public int getColumnCount()
    {
        return columnNames.length;
    }

    /**
     * 得到表格行數 
     */
    @Override
    public int getRowCount()
    {
        return data.length;
    }

    /**
     * 得到資料所對應物件 
     */
    @Override
    public Object getValueAt(int rowIndex, int columnIndex)
    {
        return data[rowIndex][columnIndex];
    }

    /**
     * 得到指定列的資料型別 
     */
    @Override
    public Class<?> getColumnClass(int columnIndex)
    {
        return data[0][columnIndex].getClass();
    }

    /**
     * 指定設定資料單元是否可編輯.這裡設定"姓名","學號"不可編輯 
     */
    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex)
    {
        if (columnIndex < 2)
            return false;
        else
            return true;
    }

    /**
     * 如果資料單元為可編輯,則將編輯後的值替換原來的值 
     */
    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex)
    {
        data[rowIndex][columnIndex] = aValue;
        /*通知監聽器資料單元資料已經改變*/
        fireTableCellUpdated(rowIndex, columnIndex);
    }

}

public static void main(String[] args)
{
    new JTableTest();
}```
執行結果如下:
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/2018112519230240.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hjc29jb29s,size_16,color_FFFFFF,t_70)




這裡要指出的是每個資料單元的都有個cell renderer根據其資料型別將資料進行繪畫顯示出來。預設情況下boolean型別對應的是CheckBox物件,Object型別是將物件的字元顯示出來,ImageIcon是將圖片以lable形式顯示出來等等.具體的可以檢視API文件.

相關推薦

Swing元件JList運用

一丶簡述 JTable是將資料以表格的形式顯示給使用者看的一種元件,它包括行和列,其中每列代表一種屬性,例如:學號,姓名,成績等等。而每行代表的是一個實體,例如一個學生。在JTable中,預設情況下列會平均分配父容器的寬度,你可以通過滑鼠改變列的寬度,還可以交換

JAVA第三次作業——Swing元件Jist的運用

0x00  簡述 Swing是GUI(圖形使用者介面)開發工具包,內容豐富,簡單易用,所以本篇文章中只編寫Swing中的Jlist元件,其他Swing中的元件相關內容這裡筆者就不介紹了,文章中未涉及的元件讀者請自行去查閱相關資料。 0x01  Jframe框架

Swing元件面板(JPanel)的使用

JPanel元件定義面板實際上是一種容器元件,用來容納各種其他輕量級元件。此外,使用者還可以用這種面板容器繪製圖形。 JPanel的構造方法如下: JPanel():建立具有雙緩衝和流佈局(FlowLayout)的面板。 JPanel(LayoutManager layout):建立具有制定

(譯)函式式元件在Vue.js運用

你是否曾經遇到過這樣一個場景,你有個需求需要引入一個第三方庫,然而你只需要使用這個庫裡面某一個功能,如果這個庫不支援分模組匯出的話,就會因為引入整個庫而導致專案體積變大,進而影響專案載入效能。 再比如,下拉列表、時間選擇器或者自動填充屬性等自定義控制元件都是非常複雜的,需要考慮很多邊緣的複雜

javaswing元件、主要三大布局管理器的應用

一、JFrame的簡單運用: package com.test1; import java.awt.*; import javax.swing.*; public class Demo1_1 extends JFrame{ //定義按鈕元件 JButton jb1=n

淺談redux-form在項目運用

actions 想象 數據校驗 搭建 swe sage Redux aar 狀態 準則 先說一下redux的使用場景,因為如果沒有redux,那更不會有redux-form。 redux基於Flux架構思想,是一個狀態管理框架,其目標是解決單頁面應用中復雜的狀態管理問題。

堆 在遊戲運用

大於 key eas 序列 keyword 最大 spa ack -h * 定時器的應用與原理: 遊戲中。活動的狀態、遊戲數據的保存與載入、BOSS刷新時間等等,都可能會用到定時器。而堆對於定時器的實現有著至關關鍵的數據。 定時器的工作原理事實上不難,就是內部保

數組運用

() _array 維數 關於 == prev 支持 而且 回調 通過foreach來遍歷一個數組(重要,要求掌握) 語法:foreach(數組名 as $value) 還有一個用法:語法: Foreach(數組名 as $key =>$value) 3)l

【整理】分塊在數論運用(初稿)(各位幫幫忙填下坑,裏面列的好多都不會)

body element set max main lucas定理 們的 prev 成了 之前已經做過幾個分塊的水題,導致nmphy居然口出狂言:“高中學過,簡單”。(現在nmphy收回他的話,並且跪著寫下這篇總結) 前言: 由於數

【ASP.NET 系列】淺談緩存技術在ASP.NET運用

進行 喜歡 之間 framework cnblogs 磁盤 onf lin bug 本篇文章雖不談架構,但是Cache又是架構中不可或缺的部分,因此,在講解Cache的同時,將會提及到部分架構知識,關於架構部分,讀者可以不用理解,或者直接跳過涉及架構部分的內容, 你只

redis在項目運用

all 鼠標 pivot 網絡 enc 監聽 code ogl 監聽端口 先引用百度百科的一段話吧,具體可以到百科查看吧。 Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基於內存亦可持久化的日誌型、Key-Value數據庫,並提供多種語言的API。從2

C++在低延遲交易系統運用

C++11 C++ Linux 多線程 模板 C++在低延遲交易系統中的運用在金融衍生品市場中,做市商(Market Maker)肩負著為期權期貨產品報價(Quoting)的義務。“低延遲”對於這類公司而言至關重要,如果你的速度比別人快,同樣的報價就可以優先成交,錯誤報價可以快速撤回,還可

如何在Linux系統熟練運用KILL命令,純幹貨!!!

sigsegv 忽略 特定 shell 不可 結束 幹貨 n+1 不發送 1.命令格式: kill[參數][進程號] 2.命令功能: 發送指定的信號到相應進程。不指定型號將發送SIGTERM(15)終止指定進程。如 果任無法終止該程序可用“-KILL” 參數,其發送的信號為

iOS開發多線程在實際項目運用

實現 tps 性能 url 異步 通信 ... class 多線程並發 實際項目開發中為了能夠給用戶更好的體驗,有些延時操作我們都會放在子線程中進行。 今天我們就來聊聊多線程在實際項目中的運用。 我們先來看看多線程的基礎知識: 1.多線程的原理: 同一時間,

Excel靈活運用運算(乘)快速將文本格式批量改為數字格式

都是 fff oss blog ado 解決 ext term 數據類型 我們在使用excel過程中,在導入數據的時候,很多數據都是以文本形式存在的,可能不方便參與計算或設置數據類型,此時可以靈活運用excel運算(乘)快速將文本格式改為數字格式。【常見問題】如何把一列文本

IE8select控制元件的option顯示不全解決方案

 select控制元件,若option的內容過長,則IE8中顯示不全,導致其內容無法顯示出來。  目前測試IE9、IE11 select控制元件都沒有問題。 其中select,可以只針對個別的select,只要替換相應的class即可。  解決方案:

CentOS SUID/SGID/SBIT許可權與其在專案協作運用

本文總結自鳥哥的linux私房菜 檔案與目錄管理篇:http://linux.vbird.org/linux_basic/0220filemanager.php 目錄 目錄 一、幾個特殊許可權

vue $emit子元件傳出多個引數,如何在父元件在接收所有引數的同時新增自定義引數

前言 很多時候用$emit攜帶引數傳出事件,並且又需要在父元件中使用自定義引數時,這時我們就無法接受到子元件傳出的引數了。找到了兩種方法可以同時新增自定義引數的方法。 方法一 子元件傳出單個引數時: // 子元件 this.$emit('test',this.param) // 父元件 @test=

基於vue專案的元件匯入mui框架初始化滑動等效果時需移除嚴格模式的問題

基於vue專案的元件中匯入mui框架初始化滑動等效果時,控制檯報錯:Uncaught TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the ar

分頁控制元件的數字按鈕計算方法

計算思想: 以當前頁碼為標杆,使用卡尺的思想,左移,右移,再左移,最後得到起始、結束位置的按鈕頁碼。 @{ var param = new { Page = 18, //當前頁 NumberButton = 5,//數字按鈕的個數