`

java swing JTable加入 JCheckBox JComboBox

    博客分类:
  • Java
阅读更多

package components;

/*
* TableRenderDemo.java requires no other files.
*/

import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridLayout;

/**
* TableRenderDemo is just like TableDemo, except that it
* explicitly initializes column sizes and it uses a combo box
* as an editor for the Sport column.
*/

public class TableRenderDemo extends JPanel {
    private boolean DEBUG = true;
    public TableRenderDemo(){
    super(new GridLayout(1,0));
    JTable table = new JTable(new MyTableModel());
    table.setPreferredScrollableViewportSize(new Dimension(500,70));
   //Create the scroll pane and add the table to it.
    JScrollPane scrollPane = new JScrollPane(table);
    //Set up column sizes
    initColumnSizes(table);
        //Fiddle with the Sport column's cell editors/renderers.
    setUpSportColumn(table,table.getColumnModel().getColumn(1));
    //Add the scroll pane to this panel
    add(scrollPane);
    }

   /*
     * This method picks good column sizes.
     * If all column heads are wider than the column's cells'
     * contents, then you can just use column.sizeWidthToFit().
     */
    private void initColumnSizes(JTable table){
    MyTableModel model = (MyTableModel)table.getModel();
    TableColumn column = null;
    Component comp = null;
    int headerWidth = 0;
    int cellWidth = 0;
    Object [] longValues = model.longValues;
    TableCellRenderer headerRenderer =
       table.getTableHeader().getDefaultRenderer();
    for(int i = 0;i < table.getColumnCount();i++){
       column = table.getColumnModel().getColumn(i);
       comp = headerRenderer.getTableCellRendererComponent(
              null, column.getHeaderValue(),
              false, false, 0, 0);
       headerWidth = comp.getPreferredSize().width;
       comp = table.getDefaultRenderer(
           model.getColumnClass(i)).getTableCellRendererComponent(
           table, longValues[i],
           false, false, 0, i);
       cellWidth = comp.getPreferredSize().width;

            if(DEBUG){
            System.out.println("Initializing width of column "
                   + i +"."
                   +"headerWidth = "+headerWidth
                   +"cellWidth = "+cellWidth);
            }
            column.setPreferredWidth(Math.max(headerWidth, cellWidth));

        }
    }

    public void setUpSportColumn(JTable table,
            TableColumn sportColumn){
   
    JComboBox comboBox = new JComboBox();
    comboBox.addItem("java");
    comboBox.addItem(".NET");
    comboBox.addItem("C++");
    comboBox.addItem("JSP");
    comboBox.addItem("PHP");
    sportColumn.setCellEditor(new DefaultCellEditor(comboBox));


        //Set up tool tips for the sport cells.
    DefaultTableCellRenderer renderer =
        new DefaultTableCellRenderer();
        renderer.setToolTipText("Click for combo box");
        sportColumn.setCellRenderer(renderer);

    }

    class MyTableModel extends AbstractTableModel {
        private String[] columnNames = {"姓名",
                                        "专业",
                                        "工龄",
                                        "健在"};
        private Object[][] data = {
           {"吕振","java",new Integer(3),new Boolean(true)},
     {"张沛",".NET",new Integer(4),new Boolean(true)},
     {"岳飞","weapon",new Integer(100),new Boolean(false)},
       {"张艺谋","film",new Integer(50),new Boolean(true)}
        };
        public final Object[] longValues = {"吕振","None of the above",
                  new Integer(29),Boolean.TRUE};

 

        public int getColumnCount() {
            return columnNames.length;
        }

        public int getRowCount() {
            return data.length;
        }

        public String getColumnName(int col) {
            return columnNames[col];
        }

        public Object getValueAt(int row, int col) {
            return data[row][col];
        }

       /*
         * JTable uses this method to determine the default renderer/
         * editor for each cell. If we didn't implement this method,
         * then the last column would contain text ("true"/"false"),
         * rather than a check box.
         */

        public Class getColumnClass(int c) {
        //实现了如果是boolean自动转成JCheckbox
        /*需要自己的celleditor这么麻烦吧。jtable自动支持Jcheckbox,
        * 只要覆盖tablemodel的getColumnClass返回一个boolean的class,
        * jtable会自动画一个Jcheckbox给你,
        * 你的value是true还是false直接读table里那个cell的值就可以*/
        System.out.println("=============="+getValueAt(0, c).getClass());
            return getValueAt(0, c).getClass();
        }

       /*
         * Don't need to implement this method unless your table's
         * editable.
         */
        public boolean isCellEditable(int row, int col) {
            //Note that the data/cell address is constant,
            //no matter where the cell appears onscreen.
            if (col < 2) {
                return false;
            } else {
                return true;
            }
        }

        /*
         * Don't need to implement this method unless your table's
         * data can change.
         */

        public void setValueAt(Object value, int row, int col) {
            if (DEBUG) {
                System.out.println("Setting value at " + row + "," + col
                                   + " to " + value
                                   + " (an instance of "
                                   + value.getClass() + ")");
            }

            data[row][col] = value;
            fireTableCellUpdated(row, col);

            if (DEBUG) {
                System.out.println("New value of data:");
                printDebugData();
            }
        }

        private void printDebugData() {
            int numRows = getRowCount();
            int numCols = getColumnCount();

            for (int i=0; i < numRows; i++) {
                System.out.print("    row " + i + ":");
                for (int j=0; j < numCols; j++) {
                    System.out.print(" " + data[i][j]);
                }
                System.out.println();
            }
            System.out.println("--------------------------");
        }
    }

   /**
     * Create the GUI and show it. For thread safety,
     * this method should be invoked from the
     * event-dispatching thread.
     */
    private static void createAndShowGUI() {
       //Create and set up the window.
        JFrame frame = new JFrame("TableRenderDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

       //Create and set up the content pane.
        TableRenderDemo newContentPane = new TableRenderDemo();
        newContentPane.setOpaque(true); //content panes must be opaque
        frame.setContentPane(newContentPane);

       //Display the window.
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}

分享到:
评论

相关推荐

    java swing漂亮界面 超酷 javaswing教程

    首先,Swing提供了丰富的组件库,包括JButton、JLabel、JTextField、JTextArea、JComboBox、JCheckBox、JRadioButton等,这些组件可以组合使用以创建各种复杂界面。例如,JFrame是窗口的基础,JPanel则可以作为容器...

    Java Swing 2nd Edition

    本书可能涵盖了JFrame、JPanel、JLabel、JButton、JTextField、JTextArea、JComboBox、JCheckBox、JRadioButton等常见组件的用法,以及如何通过布局管理器(如FlowLayout、BorderLayout、GridLayout和GridBagLayout...

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

    Java Swing 是Java编程语言中用于构建图形用户界面(GUI)的一个强大的工具包。它是对早期的Abstract Window Toolkit (AWT) 的扩展,提供了更丰富的功能和更好的平台独立性。Swing 包含了大量的组件,使得开发者可以...

    Java Swing图形界面开发与案例详解及随书实例代码

    这些组件包括JFrame(主窗口)、JPanel(容器)、JButton(按钮)、JLabel(标签)、JTextField(文本字段)、JTextArea(多行文本区域)、JComboBox(下拉列表)和JCheckBox(复选框)等。这些组件可以组合使用,...

    最全的Java Swing示例程序

    Java Swing是Java GUI(图形用户界面)编程的重要组成部分,它基于Java AWT(Abstract Window Toolkit)库,并提供了更丰富的组件和功能。Swing提供了一套轻量级的组件,允许开发者创建美观且功能强大的桌面应用程序...

    java swing界面设计

    Java Swing是Java编程语言中用于构建桌面应用程序图形用户界面(GUI)的一个库,它是Java Foundation Classes (JFC)的一部分。本教程将引导初学者深入理解Java Swing,帮助他们快速掌握界面设计的基础知识。 1. **...

    JavaSwing小程序

    1. **Swing组件**:Swing 提供了许多组件,如 JButton、JLabel、JTextField、JTextArea、JCheckBox、JRadioButton、JComboBox 等。这些组件是构建用户界面的基础,每个组件都有其特定的功能和用途。例如,JButton...

    222陈芳林-米线店子系统_JavaSwing_javaswing_

    JavaSwing是Java的一种图形用户界面(GUI)工具包,它是Java Foundation Classes (JFC)的一部分,用于构建桌面应用程序。在“222陈芳林-米线店子系统_JavaSwing_javaswing_”这个项目中,开发者利用JavaSwing组件...

    Java swing 桌面软件 学生选课系统 | 毕业设计 | 源码

    Swing 提供了各种组件,如按钮(JButton)、文本框(JTextField)、选择框(JCheckBox)、下拉列表(JComboBox)、表格(JTable)等,这些组件可以灵活组合,构建出符合需求的界面布局。在学生选课系统中,可能会...

    javaSwing常用的组件

    Java Swing 是 Java GUI(图形用户界面)开发中的一个重要部分,它是AWT(Abstract Window Toolkit)的扩展,提供了更丰富的组件库和更好的外观与感觉。在Java Swing中,开发者可以创建功能强大且美观的桌面应用程序...

    JAVA Swing实例讲解.zip

    首先,Swing中的组件类主要包括JFrame、JPanel、JButton、JLabel、JTextArea、JTextField、JComboBox、JRadioButton、JCheckBox等。这些组件是构建GUI的基础,它们各自拥有特定的功能和用途。例如,JFrame是应用程序...

    java swing学习资料

    Java Swing 是Java GUI(图形用户界面)开发的重要库,它属于Java Foundation Classes (JFC)的一部分。Swing 提供了一套丰富的组件,用于构建桌面应用程序,这些组件比早期的AWT(Abstract Window Toolkit)更加现代...

    java swing

    Java Swing是Java编程语言中的一个图形用户界面(GUI)工具包,它是Java Foundation Classes (JFC)的一部分。Swing提供了一套丰富的组件,用于创建桌面应用程序,包括按钮、文本框、菜单、滚动面板等。Swing是完全由...

    java swing所有组件展示 (附源码)

    Java Swing 是Java编程语言中用于构建桌面应用程序的图形用户界面(GUI)工具包。它属于Java Foundation Classes (JFC)的一部分,提供了丰富的组件库,使得开发者可以创建出具有专业外观和交互性的应用。本资源...

    java swing 的类似几个windows风格的控件

    Java Swing 是Java GUI(图形用户界面)开发的一个重要库,它提供了一系列的组件,使得开发者可以构建出功能丰富的桌面应用程序。这些组件模仿了多种操作系统,包括Windows的视觉样式和交互方式。在Java Swing中,有...

    java Swing用户界面组件

    3. **选择组件**:有JComboBox(组合框)、JRadioButton(单选按钮)、JCheckBox(复选框)等,用于提供多种选项供用户选择。 4. **导航组件**:JMenuBar(菜单栏)、JMenu(菜单)、.JMenuItem(菜单项)以及...

    JavaSwing图形界面开发与案例详解和实例代码

    Swing的核心组件包括JFrame(窗口)、JPanel(面板)、JButton(按钮)、JLabel(标签)、JTextField(文本字段)、JTextArea(文本区域)、JComboBox(组合框)、JCheckBox(复选框)、JRadioButton(单选按钮)...

    Java Swing图形界面开发与案例详解 .王鹏等.扫描版(前5章代码)

    1. **基础组件**:包括JButton、JLabel、JTextField、JTextArea、JComboBox、JCheckBox、JRadioButton等基本GUI元素的使用,这些组件构成了用户与应用程序交互的基本元素。 2. **布局管理器**:Java Swing提供了...

    javaSwing教程

    1. **基础组件**:Swing中的基础组件包括JButton(按钮)、JLabel(标签)、JTextField(文本字段)、JTextArea(多行文本区域)、JComboBox(组合框)、JCheckBox(复选框)、JRadioButton(单选按钮)和...

Global site tag (gtag.js) - Google Analytics