Swing组件的另类嵌套

  • Post author:
  • Post category:其他


最近重温Swing,尝试了以前没试过的事情。大家可能都知道,J字头的组件(JComponent)都是awt.Container的子类,所以理论上所有的JComponent都可以当作容器来用,比如说JButton或者JMenuItem可以包含一个文本框。以前一直以为这只是概念上的,从来没有试过,如今尝试一下,发现真的可以,有图为证:


swing

图上的菜单中含有个文本框,最下面是个按钮,也有一个文本框,可以正常使用。需要注意的是菜单一定要显式指定大小,否则很可能看不到文本框:

JMenuItem weiredMenuItem = new JMenuItem();
JTextArea textArea = new JTextArea();
textArea.setPreferredSize(new Dimension(100, 30)); // 不是必须的
weirdMenuItem.setPreferredSize(new Dimension(100, 50)); // 关键,否则太小了看不到文本框
weirdMenuItem.setLayout(new FlowLayout());
weirdMenuItem.add(textArea);

个人认为,这种嵌套提供了无限的可能性(比如嵌套一个JPanel)。以前以为只有WPF能这样干,其实Swing也是如此灵活。JDK 7中添加了JLayer和对透明窗口(所谓Per-pixel alpha blending)的支持,对于编写酷炫界面又提供了极大的帮助,Swing真是宝刀不老,历久弥新。

转载于:https://www.cnblogs.com/leading/archive/2011/11/22/2258492.html