JAVA第三次作業——Swing元件中Jist的運用
0x00 簡述
Swing是GUI(圖形使用者介面)開發工具包,內容豐富,簡單易用,所以本篇文章中只編寫Swing中的Jlist元件,其他Swing中的元件相關內容這裡筆者就不介紹了,文章中未涉及的元件讀者請自行去查閱相關資料。
0x01 Jframe框架
九層之臺,起於累土,我們的程式也是如此,要先從地基打起,Jframe就是我們的地基。 JFrame是一個容器,它是各種Swing元件的前置條件,所有的Swing元件都在這上面呈現。下面是一個簡單的Jframe例子:
import javax.swing.JFrame; import javax.swing.WindowConstants; public class JframeTest { public void CreateJFrame() { JFrame jf = new JFrame("JframeTest"); // 設定視窗標題 jf.setVisible(true); // 設定窗體可視 jf.setSize(400, 400); // 設定窗體大小 jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new JframeTest().CreateJFrame(); } }
執行後如圖所示 這樣,我們就有了一個可以用來展示的視窗,接下來我們開始詳細介紹Jlist元件的用法。
0x02 構造一個簡單的JList
使用JList函式便可以很輕易的建立一個列表
import java.awt.Container; import java.awt.GridLayout; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.Vector; import javax.swing.*; public class JList1 { public static void main(String[] args) { JFrame f=new JFrame("JListTest"); Container contentpane=f.getContentPane(); f.setVisible(true); // 設定窗體可視 f.setSize(400, 400); // 設定窗體大小 f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); f.setLayout(new GridLayout(2, 1)); //設定列表行和列數 String[] s=new String[]{"面向物件程式設計","資料結構","毛澤東思想和中國特色社會主義理論體系概論","離散數學","大學物理"}; Vector v=new Vector(); v.addElement("周景"); v.addElement("何可可"); v.addElement("莫陽生"); v.addElement("朱永嬌"); v.addElement("莫雲飛"); JList jList=new JList(s); jList.setBorder(BorderFactory.createTitledBorder("您最喜歡哪門課呢")); JList jList2=new JList(v); jList2.setBorder(BorderFactory.createTitledBorder("你最喜歡哪位老師呢")); contentpane.add(new JScrollPane(jList)); contentpane.add(new JScrollPane(jList2)); contentpane.add(jList2); f.pack(); f.show(); f.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); } }
執行後如圖所示
在上述程式碼中,我們可以看到JList既可以用陣列Object[]也可以用集合Vector<?>方法來建立。而用集合方法建立的列表無法改變專案的數量。 由於直接建立的列表沒有滾動條,會對使用者的使用產生麻煩,所以上面的列表都是在作為 JScrollPane 的視口檢視下實現的。
0x03 為選項新增相應動作
當用戶選中其中一項時,我們想讓使用者瞭解一些關於選中專案的一些資訊,這時候就要用上監聽器。
jList.addMouseListener(new MouseAdapter() //列表框新增滑鼠事件 { public void mousePressed(MouseEvent e) { int i = jList.getSelectedIndex() + 1; Object path[] = v.toArray(); if(i == 1) { jList.setBackground(Color.white); //設定背景色 System.out.println("已選擇第" + i + "項"); } if(i == 2) { jList.setBackground(new Color(183,83,168)); System.out.println("已選擇第" + i + "項"); } if(i == 3) { jList.setBackground(new Color(245, 129, 35)); System.out.println("已選擇第" + i + "項"); } if(i == 4) { jList.setBackground(new Color(108,72,78)); System.out.println("已選擇第" + i + "項"); } if(i == 5) { jList.setBackground(new Color(46, 129, 48)); System.out.println("已選擇第" + i + "項"); } } }
執行後如圖所示
由於筆者水平有限暫無法修改JList背景圖片,筆者在這隻能將就修改其背景顏色,如讀者技術高超或感興趣的話,可以參考小結中給予的連結。 通過為每個選項新增監聽器的方法,我們改變了背景顏色來提醒使用者,控制檯輸出相應資料來為程式下一步動作提供條件。
0x04 小結
本章專門介紹了JList的使用方法,JList和JCombobox元件從本質上說是類似的,它們都是提供了一系列列表資料供使用者選擇,從表現形式上可以把JCombobox看做一個JList和一個JTextField組成,通過callback機制回撥選擇專案。JList並沒有複雜的UI,當然也就沒有複雜的畫面了,所以對於提高JList的畫面表現,一般需要繼承ListCellRenderer加入自己的表現樣式,當然筆者在查閱相關方法時已神志不清,故未在文中實現,實屬可惜。