有关jtable以及JSplitPane的问题(就这点分了,各位可怜可怜我吧)

dongle2001 2008-04-13 05:31:09


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

2.JSplitPane,我用JSplitPane控制界面的比例。设置控件的setMinimumSize,可以控制分割条的最小位置。但是设置控件的setMaximumSize,却不能控制分割条的最大位置。我还可以继续拖动分割条超过控件的MaximumSize,不知道是为什么?
...全文
160 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ImJaden 2011-04-27
  • 打赏
  • 举报
回复
希望可以帮到你...
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();
}
}
B_Lee 2008-07-23
  • 打赏
  • 举报
回复
遇到这个问题,我也没有解决,郁闷

我的问题是左边的组件如果size.x太大了就很难看,于是我想让左边的组件最大值不能超过一个值

mark,明天再来看看
dongle2001 2008-04-18
  • 打赏
  • 举报
回复
up
dongle2001 2008-04-17
  • 打赏
  • 举报
回复
up
tang3dashu 2008-04-16
  • 打赏
  • 举报
回复
关注中.....
dongle2001 2008-04-16
  • 打赏
  • 举报
回复
up
wunan320 2008-04-15
  • 打赏
  • 举报
回复
1 用容器存储多选的行,拖拽的时候重写一下。
2 setMinimumSize和setMaximumSize是继承自JComponent的方法
是设置控件大小,而非divider的位置。按楼上说的用
setDividerLocation来设置divider的位置。
yangk_105 2008-04-15
  • 打赏
  • 举报
回复
1.jtable的鼠标事件监听,自己重新写吧。

那是一个封装好了的类,如果没有提供相应的方法,就只能自己重写了!


2. 应该用setDividerLocation来实现移动位置的限制吧
East271536394 2008-04-15
  • 打赏
  • 举报
回复
up
dongle2001 2008-04-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 CatOnTower 的回复:]
分割条两边的控件都设置setMinimumSize不就可以了吗
[/Quote]
问题是,其中一个控件的大小不固定,可以缩放,JSplitPane的大小也不固定。
  • 打赏
  • 举报
回复
分割条两边的控件都设置setMinimumSize不就可以了吗
dongle2001 2008-04-15
  • 打赏
  • 举报
回复
我现在只是想让JSplitPane的分隔条在一定的范围内拖动,而不是任意的拖动。setDividerLocation可以实现吗?
dongle2001 2008-04-14
  • 打赏
  • 举报
回复
up
haoxiongok 2008-04-14
  • 打赏
  • 举报
回复
关注。。。
shili150 2008-04-14
  • 打赏
  • 举报
回复
第一个问题 jtable里面应该有鼠标拖曳的属性吧,你不妨google搜一下试试


2 你是在打包以后的情况下拖曳的吗,如果不是,那在打包以后JSplitPane应该会有最大值
就像jlable 在编写程序的时候即使你设置了最大最小值,它还是可以拖大拖小的,但你运行的时候就固定的了

62,614

社区成员

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

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