Swing組件的另類嵌套
最近重溫Swing,嘗試了以前沒試過的事情。大家可能都知道,J字頭的組件(JComponent)都是awt.Container的子類,所以理論上所有的JComponent都可以當(dāng)作容器來用,比如說JButton或者JMenuItem可以包含一個(gè)文本框。以前一直以為這只是概念上的,從來沒有試過,如今嘗試一下,發(fā)現(xiàn)真的可以,有圖為證:
圖上的菜單中含有個(gè)文本框,最下面是個(gè)按鈕,也有一個(gè)文本框,可以正常使用。需要注意的是菜單一定要顯式指定大小,否則很可能看不到文本框:
JMenuItem weiredMenuItem = new JMenuItem(); JTextArea textArea = new JTextArea(); textArea.setPreferredSize(new Dimension(100, 30)); // 不是必須的 weirdMenuItem.setPreferredSize(new Dimension(100, 50)); // 關(guān)鍵,否則太小了看不到文本框 weirdMenuItem.setLayout(new FlowLayout()); weirdMenuItem.add(textArea);
個(gè)人認(rèn)為,這種嵌套提供了無限的可能性(比如嵌套一個(gè)JPanel)。以前以為只有WPF能這樣干,其實(shí)Swing也是如此靈活。JDK 7中添加了JLayer和對(duì)透明窗口(所謂Per-pixel alpha blending)的支持,對(duì)于編寫酷炫界面又提供了極大的幫助,Swing真是寶刀不老,歷久彌新。


浙公網(wǎng)安備 33010602011771號(hào)