检查框(Check box)

检查框提供了一种用以进行开/关选择的方式。它包含了一个小方框和一个标签。这个方框
中通常是有一个“x”标记(或者其它能表明被选中的标记)或者为空,这取决于检查框是
否被选中。


通常你会使用接受标签作为参数的构造器来创建JCheckBox。你可以获取和设置状态,也
可以获取和设置其标签,甚至可以在JCheckBox对象已经建立之后改变标签。


当 JCheckBox 被选中或清除时,将发生一个事件,你可以用与对付按钮相同的方法来捕获
这个事件:使用 ActionListener。在下面的例子中,将枚举所有被选中的检查框,然后在
JTextArea 里显示:


//: c14:CheckBoxes.java
// Using JCheckBoxes.
// <applet code=CheckBoxes width=200 height=200></applet>
import javax.swing.*;
import java.awt.event.*; 
import java.awt.*; 
import com.bruceeckel.swing.*; 


public class CheckBoxes extends JApplet { 
private JTextArea t = new JTextArea(6, 15); 
private JCheckBox 
    cb1 = new JCheckBox("Check Box 1"),
    cb2 = new JCheckBox("Check Box 2"),
    cb3 = new JCheckBox("Check Box 3");
public void init() { 
    cb1.addActionListener(new ActionListener() { 
public void actionPerformed(ActionEvent e) { 
        trace("1", cb1);
      }
    });
 






    cb2.addActionListener(new ActionListener() { 
public void actionPerformed(ActionEvent e) { 
        trace("2", cb2);
      }
    });
    cb3.addActionListener(new ActionListener() { 
public void actionPerformed(ActionEvent e) { 
        trace("3", cb3);
      }
    });
    Container cp = getContentPane(); 
    cp.setLayout(new FlowLayout()); 
    cp.add(new JScrollPane(t)); 
    cp.add(cb1);
    cp.add(cb2);
    cp.add(cb3);
  }
private void trace(String b, JCheckBox cb) { 
if(cb.isSelected()) 
      t.append("Box " + b + " Set\n"); 
else
      t.append("Box " + b + " Cleared\n"); 
  }
public static void main(String[] args) { 
    Console.run(new CheckBoxes(), 200, 200);
  }
} ///:~


trace( )方法中使用了append( ),用来把检查框的名称及其状态显示到JtextArea中,所
以你看到一个积累的检查框列表,包括了检查框名称及其状态。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!要在VC ListControl控件的某一列中添加复选check box),您可以使用自定义绘制(Custom Draw)来实现。 首先,确保您的ListControl控件是使用LVS_REPORT风格创建的,以便可以显示多列。 然后,您可以通过设置ListControl的扩展风格(LVS_EX_CHECKBOXES)来启用复选功能。可以使用以下代码来完成: ```cpp // 假设m_listCtrl是您的ListControl对象 m_listCtrl.SetExtendedStyle(m_listCtrl.GetExtendedStyle() | LVS_EX_CHECKBOXES); ``` 接下来,您需要在需要显示复选的列上绘制复选。可以通过处理ListControl的NM_CUSTOMDRAW消息来实现自定义绘制。以下是一个简单的示例: ```cpp // 假设m_listCtrl是您的ListControl对象 // 假设第2列需要显示复选 // 在初始化代码中添加以下行来订阅NM_CUSTOMDRAW消息 m_listCtrl.SetExtendedStyle(m_listCtrl.GetExtendedStyle() | LVS_EX_FULLROWSELECT); m_listCtrl.SetExtendedStyle(m_listCtrl.GetExtendedStyle() | LVS_EX_CHECKBOXES); m_listCtrl.SetExtendedStyle(m_listCtrl.GetExtendedStyle() | LVS_EX_GRIDLINES); m_listCtrl.SetExtendedStyle(m_listCtrl.GetExtendedStyle() | LVS_EX_DOUBLEBUFFER); m_listCtrl.SetExtendedStyle(m_listCtrl.GetExtendedStyle() | LVS_EX_HEADERDRAGDROP); m_listCtrl.SetExtendedStyle(m_listCtrl.GetExtendedStyle() | LVS_EX_INFOTIP); m_listCtrl.SetExtendedStyle(m_listCtrl.GetExtendedStyle() | LVS_EX_ONECLICKACTIVATE); m_listCtrl.SetExtendedStyle(m_listCtrl.GetExtendedStyle() | LVS_EX_REGIONAL); m_listCtrl.SetExtendedStyle(m_listCtrl.GetExtendedStyle() | LVS_EX_SIMPLESELECT); m_listCtrl.SetExtendedStyle(m_listCtrl.GetExtendedStyle() | LVS_EX_TRACKSELECT); // 处理NM_CUSTOMDRAW消息的消息处理函数 BOOL CYourDialog::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) { NMHDR* pNMHDR = (NMHDR*)lParam; if (pNMHDR->code == NM_CUSTOMDRAW) { NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR); *pResult = CDRF_DODEFAULT; if (CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage) { // 返回CDRF_NOTIFYITEMDRAW来通知控件为每个子项发送绘制通知 *pResult = CDRF_NOTIFYITEMDRAW; } else if (CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage) { // 检查是要在哪一列绘制复选 if (pLVCD->iSubItem == 1) // 第2列 { // 绘制复选 CRect rect; m_listCtrl.GetItemRect(pLVCD->nmcd.dwItemSpec, &rect, LVIR_BOUNDS); CRect checkboxRect(rect); checkboxRect.left += rect.Height() / 2; // 适当调整复选位置 // 绘制复选 CDC* pDC = CDC::FromHandle(pLVCD->nmcd.hdc); pDC->DrawFrameControl(&checkboxRect, DFC_BUTTON, DFCS_BUTTONCHECK | DFCS_FLAT); *pResult = CDRF_SKIPDEFAULT; // 跳过默认绘制 } } } return CDialog::OnNotify(wParam, lParam, pResult); } ``` 通过上述代码,您可以在第2列中显示复选。您可以根据自己的需求进行修改和扩展。 希望对您有所帮助!如果您还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值