1. 我用jtable做选中多个项,进行拖拽的功能。但是我发现,jtable的多选,当你选中了多个数据项后,不能松开鼠标,必须直接拖拽,否则的话就又变成对一个数据的选择了。我想实现了类似windows资源管理器里那种,选中多个项后,松开鼠标,多选信息不会丢失,除非你用鼠标选中其他的项,直到鼠标松开时。
我初步的想法时,用户用鼠标选择数据的时候,直到松开鼠标,数据才被选中。而不是默认的鼠标一按下,数据选择就执行。不过,我发现jtable的鼠标事件数据选择更改事件晚执行,所以要实现这个可能需要重载jtable,不知道各位有没有什么好办法?2.JSplitPane,我用JSplitPane控制界面的比例。设置控件的setMinimumSize,可以控制分割条的最小位置。但是设置控件的setMaximumSize,却不能控制分割条的最大位置。我还可以继续拖动分割条超过控件的MaximumSize,不知道是为什么?
我初步的想法时,用户用鼠标选择数据的时候,直到松开鼠标,数据才被选中。而不是默认的鼠标一按下,数据选择就执行。不过,我发现jtable的鼠标事件数据选择更改事件晚执行,所以要实现这个可能需要重载jtable,不知道各位有没有什么好办法?2.JSplitPane,我用JSplitPane控制界面的比例。设置控件的setMinimumSize,可以控制分割条的最小位置。但是设置控件的setMaximumSize,却不能控制分割条的最大位置。我还可以继续拖动分割条超过控件的MaximumSize,不知道是为什么?
2 你是在打包以后的情况下拖曳的吗,如果不是,那在打包以后JSplitPane应该会有最大值
就像jlable 在编写程序的时候即使你设置了最大最小值,它还是可以拖大拖小的,但你运行的时候就固定的了
2. 应该用setDividerLocation来实现移动位置的限制吧
2 setMinimumSize和setMaximumSize是继承自JComponent的方法
是设置控件大小,而非divider的位置。按楼上说的用
setDividerLocation来设置divider的位置。
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();
}
}