BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #16939同步于 2010/12/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

【请教】有关java swing的问题

handspeaker
2010/12/18镜像同步12 回复
现在在用java swing编一个软件。觉得swing里面的类的函数各种诡异。 比如:我把一个JButton放在一个JPanel里面,JPanel是borderlayout布局(或者随便哪个布局),JButton的setPreferredSize()方法竟然就没有效果了,就是说size不能调整了,还有其他的一些方法也没有效果了。不太明白这是怎么回事,难道应用了一个布局,连放在布局里面的控件的大小、对齐方式都不能调了吗?恳请各位大牛帮我解答一下这个问题 ps.我用的ide是eclipse,没有用任何可以直接拖控件的插件、ide,想体验一下swing里面各种控件的各种方法。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
ericyosho机器人#1 · 2010/12/18
netbeans啊 还有,我猜,setpreferredsize只是一个建议吧,程序具体用不用这个size完全不好说。
handspeaker机器人#2 · 2010/12/19
嗯,很多人都推荐做GUI用netbeans,自己想尝试一下只编代码做gui,不过发现很难做。 其实不止setpreferredsize,其他那些setsize全都不好用…… 【 在 ericyosho 的大作中提到: 】 : netbeans啊 : 还有,我猜,setpreferredsize只是一个建议吧,程序具体用不用这个size完全不好说。 : -- : ...................
ox机器人#3 · 2010/12/19
应该是布局管理器接管了这些吧 好久没写过swing了,可以查查相关的javadoc 【 在 handspeaker (handspeaker) 的大作中提到: 】 : 嗯,很多人都推荐做GUI用netbeans,自己想尝试一下只编代码做gui,不过发现很难做。 : 其实不止setpreferredsize,其他那些setsize全都不好用……
handspeaker机器人#4 · 2010/12/19
嗯,好的,我再研究研究 【 在 ox 的大作中提到: 】 : 应该是布局管理器接管了这些吧 : 好久没写过swing了,可以查查相关的javadoc : 【 在 handspeaker (handspeaker) 的大作中提到: 】 : ...................
irican机器人#5 · 2010/12/19
【 在 ox 的大作中提到: 】 : 应该是布局管理器接管了这些吧 : 好久没写过swing了,可以查查相关的javadoc : 【 在 handspeaker (handspeaker) 的大作中提到: 】 : ................... 恩那,lz可以先用netbeans的ui来布局,然后反过来查看它生成的代码,这样学起来快好多。Swing是个设计精良但是使用麻烦的东东,需要有些耐心去研究。而且感觉跟学C++一样,无底洞。。。当年我用Swing都做了n个项目了,以为自己懂的差不多了,后来与另一个Swing的专家聊天时,发现自己连什么是event dispatch thread都不懂。。。lz加油~~~~
handspeaker机器人#6 · 2010/12/19
多谢大牛指点! 看来我要好好研究一下swing,觉得UI的设计也是门很深奥的学问啊,我会努力的! 【 在 irican 的大作中提到: 】 : : 应该是布局管理器接管了这些吧 : : 好久没写过swing了,可以查查相关的javadoc : : 【 在 handspeaker (handspeaker) 的大作中提到: 】 : ...................
busyter机器人#7 · 2010/12/19
swt,试试吧
stona126机器人#8 · 2010/12/19
【 在 handspeaker 的大作中提到: 】 : 现在在用java swing编一个软件。觉得swing里面的类的函数各种诡异。 : 比如:我把一个JButton放在一个JPanel里面,JPanel是borderlayout布局(或者随便哪个布局),JButton的setPreferredSize()方法竟然就没有效果了,就是说size不能调整了,还有其他的一些方法也没有效果了。不太明白这是怎么回事,难道应用了一个布局,连放在布局里面的控件的大小、对齐方式都不能调了吗?恳请各位大牛帮我解答一下这个问题 : ps.我用的ide是eclipse,没有用任何可以直接拖控件的插件、ide,想体验一下swing里面各种控件的各种方法。 : ................... 在布局管理器里设置这些,大小,对齐方式等等,推荐GridBagLayout,个人感觉比较好用 :)
GacktCamui机器人#9 · 2010/12/20
请去研究布局管理器。。。除非你用重量组件的pack()方法强制要求容器和组件变为你希望的大小(setPreferredSize),否则各种布局对组件和容器的处理是不同的,比如常见的几种: FlowLayout(流式布局),setPreferredSize就是有效的,流式布局会根据你希望组件显示出来的大小来流动布局,一行至少能有一个组件,放下一个时如果这一行不够的时候就直接换行 BoxLayout(箱式布局),setPreferredSize无效,当容器不足以显示所有组件时,会被缩到该组件的最小大小,当容易足够大时,会均匀地占满横向(或纵向,与你设的箱式布局方向有关) GridLayout,setPreferredSize也是无效的,它会自动根据GridLayout的行列数,把容器平均划分成棋盘格,然后用组件填满每一个格子。 BorderLayout,setPreferredSize是有效的,但与你的重量组件(继承自AWT的那些Frame、Dialog之类的东西)或者容器大小也有关。比如你设置了窗体为200x200,你只放了左侧的一个组件,且希望它为100x100--setPreferredSize(new Dimension(100, 100)),OK,宽度100没问题,但高度必须填满200高的窗体,所以它就变成了100x200,所以也算是有效的,部分有效算是…… GridBagLayout是最强大的布局,可以把组件排得非常美观,你可以通过结合GridBagConstraints、Insets这两个类设置各个组件在单元格中的权重,拉伸方式、四周间隔等等,setPreferredSize是有效的,关键取决于你给的GridBagLayout参数内容。在结合其他布局以后,可以组合出你想要的各种界面布局形式。 当你用pack()来强制要求组件达到你希望的大小,那么setPreferredSize一般可以起作用,我说一般,是当你连重量组件(或者所属容器)也setPreferredSize的话,就以重量组件(或所属容器)的希望大小为主导(因为矛盾的情况还真可能存在,不,是非常多地存在啊。。。你总得给布局管理器一条活路是吧。。。) 不过要记住的一点是setPreferredSize真的只是一个preferred的东西,为什么是preferred,是说希望最好是这样,可是它能否起作用其实还跟布局方式有关。 IDE是浮云,如果你想学布局,强烈不建议用IDE的各种混账界面编辑插件,生成的代码罗里吧嗦的可读性差得可以(eclipse的用过几个,都是刚拿来就丢了),就算是NetBeans这样以可视化界面编辑为卖点的IDE,生成的代码也烂得要命,只有纯代码敲才是最理想地学习布局管理器的方式啊~~~~~~~~~~~~~ ===分割线=== 我补充一下为什么不建议插件。 如果你用过JBuilder(自带可视化界面编辑工具的),那就会知道当类的代码存在错误时,是无法从code界面切换到可视化编辑界面,因为这个IDE真没强大到能排除掉大量千奇百怪的错误后只把你的界面布局相关的代码给抓出来再解析成界面显示。 如果你用过NetBeans(也是自带可视化界面编辑工具的),那么你会发现所有可视化编辑工具生成的代码都是蓝色背景的,不允许你直接编辑(当然你不在NetBeans里的话,爱怎么编辑都可以,问题是很麻烦,而且可能会导致NetBeans的可视化界面出问题),只能在NetBeans提供的那些位置(比如初始化前、声明时等等)插入你想要加的代码,超级不灵活。而且所有重量组件类(extends出来的)都带对应的*.form文件,这个东西,不是java的,就光是NetBeans自己用。它用来干什么?就是完成上面JBuilder干不成的事情,记住布局相关的那些信息,以免你的代码错误引起这个工具无法用。因此NetBeans对自动生成代码的权限控制和.form辅助文件,解决了code和界面视图间切换的问题,当然程序员付出了编辑界面生成部分代码非常麻烦的代价。另外NetBeans总是自动生成匿名内部类,比如各种监听器的实现……从各种角度来说都太糟糕了……(比如你为一个按钮生成一个实现了ActionListener的匿名内部类处理按钮点击事件,然后又为另一个按钮也生成一个这样的类……好吧,你要是有十个二十个按钮,就一个个去生成吧!为什么不直接让容器类实现这个接口,用getResource方法获得事件来源,再根据来源来完成不同的处理呢?) 最后说eclipse,说实话我工作必须要用eclipse,所以是从用熟了的NetBeans换过去的,虽然Swing的使用只是工作中很小的一部分,但一开始也很不习惯,毕竟习惯了拖拽组件。所以我最初的几天是到处找可视化编辑的插件来试用,几乎翻遍了主流的那些插件。但都跟JBuilder有类似的问题,倒不是强制不允许你在有代码有错误的时候从code切换到界面,而是……呵呵……切过去的界面变成芝麻糊的概率真的挺高,调整芝麻糊比纯手写更麻烦…… 而且之前也说了,可视化编辑器自动生成的代码真的很差……非常差……就没见过生成得好的……基本上是生成了之后再也不想去看它。 今年夏天接手别人做了一部分的某些界面代码,一看就是插件生成的,组件布局全是各种莫名其妙的数字,看得我都恶心了,直接全部删了重新布局。 所以就算是为了以后工作的伙伴,也不要养成用可视化插件的习惯……拜托拜托~~