C++ list 控件 第一列excel复选框控件显示不出

为什么VC 列表控件 只显示第一列
[问题点数:100分,结帖人taodou1]
为什么VC 列表控件 只显示第一列
[问题点数:100分,结帖人taodou1]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关推荐:
2012年11月 挨踢职涯大版内专家分月排行榜第二2011年9月 Linux/Unix社区大版内专家分月排行榜第二
2012年1月 Linux/Unix社区大版内专家分月排行榜第三2011年8月 C/C++大版内专家分月排行榜第三2011年8月 Linux/Unix社区大版内专家分月排行榜第三2010年4月 C/C++大版内专家分月排行榜第三
2011年 总版技术专家分年内排行榜第三2010年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第五
本帖子已过去太久远了,不再提供回复功能。在Java窗体表格中插入复选框 - Mr.Johness - 博客园
阿何的程序人生
  最近接触了一点Java的GUI编程,也就是由Java AWT更新而来的Java Swing。
  总体上而言,Java Swing编程有两大特点:麻烦、效果差。
  麻烦是说由于设计器的使用不方便(如果您希望使用窗体设计器通过快速拖拽控件建立您的Java Swing GUI程序,请您使用MyEclipse 8.5以上版本,并且需要最高使用权限),所有代码都得手写,如果没有好的编码规范和注释习惯。自己都会被代码淹没。
  效果差是指运行时的界面。具体的您可以自己尝试发现。
  那么我们通过一段代码来创建属于我们的窗体:
