1. 我用jtable做选中多个项,进行拖拽的功能。但是我发现,jtable的多选,当你选中了多个数据项后,不能松开鼠标,必须直接拖拽,否则的话就又变成对一个数据的选择了。我想实现了类似windows资源管理器里那种,选中多个项后,松开鼠标,多选信息不会丢失,除非你用鼠标选中其他的项,直到鼠标松开时。
我初步的想法时,用户用鼠标选择数据的时候,直到松开鼠标,数据才被选中。而不是默认的鼠标一按下,数据选择就执行。不过,我发现jtable的鼠标事件数据选择更改事件晚执行,所以要实现这个可能需要重载jtable,不知道各位有没有什么好办法?2.JSplitPane,我用JSplitPane控制界面的比例。设置控件的setMinimumSize,可以控制分割条的最小位置。但是设置控件的setMaximumSize,却不能控制分割条的最大位置。我还可以继续拖动分割条超过控件的MaximumSize,不知道是为什么?

解决方案 »

  1.   

    第一个问题 jtable里面应该有鼠标拖曳的属性吧,你不妨google搜一下试试
    2 你是在打包以后的情况下拖曳的吗,如果不是,那在打包以后JSplitPane应该会有最大值
    就像jlable 在编写程序的时候即使你设置了最大最小值,它还是可以拖大拖小的,但你运行的时候就固定的了
      

  2.   

    1.jtable的鼠标事件监听,自己重新写吧。  那是一个封装好了的类,如果没有提供相应的方法,就只能自己重写了!
    2. 应该用setDividerLocation来实现移动位置的限制吧
      

  3.   

    1 用容器存储多选的行,拖拽的时候重写一下。
    2 setMinimumSize和setMaximumSize是继承自JComponent的方法
      是设置控件大小,而非divider的位置。按楼上说的用
      setDividerLocation来设置divider的位置。
      

  4.   

    我现在只是想让JSplitPane的分隔条在一定的范围内拖动,而不是任意的拖动。setDividerLocation可以实现吗?
      

  5.   

    分割条两边的控件都设置setMinimumSize不就可以了吗
      

  6.   

    问题是,其中一个控件的大小不固定,可以缩放,JSplitPane的大小也不固定。
      

  7.   

    遇到这个问题,我也没有解决,郁闷我的问题是左边的组件如果size.x太大了就很难看,于是我想让左边的组件最大值不能超过一个值,明天再来看看
      

  8.   

    希望可以帮到你...
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.plaf.basic.BasicSplitPaneUI;
    public class TestFrame extends JFrame {    private JButton enableButton;    private JButton unableButton;    private boolean canResize = true;
        private BasicSplitPaneUI ui;    public TestFrame() {
            super();
            Container c = getContentPane();
            final JSplitPane jsp = new JSplitPane();        ui = (BasicSplitPaneUI) jsp.getUI();
            jsp.setContinuousLayout(true);
            jsp.setLeftComponent(new JScrollPane(new JTree()));
            jsp.setRightComponent(new JTextArea());        jsp.setOneTouchExpandable(true);        c.add(jsp);        JPanel p = new JPanel();
            enableButton = new JButton("可以移动");
            enableButton.addActionListener(new ActionListener() {            @Override
                public void actionPerformed(ActionEvent e) {
                    /******************** 用这种方式 ,不要每次new *****************/
                    ((BasicSplitPaneUI) jsp.getUI()).getDivider()
                            .setBasicSplitPaneUI(ui);
                    /*****************************************/
                    // 这种做法的问题运行一下就看到了
                    // BasicSplitPaneUI newUI = new BasicSplitPaneUI();
                    // newUI.installUI(jsp);
                    // ((BasicSplitPaneUI) jsp.getUI()).getDivider()
                    // .setBasicSplitPaneUI(newUI);
                    /*****************************************/
                }
            });
            p.add(enableButton);
            unableButton = new JButton("不可移动");
            unableButton.addActionListener(new ActionListener() {            @Override
                public void actionPerformed(ActionEvent e) {
                    ui.getDivider().setBasicSplitPaneUI(null);            }
            });
            p.add(unableButton);
            c.add(p, BorderLayout.SOUTH);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            setSize(600, 400);
            setLocationRelativeTo(null);
            setVisible(true);
        }    public static void main(String[] args) {
            new TestFrame();
        }
    }