JOptionPane的button显示位置问题

zmxboy 2009-01-03 08:26:09
可以把JOptionPane显示出的dialog上的按钮设置成靠左显示或者靠右显示吗?如果要设置button和边框的距离可以吗(比方说让button显示在离右边框1像素的地方)?望提示,谢谢。
...全文
275 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
zmxboy 2009-01-05
  • 打赏
  • 举报
回复
有点眉目了,位置移动了,不过要精确的调整离边距的像素还要花点时间。
谢谢gongfuliang朋友啊
zmxboy 2009-01-05
  • 打赏
  • 举报
回复
而且我始终认为这个思路不正确
createButtonArea()创建的只是一个收容button的panel,这个panel是在installComponents()中添加到JOptionPane对象上的,我觉得应该在installComponents()中添加那个panel时设置这个panel在JOptionPane上的位置,就想我上面贴过的那段代码那样。但是那样做也没效果。。。。。。
zmxboy 2009-01-05
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 gongfuliang 的回复:]
addButtonComponents是在createButtonArea中在调用的,你重写不调用这个方法就可以了,自己添加Button不行吗?
[/Quote]
刚才也想到了,但是没效果~
gongfuliang 2009-01-05
  • 打赏
  • 举报
回复
要不然让你自己设置Layout干什么
gongfuliang 2009-01-05
  • 打赏
  • 举报
回复
addButtonComponents是在createButtonArea中在调用的,你重写不调用这个方法就可以了,自己添加Button不行吗?
zmxboy 2009-01-05
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 gongfuliang 的回复:]
panel.setLayout(new FlowLayout(FlowLayout.RIGHT/LEFT))

不就可以了吗?
[/Quote]

你这样做行不通的,在addButtonComponents()里会把那个panel的layout强制转换为ButtonAreaLayout,这个时候会出异常的。
mizukusa 2009-01-04
  • 打赏
  • 举报
回复
貌似不可以
gongfuliang 2009-01-04
  • 打赏
  • 举报
回复
只能重写,要不JOptionPane中buttonPanel是流水布局的
zmxboy 2009-01-04
  • 打赏
  • 举报
回复
自己顶~
gongfuliang 2009-01-04
  • 打赏
  • 举报
回复
panel.setLayout(new FlowLayout(FlowLayout.RIGHT/LEFT))

不就可以了吗?
gongfuliang 2009-01-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zmxboy 的回复:]
那个好像行不通,createButtonArea() 返回的是收容button的panel,而这个panel是在installDefaults()里设置到JOptionPane上的,所以应该在installDefaults()add这个panel的时候指定位置。

但是installDefaults()这个方法内部的处理很多,不知道怎么重写~望高人再赐教。
[/Quote]

createButtonArea() 就是返回JPanel,你不会重新设置JPanel的Layout,返回一个自己的JPanel吗?
zmxboy 2009-01-04
  • 打赏
  • 举报
回复
public class MyDialogUI extends BasicOptionPaneUI {

public NEmsComDialogUI(){
}

protected void installComponents() {
GridBagConstraints gridBagCons = new GridBagConstraints();
gridBagCons.gridx = 2;
gridBagCons.gridy = 2;
gridBagCons.anchor = GridBagConstraints.SOUTHEAST;
gridBagCons.fill = 0;

optionPane.add(createMessageArea());

Container separator = createSeparator();
if ( separator != null ) {
optionPane.add(separator);
}
optionPane.add(createButtonArea(), gridBagCons);
optionPane.applyComponentOrientation(optionPane.getComponentOrientation());
}
}


然后:
optDlg = new JOptionPane()
MyDialogUI ui = new MyDialogUI();
optDlg.setUI(ui);

为什么不行呢?望指教啊~
深藏Blue_dct 2009-01-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 bzwm 的回复:]
干脆自己写一个 dialog 算了。

照着JOptionPane.showMessageDialog 的样子。
[/Quote]

说的对,重写JOptionPane思路比清楚 自己写一个比较好懂一点
zmxboy 2009-01-04
  • 打赏
  • 举报
回复
失败了~~~~设置上去没反应。。。。。


重写不可能,时间不够~~~
bzwm 2009-01-04
  • 打赏
  • 举报
回复
干脆自己写一个 dialog 算了。

照着JOptionPane.showMessageDialog 的样子。
zmxboy 2009-01-04
  • 打赏
  • 举报
回复
上面说错,是在installComponents()这个方法里,貌似代码不多,再试试
zmxboy 2009-01-04
  • 打赏
  • 举报
回复
那个好像行不通,createButtonArea() 返回的是收容button的panel,而这个panel是在installDefaults()里设置到JOptionPane上的,所以应该在installDefaults()add这个panel的时候指定位置。

但是installDefaults()这个方法内部的处理很多,不知道怎么重写~望高人再赐教。
zmxboy 2009-01-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 gongfuliang 的回复:]
继承BasicOptionPaneUI,重写createButtonArea()

将JOptionPane的UI设置为自定义的UI
[/Quote]

好的,谢谢。这就试试。
成功了给分,哈哈
gongfuliang 2009-01-04
  • 打赏
  • 举报
回复
继承BasicOptionPaneUI,重写createButtonArea()

将JOptionPane的UI设置为自定义的UI
zmxboy 2009-01-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 gongfuliang 的回复:]
只能重写,要不JOptionPane中buttonPanel是流水布局的
[/Quote]
能否说的详细点?重写JOptionPane的哪个方法?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