给小妹看看这是什么问题?

xierong2011 2011-10-19 05:32:02
当我选择选项后,确认RadioButton中的数据添加到一个树节点上 现在问题是:当你选好,确认后 每次最后一个数据添加不上 但是当你选完后,在JTable的空白处单击一下 全部就能添加上 ,这是怎么回事呢?
...全文
354 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
mike_caoyong 2011-10-20
  • 打赏
  • 举报
回复
应该是在确认事件时没有停止表格编辑器,应该在确认事件中先进行下面的判断再到表格中取数据.
if(table.isEditing()){
table.getCellEditor().stopCellEditing();
}
zhoulvming 2011-10-20
  • 打赏
  • 举报
回复
学习。。。。
xiaobeiweng 2011-10-20
  • 打赏
  • 举报
回复
学习。。。
xierong2011 2011-10-20
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 qybao 的回复:]

你是怎么遍历的呢?
看你的描述,好像是失去焦点的时候才把失去焦点的radio的值保存到一个集合中,然后确认的时候,把集合的元素追加到树中(因为可能是如果是用选择事件处理的话,可能没法判断多次选择,所以可能你用失去焦点事件来处理的)
你应该是在确认事件中遍历jtable,把选中的radio值保存到树中
[/Quote]

嗯 就是再失去焦点的时候 选择的最后一个 才能添加上
xierong2011 2011-10-20
  • 打赏
  • 举报
回复

class RadioButtonPanel extends JPanel {
JRadioButton[] buttons;

RadioButtonPanel(String[] str) {
setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
this.setBackground(Color.WHITE);
buttons = new JRadioButton[str.length];
for (int i = 0; i < str.length; i++) {
buttons[i] = new JRadioButton(str[i]);
buttons[i].setFocusPainted(false);
buttons[i].setBackground(Color.white);
add(buttons[i]);
}
}

public void setSelectedIndex(int index) {
for (int i = 0; i < buttons.length; i++) {
buttons[i].setSelected(i == index);
}
}

public int getSelectedIndex() {
for (int i = 0; i < buttons.length; i++) {
if (buttons[i].isSelected()) {
return i;
}
}
return -1;
}

public JRadioButton[] getButtons() {
return buttons;
}
}

class RadioButtonRenderer extends RadioButtonPanel implements
TableCellRenderer {
RadioButtonRenderer(String[] strs) {
super(strs);
}
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
if (value instanceof Integer) {
//setSelectedIndex(((Integer) value).intValue());
/*val=Integer.parseInt(s)*/this.setSelectedIndex(((Integer)value).intValue());
}
return this;
}
}

class RadioButtonEditor extends DefaultCellEditor implements ItemListener {
RadioButtonPanel panel;

public RadioButtonEditor(JCheckBox checkBox, RadioButtonPanel panel) {
super(checkBox);
this.panel = panel;
ButtonGroup buttonGroup = new ButtonGroup();
JRadioButton[] buttons = panel.getButtons();
for (int i = 0; i < buttons.length; i++) {
buttonGroup.add(buttons[i]);
buttons[i].addItemListener(this);
}
}

public Component getTableCellEditorComponent(JTable table,
Object value, boolean isSelected, int row, int column) {
if (value instanceof Integer) {
panel.setSelectedIndex(((Integer) value).intValue());
}
return panel;
}

public Object getCellEditorValue() {
return new Integer(panel.getSelectedIndex());
}

public void itemStateChanged(ItemEvent e) {
super.fireEditingStopped();
}
}
qybao 2011-10-20
  • 打赏
  • 举报
回复
你是怎么遍历的呢?
看你的描述,好像是失去焦点的时候才把失去焦点的radio的值保存到一个集合中,然后确认的时候,把集合的元素追加到树中(因为可能是如果是用选择事件处理的话,可能没法判断多次选择,所以可能你用失去焦点事件来处理的)
你应该是在确认事件中遍历jtable,把选中的radio值保存到树中
hamxyy 2011-10-20
  • 打赏
  • 举报
回复
事件注册错了?代码搞来看看赛
a107494639 2011-10-20
  • 打赏
  • 举报
回复
逻辑问题吧,好好跟踪下代码看看?
leilei0932_java 2011-10-20
  • 打赏
  • 举报
回复
应该是RadioButton事件用的不对,你可以换个别的类似事件再试试.
xierong2011 2011-10-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 mengxiangyue 的回复:]

可能就是循环少了一次 你下个断点单步调试试试
[/Quote]

