`

JList中使用JCheckBox示例

阅读更多
package JList;

/**
CheckBoxList
*/
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListCellRenderer;
import javax.swing.ListModel;
import javax.swing.ListSelectionModel;
import javax.swing.UIManager;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;

public class MyJList extends JFrame {

protected JList m_list;
protected JLabel m_total;

public MyJList() {
super("Swing List [Check boxes]");
setSize(260, 240);
getContentPane().setLayout(new FlowLayout());

InstallData[] options = { new InstallData("Program executable", 118),
new InstallData("Help files", 52),
new InstallData("Tools and converters", 83),
new InstallData("Source code", 133) };

m_list = new JList(options);
CheckListCellRenderer renderer = new CheckListCellRenderer();
m_list.setCellRenderer(renderer);
m_list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

CheckListener lst = new CheckListener(this);
m_list.addMouseListener(lst);
m_list.addKeyListener(lst);

JScrollPane ps = new JScrollPane();
ps.getViewport().add(m_list);

m_total = new JLabel("Space required: 0K");

JPanel p = new JPanel();
p.setLayout(new BorderLayout());
p.add(ps, BorderLayout.CENTER);
p.add(m_total, BorderLayout.SOUTH);
p.setBorder(new TitledBorder(new EtchedBorder(),
"Please select options:"));
getContentPane().add(p);

WindowListener wndCloser = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
};
addWindowListener(wndCloser);

setVisible(true);

recalcTotal();
}

public void recalcTotal() {
ListModel model = m_list.getModel();
int total = 0;
for (int k = 0; k < model.getSize(); k++) {
InstallData data = (InstallData) model.getElementAt(k);
if (data.isSelected())
total += data.getSize();
}
m_total.setText("Space required: " + total + "K");
}

public static void main(String argv[]) {
new MyJList();
}
}

class CheckListCellRenderer extends JCheckBox implements ListCellRenderer {
protected static Border m_noFocusBorder = new EmptyBorder(1, 1, 1, 1);

public CheckListCellRenderer() {
super();
setOpaque(true);
setBorder(m_noFocusBorder);
}

public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
setText(value.toString());

setBackground(isSelected ? list.getSelectionBackground() : list
.getBackground());
setForeground(isSelected ? list.getSelectionForeground() : list
.getForeground());

InstallData data = (InstallData) value;
setSelected(data.isSelected());

setFont(list.getFont());
setBorder((cellHasFocus) ? UIManager
.getBorder("List.focusCellHighlightBorder") : m_noFocusBorder);

return this;
}
}

class CheckListener implements MouseListener, KeyListener {
protected MyJList m_parent;
protected JList m_list;

public CheckListener(MyJList parent) {
m_parent = parent;
m_list = parent.m_list;
}

public void mouseClicked(MouseEvent e) {
if (e.getX() < 20)
doCheck();
}

public void mousePressed(MouseEvent e) {
}

public void mouseReleased(MouseEvent e) {
}

public void mouseEntered(MouseEvent e) {
}

public void mouseExited(MouseEvent e) {
}

public void keyPressed(KeyEvent e) {
if (e.getKeyChar() == ' ')
doCheck();
}

public void keyTyped(KeyEvent e) {
}

public void keyReleased(KeyEvent e) {
}

protected void doCheck() {
int index = m_list.getSelectedIndex();
if (index < 0)
return;
InstallData data = (InstallData) m_list.getModel().getElementAt(index);
data.invertSelected();
m_list.repaint();
m_parent.recalcTotal();
}
}

public class InstallData {
protected String m_name;
protected int m_size;
protected boolean m_selected;

public InstallData(String name, int size) {
m_name = name;
m_size = size;
m_selected = false;
}

public String getName() {
return m_name;
}

public int getSize() {
return m_size;
}

public void setSelected(boolean selected) {
m_selected = selected;
}

public void invertSelected() {
m_selected = !m_selected;
}

public boolean isSelected() {
return m_selected;
}

public String toString() {
return m_name + " (" + m_size + " K)";
}
}
分享到:
评论
1 楼 lamar511 2012-05-15  
very good and thanks a lot.

相关推荐

    java swing带复选框的JList控件

    首先,`JList` 默认并不支持复选框,但我们可以使用 `DefaultListModel` 和 `ListCellRenderer` 来实现这一功能。`DefaultListModel` 用于存储列表中的项,而 `ListCellRenderer` 则负责定制每个列表项的显示方式,...

    JComboBox下拉框多选

    要实现多选,我们需要在下拉列表中使用`JCheckBox`。我们可以创建一个自定义的`ComboBoxRenderer`,使得每个`JComboBox`的项都是一个带有`JCheckBox`的`JPanel`。这样,用户可以通过勾选`JCheckBox`来选择多个选项...

    最全的Java Swing示例程序

    这个“最全的Java Swing示例程序”集合包含了Swing库中的各种组件和功能的实例,对于学习和理解Swing编程非常有帮助。 Swing组件包括但不限于: 1. JFrame:这是Swing中的顶级容器,通常作为应用程序的主窗口。你...

    Java Swing Examples

    - **MultiComponentTable.java**:此示例展示了如何在一个单元格中组合多个组件(如 JComboBox、JCheckBox 和 JTextField)。 - **MultiComponentTable2.java**:提供了另一个使用多种组件的表格单元格示例。 - **...

    java组件示例

    在"组件示例源代码"中,我们可以找到这些概念的具体应用,通过阅读和理解代码,可以加深对Swing组件的理解,并能熟练地在实际项目中使用它们来创建用户友好的Java桌面应用。这些例子可能涵盖了各种组件的创建、布局...

    JavaSwing界面设计(所有控件及示例)

    - `JCheckBox` 和 `JRadioButton` 分别用于多选和单选选项。 - `JList` 和 `JComboBox` 提供列表选择和下拉选择功能。 - `JTextField`, `JPasswordField`, `JTextArea` 用于文本输入。 - `JToolBar` 创建工具栏...

    Java开发技术大全 电子版

    14.8.5复选框(JcheckBox)使用示例498 14.8.6单选按钮(JradioButton)使用示例500 14.8.7列表框(JList)使用示例502 14.8.8组合框(JComboBox)使用示例506 14.8.9表格(Jtable)使用示例508 14.8.10树...

    Java组件的使用(代码很易懂,最适合初学Java的人员)

    8. `JCheckBoxExa.java`可能是关于`JCheckBox`组件的使用,`JCheckBox`是Swing中的复选框组件,用户可以点击选择或取消选择。 9. `ListExample.java`可能包含了一个使用`JList`组件的例子,`JList`允许用户从预定义...

    SwingSet2 源码

    9. **ListDemo.java**:展示了`JList`的使用,`JList`用于显示一组单选或复选的项目。可能包括了如何创建列表模型、添加事件监听器、实现多选模式等功能。 10. **InternalFrameDemo.java**:涉及了`JInternalFrame`...

    (完整版)Java程序设计任务驱动式教程-任务二十-选择之道(使用选择控件和选择事件).ppt

    【Java程序设计任务驱动式教程】的第20章,"选择之道",主要讲解了在Java GUI编程中如何使用选择控件和处理选择事件,以实现用户交互。这一章节涵盖了多个关键知识点: 1. **选择控件**: - **JComboBox**: 用于...

    Java设计用户注册界面PPT教案学习.pptx

    这个PPT教案主要讲解了如何使用Java Swing库来创建具有选择性组件的用户界面,包括组合框(JComboBox)、列表框(JList)、单选按钮(JRadioButton)和复选框(JCheckBox),并涉及到了选择事件的处理。 首先,任务...

    Java Swing常用组件应用实例源码.rar

    在这个"Java Swing常用组件应用实例源码.rar"压缩包中,你将找到一系列Swing组件的实际应用示例,以及可能包含的文档,帮助你理解和学习如何在Java开发中使用这些组件。 1. **JFrame** - JFrame是Swing中的主要容器...

    Java Swing 组件全演示源代码.rar_java swing_java 组件_java swing_java源代码_

    本资源“Java Swing 组件全演示源代码”包含了Java Swing中的各种组件的完整示例代码,可以帮助开发者深入理解和实际操作这些组件,提升GUI编程能力。 Swing 提供了大量的组件,包括基础组件如按钮(JButton)、...

    Swing控件,多选下拉框

    在这个例子中,我们创建了一个`DefaultListModel`来存储下拉框的选项,并使用`JCheckBox`作为列表项,这样每个选项都可以被勾选。通过自定义渲染器,我们可以控制哪些选项被标记为已选中。 ### 总结 创建一个多选...

    java编程宝典

    介绍了Jsoup库的使用,用于从网页中抓取数据,并提供了几个示例。 #### 七、异常处理 这部分讲解了Java中的异常机制,包括异常分类、常见异常类型及其处理方法等。 #### 八、面向对象 这部分涉及面向对象的基本...

    java控件的一些基本代码

    以上代码示例展示了如何在Java Swing环境中创建和使用这些控件。在实际项目中,这些控件可以组合使用,为用户提供更丰富的交互体验。了解并熟练掌握这些控件的使用,对于开发Java GUI应用程序至关重要。

    java程序集合[1]

    13. **CheckboxGroup的例子**:在Java Swing中,CheckboxGroup用于管理一组JCheckBox,确保用户只能选择其中的一个。 14. **FileDialog**:Java Swing中的JFileChooser或JavaFX的FileChooser对话框,用于让用户选择...

    JavaSwing界面设计(所有控件及示例).ppt

    - JApplet:用于创建Web浏览器中的小程序,但随着现代Web技术的发展,JApplet的使用已经减少。 - JDialog:创建对话框,可以是模态或非模态,用于显示临时信息或接收用户输入。 - JWindow:不常用,它是一个没有...

    Swing 例题

    这样的应用可以帮助学习者更好地理解如何在实际项目中使用Swing组件。 结业复习题可能是一系列的挑战任务,用于检验学习者对Swing的理解程度。这些题目可能要求创建特定的GUI布局,实现特定的功能,或者解决特定的...

Global site tag (gtag.js) - Google Analytics