可以把JOptionPane显示出的dialog上的按钮设置成靠左显示或者靠右显示吗?如果要设置button和边框的距离可以吗(比方说让button显示在离右边框1像素的地方)?望提示,谢谢。

解决方案 »

  1.   

    只能重写,要不JOptionPane中buttonPanel是流水布局的
      

  2.   

    能否说的详细点?重写JOptionPane的哪个方法?
      

  3.   

    继承BasicOptionPaneUI,重写createButtonArea()将JOptionPane的UI设置为自定义的UI
      

  4.   

    那个好像行不通,createButtonArea() 返回的是收容button的panel,而这个panel是在installDefaults()里设置到JOptionPane上的,所以应该在installDefaults()add这个panel的时候指定位置。但是installDefaults()这个方法内部的处理很多,不知道怎么重写~望高人再赐教。
      

  5.   

    上面说错,是在installComponents()这个方法里,貌似代码不多,再试试
      

  6.   

    干脆自己写一个 dialog 算了。照着JOptionPane.showMessageDialog 的样子。
      

  7.   


    说的对,重写JOptionPane思路比清楚 自己写一个比较好懂一点
      

  8.   

    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);为什么不行呢?望指教啊~
      

  9.   


    createButtonArea() 就是返回JPanel,你不会重新设置JPanel的Layout,返回一个自己的JPanel吗?
      

  10.   

    panel.setLayout(new FlowLayout(FlowLayout.RIGHT/LEFT))不就可以了吗?
      

  11.   


    你这样做行不通的,在addButtonComponents()里会把那个panel的layout强制转换为ButtonAreaLayout,这个时候会出异常的。
      

  12.   

    addButtonComponents是在createButtonArea中在调用的,你重写不调用这个方法就可以了,自己添加Button不行吗?
      

  13.   

    要不然让你自己设置Layout干什么
      

  14.   

    而且我始终认为这个思路不正确
    createButtonArea()创建的只是一个收容button的panel,这个panel是在installComponents()中添加到JOptionPane对象上的,我觉得应该在installComponents()中添加那个panel时设置这个panel在JOptionPane上的位置,就想我上面贴过的那段代码那样。但是那样做也没效果
      

  15.   

    有点眉目了,位置移动了,不过要精确的调整离边距的像素还要花点时间。
    谢谢gongfuliang朋友啊