循环都好着呢 感觉最后一个那个状态 在JTable 空白处单击一下 全部就添加上了
xierong2011 2011-10-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 chenchenyangll 的回复:]

如果你指点1个选项,然后点确认,是否会出现同样问题?

在点击Radio的时候,你是怎么判断选了哪个?

找到那段代码,调试
[/Quote]

嗯 选择一个的时候 不会出现这种情况
xierong2011 2011-10-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 chenchenyangll 的回复:]

如果你指点1个选项,然后点确认,是否会出现同样问题?

在点击Radio的时候,你是怎么判断选了哪个?

找到那段代码,调试
[/Quote]
嗯 选择一个的时候 不会出现这种情况
xierong2011 2011-10-20
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 mike_caoyong 的回复:]

应该是在确认事件时没有停止表格编辑器,应该在确认事件中先进行下面的判断再到表格中取数据.
if(table.isEditing()){
table.getCellEditor().stopCellEditing();
}
[/Quote]

哈哈 ... 就是这个问题!!! 谢谢你啦
chenchenyangll 2011-10-19
  • 打赏
  • 举报
回复
如果你指点1个选项,然后点确认,是否会出现同样问题?

在点击Radio的时候,你是怎么判断选了哪个?

找到那段代码,调试
Cactus_hxk 2011-10-19
  • 打赏
  • 举报
回复
没看明白你的问题,帮你顶一下
KG071 2011-10-19
  • 打赏
  • 举报
回复
逻辑问题吧 这种问题DEBUG一下就好了
孟祥月 2011-10-19
  • 打赏
  • 举报
回复
可能就是循环少了一次 你下个断点单步调试试试
lyhmy 2011-10-19
  • 打赏
  • 举报
回复
我的意思是它少循环了一次,所以最后一个没加上,你点击空白处它把它也给记录了,而少循环的那一次就是空白的
xierong2011 2011-10-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lyhmy 的回复:]

用得数组来接收你选中的值吗??看你讲的情况,我觉得是不是你在循环时让他的长度-1了啊,所以少了一个,或者是list,但size()减了一个
[/Quote]
应该不是数组方面的问题,就是在选择后,必须在JTable的空白处单击一下,然后按“确认生成”,我选择的 都能添加上 否则最后一个就添加不上
lyhmy 2011-10-19
  • 打赏
  • 举报
回复
用得数组来接收你选中的值吗??看你讲的情况,我觉得是不是你在循环时让他的长度-1了啊,所以少了一个,或者是list,但size()减了一个
加载更多回复(1)
需要的软件 maxdos5.8s 安装在客服机 GhostSrv8.3 安装在服务器 这2个软件下载地址 http://pzz.cn/bbs/大家可以自己去下 首先设置好服务器 看操作!打开本地连接属性 设置一下IP 由于我开始设置过了! IP地址 10.1.1.1 子网 255.0.0.0 大家和我设置一样就可以了! 接着打开GhostSrv8.3 会话名称必须填写 max 这里是让你选择 是恢复 还是悲愤 我今天给大家演示恢复 这里是选择 你的景象文件! 这里是让大家选择是恢复全盘 还是只恢复一个分区 由于我的 景象文件只是c盘的一个景象所以我选择分区 这样就行了 这里 点接受客服机。 然后最小化 2 接着我们在虚拟机上弄 这里虚拟机顶替的你的克服机的意思 打开虚拟机 我已经打开过了 接着安装maxdos5.8s在虚拟机上 大家看我的操作 安装好了 从起虚拟机 慢! 这里我说下步骤 在从起的过程进入maxdos5.8s 然后选择网刻悬想 然后就是 让你选择你的 网卡型号的驱动。 然后就进入我的这个画面了 我开始是恢复分区的 所以这里选择 单分区 客隆 这里填写你要恢复的盘副 我的景象文件是系统盘 所以我填写C 到这步说明你成功了 接着回到你的服务器上看GhostSrv8.3有什么变化。 看到没?  多了一台克服机出来 然后你只需要点饥发送数据就开始 恢复了 看到吗 成功了。  有什么不明白的 可以加我 我可以远程协助大家 在这里我说几句 希望大家不要见怪 其实我不想说的 就是小妹我的 QQ号码太不好了 所以想换 不知道有没有好心的哥哥姐姐可以送我 个6位的 如果有那我就太感谢了 呵呵  对了 我想看到这有的朋友要问了 如果在网吧克垄那么有的电脑还没有装 系统怎么运行maxdos5.8s 呵呵这点不用怕 因为现在他已经出了版本 u盘启动了! 

62,614

社区成员

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

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