1 import javax.swing.JF
* 我的第一个Java窗体
* @author Johness
9 public class MyJFrame extends JFrame{
  然后通过main方法来测试:
  运行后,窗体在屏幕左上角显现并且是最小化的形式。
  呵呵,那么关于设置窗体的显示我就不再赘述了,值得注意的是窗体的布局必须设置。
  小贴士:使用setLayout设置布局,参数传递
  我们讨论一下怎样在窗体的表格中显示复选框。
  即实现如下效果:
  我随便拖了些控件(数据是老师给的&&)。
  好了,我们来一步步实现。
  小贴士二:使用add方法向控件添加内容控件。
  ①首先我们需要面板(JPanel)或其他容器控件承载表格(JTable),值得一提的是:由于窗体本身就是容器型控件,您可以考虑将表格单个地放置在窗体上。
  ②然后我们需要将表格对象创建出来并放入该容器控件,大家可以参考手册(如JDK_API_1_6_zh_CN.CHM)创建表格控件。值得一提的是在这七个构造方法中,设计器(如果您使用了MyEclipse)使用的是( dm)这个版本。而一般情况使用( rowData, &columnNames)这个版本的居多(不包括我)。如果是我,可能会选择使用设计器的版本。
  可能有细心的朋友会发现说:设计器的版本很不方便,因为需要传递的是接口,我们必须写一个类实现该接口并构造实例作为参数传递,麻烦,不如直接使用([][] rowData, [] columnNames)这个版本。
  那么在这里我向不知道&匿名内部类&(老师是这样称呼的,没考证)的朋友普及一下Java的匿名内部类。
  在Java方法中,如果参数需要传递接口,可以在调用方法时传递一个(匿名)对象,该对象是一个不具名的类的实例,该对象所属类实现了方法参数的接口。
  比如上面的例子( dm),这是JTable的构造方法,需要的是一个TableModel接口类型的参数(这里只是举例,实际运用比较复杂),我们可以使用如下写法:JTable table = new JTable(new TableModel());
  毫无疑问,这种写法是错误的,但是如果这样写就不是了:
1 import javax.swing.*;
2 import javax.swing.event.*;
3 import javax.swing.table.*;
6 public class MyFirstJFrame extends JFrame {
public MyFirstJFrame() {
setLayout(null);
JTable table = new JTable(new TableModel(){
public int getRowCount() {
// TODO Auto-generated method stub
public int getColumnCount() {
// TODO Auto-generated method stub
public String getColumnName(int columnIndex) {
// TODO Auto-generated method stub
return null;
public Class&?& getColumnClass(int columnIndex) {
// TODO Auto-generated method stub
return null;
public boolean isCellEditable(int rowIndex, int columnIndex) {
// TODO Auto-generated method stub
return false;
public Object getValueAt(int rowIndex, int columnIndex) {
// TODO Auto-generated method stub
return null;
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
// TODO Auto-generated method stub
public void addTableModelListener(TableModelListener l) {
// TODO Auto-generated method stub
public void removeTableModelListener(TableModelListener l) {
// TODO Auto-generated method stub
  我可能需要解释一下这些代码:首先是JTable table = new JTable(new TableModel(){});可以看出来,大括号中间的部分是一些需要重写的方法。
  那么大家应该怎样理解这一句代码呢?我们分解一下(new TableModel(){})。我们应该怎么看待?大家回想一下我以上说过的匿名内部类的定义。我们可以这样看,new &&()是构造方法,调用来构造一个匿名对象,其后的{}不是Java的特殊语法,但是Java中可以将方法定义在里面(这里的方法生命周期与匿名对象相同),当然,此处是用于实现接口的方法。
  清晰一点了吧?我们再来拆分:TableModel我们可以在其前面补充一个不存在的类类名,比如MyTableModel。好了,我们完整再现一下:new MyTableModel:TableModel(){}也就是说大家可以想象成(new TableModel(){})是在声明一个匿名对象,它属于一个不具名的类(如MyTableModel),该类实现了TableModel接口。而由于语法限制,不能全部写出来所以省略了[MyTableModel:]。当然,这只是我们的推理,大家理解记忆哈。
  注:这里的匿名对象只没有引用指向(即没有变量名)的对象。
  实际上我们使用匿名内部类的地方很多,比如添加事件监听。但是&上面创建JTable的方法是只作为示例,绝大多数是不会如此用的&,大家谨记。
  我会在随笔结尾贴出全部代码,其中创建JTable的代码是使用了设计器的构造方式。
  ③设置表格渲染。在详细说明之前我先解释一下JTable的显示原理:
  首先是数据来源,您使用JTable的构造方法,大部分重载中参数即包含了数据,比如( rowData,
columnNames)中Vector保存的数据(Vector相当于数组)。
  其次是表格样式,表格将数据和如何显示数据(比如列数量、列名称、是否可编辑)保存在其数据模版中,该模版实现自接口TableModel。
  最后,表格(每一个单元格)可以设置渲染效果。
  我把完整的代码贴出来:
import java.awt.event.ActionE
import java.awt.event.ActionL
import javax.swing.*;
import javax.swing.table.*;
public class MyFirstJFrame extends JFrame {
// 作为测试的main方法
public static void main(String[] args) {
new MyFirstJFrame().setVisible(true);
* 构造方法
public MyFirstJFrame() {
InitialComponent();
* 初始化组件的方法
private void InitialComponent(){
// 设置窗体参数
// 设置布局模式
setLayout(null);
// 设置窗体大小
setSize(480, 360);
// 设置窗体居中(非常规方法)
setLocationRelativeTo(null);
// 关闭窗体退出程序
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
// 初始化面板
panel = new JPanel();
panel.setSize(this.getWidth(), this.getHeight());
panel.setLocation(0,0);
panel.setLayout(null);
// 初始化表格
table = new JTable(new DefaultTableModel(new Object[][]{{"第一行"},{"第二行"},{"第三行"},{"第四行"}}, new String[]{"测试行1","测试行2"}){
/* (non-Javadoc)
* 重写方法,判断表单元格是否可编辑
* 可以通过row和column索引判断某一个单元格是否可编辑
* 此处设为都不可编辑
* @see javax.swing.table.DefaultTableModel#isCellEditable(int, int)
public boolean isCellEditable(int row, int column) {
return false;
// 开始向表格中添加复选框(注意:此示例较为简单,缺省很多判断,也没有动态代码支持)
// 通过设置列渲染
// 方法一:直接方式 使用TableColumn的setCellRenderer方法(推荐)
// 此方法可以设置某一列的渲染(即使用某一个组件--即控件来显示单元格数据)
table.getColumnModel().getColumn(1).setCellRenderer(new TableCellRenderer(){
/*(non-Javadoc)
* 此方法用于向方法调用者返回某一单元格的渲染器(即显示数据的组建--或控件)
* 可以为JCheckBox JComboBox JTextArea 等
* @see javax.swing.table.TableCellRenderer#getTableCellRendererComponent(javax.swing.JTable, java.lang.Object, boolean, boolean, int, int)
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
// 创建用于返回的渲染组件
JCheckBox ck = new JCheckBox();
// 使具有焦点的行对应的复选框选中
ck.setSelected(isSelected);
// 设置单选box.setSelected(hasFocus);
// 使复选框在单元格内居中显示
ck.setHorizontalAlignment((int) 0.5f);
// 方法二:先设置列编辑器,然后设置单元格渲染
// 设置列编辑器
// 在以复选框为对象设置列编辑器时,必须保证该列能够被编辑,否则无法更改状态
// (此步骤可以省略,省略时不要忘记将列设为不可编辑)
// table.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(new JCheckBox()));
// 设置单元格渲染(这里是设置表格级别的渲染)
/*table.setDefaultRenderer(Object.class, new TableCellRenderer(){
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
// 判断是否为需要渲染的列
if(column == 1){
// 和方法一基本一致
JCheckBox box = new JCheckBox();
box.setSelected(isSelected);
// 设置单选box.setSelected(hasFocus);
box.setHorizontalAlignment((int) CENTER_ALIGNMENT);
// 如果不是需要渲染的列,封装文本域显示数据
return new JTextArea(value.toString());
// 在多选是需要按住Ctrl键或者鼠标按住拖过连续的需要选中的行,应该给用户说明
// 第一种方法是被推荐的,因为它具有选中的高亮显示,界面能更加友好
table.setSize(panel.getWidth(),panel.getHeight() - 90);
table.setLocation(0, 0);
btn = new JButton("Test");
btn.setSize(80,40);
btn.setLocation((panel.getWidth()) / 2 - 40, panel.getHeight() - 80);
// 按钮点击时显示当前选中项
btn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
for(int rowindex : table.getSelectedRows()){
JOptionPane.showMessageDialog(null, rowindex + " " + table.getValueAt(rowindex, 0));
panel.add(table);
panel.add(btn);
this.add(panel);
// 定义一些必要的组件
private JP
private JT
private JB
  上面的代码有一些缺陷,大家需要做一些修改。实际上我也不希望贴上完全无误的perfect的代码,对需要学习的朋友不是好事儿。
  总结:充分理解Java的方法返回值作为判断依据。
  1、匿名内部类(匿名对象后{}的妙用)。
  2、窗体的布局:默认布局为(最后添加?)的控件占据其窗体的全部空间。
  3、编辑器、渲染。
  最近断断续续地看WPF了,因为在看C语言了&&
  我创建了QQ群:。作为能够与我一起学习或者指导我学习的朋友们近来讨论。
   18:42:59
评论 - 101向用户提供选项的控件_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
文档贡献者
评价文档:
向用户提供选项的控件
大小:93.41KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢放送:listbox多列显示和显示复选框_vb吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:81,492贴子:
放送:listbox多列显示和显示复选框收藏
放送:listbox多列显示和显示复选框(汇总,总结) Option Explicit'适用于需要选择多个中的一个或几个'要全部显示才能直观显示供用户选择'LISTBOX的Columns设置为1或者任何大于0的数后 , 就能多列显示了, 但是如何设置列的宽度呢.这个控件默认的是ListBox控件的宽度'LISTBOX的style设置为1后,显示复选框'回复:Columns指一次性可以看到的列数而不是总的数据列数,每列列宽就是ListBox客户区域的宽度/Columns。如果你想一次性显示两列,则Columns=2。Private Sub Form_Load()List1.Columns = 3List1.Style = 1 '显示复选框List1.AddItem "1"List1.AddItem "2"List1.AddItem "3"List1.AddItem "4"List1.AddItem "5"List1.AddItem "6"List1.AddItem "7"List1.AddItem "8"List1.AddItem "9"List1.AddItem "10"List1.AddItem "11"List1.AddItem "12"List1.AddItem "13"List1.AddItem "14"List1.AddItem "15"List1.AddItem "16"List1.AddItem "17"List1.AddItem "19"List1.AddItem "20"List1.AddItem "21"List1.AddItem "22"List1.AddItem "23"List1.AddItem "24"End SubPrivate Sub List1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)If Button = 2 ThenDim i As Integer&&&&&&&&&&&&&&&&&&& 'intloopindex为循环变量&&&&&& For i = 0 To List1.ListCount - 1&&& 'list.listcount-1是列表框中最大的列表项序号&&&&&&&&&& If List1.Selected(i) Then&&&&&&& 'selected属性为列表项的选中状态,为布尔型&&&&&&&&&&&&&& List2.AddItem List1.List(i) '将选中的列表项添加到另外一个列表框中&&&&&&&&&& End If&&&&&&&& Next&&&&&&&& '我们可根据自己需要写这段代码End IfEnd Sub
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或> 急求TreeGrid控件用法我要实现的效果是,第一列是树结构,节点有复选框,点击你节点需要实现子点
急求TreeGrid控件用法我要实现的效果是,第一列是树结构,节点有复选框,点击你节点需要实现子点
SaiuSaiu & &
发布时间: & &
浏览:72 & &
回复:2 & &
悬赏:0.0希赛币
急求TreeGrid控件用法我要实现的效果是,第一列是树结构,节点有复选框,点击你节点需要实现子点点选中,其它列表头上都有个全选复选框,点击复选框,此列的每行复选框选中,还有取值也不太懂,有详细代码的可分享下,感激不尽!一定要帮我哦!
自己摸索一下吧,想当初我也是这样,只可惜我现在也忘记了……
saiwang & &
& & (0)(0)
测试下这个:
language=&javascript&$>$
public_GetParentByTagName(element,
element.parentN&
upperTagName
tagName.toUpperCase();&
//如果这个元素还不是想要的tag就继续上溯&
(parent.tagName.toUpperCase()
upperTagName))
parent.parentNode
parent.parentNode
parent.parentE&
& }& function
setParentChecked(objNode)& {
objParentDiv
public_GetParentByTagName(objNode,&div&);&
if(objParentDiv==null
¦ ¦
objParentDiv
&undefined&)&
objParentDiv.getAttribute(&ID&);&
objID.substring(0,objID.indexOf(&Nodes&));&
objID+&CheckBox&;&
objParentCheckBox
document.getElementById(objID);&
if(objParentCheckBox==null
¦ ¦
objParentCheckBox
&undefined&)&
if(objParentCheckBox.tagName!=&INPUT&
objParentCheckBox.type
&checkbox&)&
objParentCheckBox.checked
setParentChecked(objParentCheckBox);& }& function
setChildUnChecked(divID)& {
i=0;i &objchild.i++)&
objchild[i];&
if(tempObj.tagName==&INPUT&
tempObj.type
&checkbox&)&
tempObj.checked
setChildUnChecked(tempObj);
}& }& function
setChildChecked(divID)& {
i=0;i &objchild.i++)&
objchild[i];&
if(tempObj.tagName==&INPUT&
tempObj.type
&checkbox&)&
tempObj.checked
setChildChecked(tempObj);
CheckEvent()& {&
event.srcE
if(objNode.tagName!=&INPUT&
¦ ¦
objNode.type!=&checkbox&)& &
if(objNode.checked==true)&
setParentChecked(objNode);&
objNode.getAttribute(&ID&);&
objID.substring(0,objID.indexOf(&CheckBox&));
objParentDiv
document.getElementById(objID+&Nodes&);&
if(objParentDiv==null
¦ ¦
objParentDiv
&undefined&)&saiwang & &
& & (0)(0)
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&&&增值电信业务经营许可证湘B2-

我要回帖

更多关于 复选框控件 的文章

 

随机推荐