精华内容
下载资源
问答
  • 编写getTable()方法来创建表格,在该方法中声明字符串数组columns作为表格列名,再声明int类型的数组来定义每个表格列的宽度。然后创建表格的数据模型并遍历所有表格列对象,根据int类型数组的索引来...

    展开全部

    1.在项目中创建窗体类ArrayCreateTable。在窗体中添加一个滚动面板。62616964757a686964616fe59b9ee7ad9431333363373732

    2.编写getTable()方法来创建表格,在该方法中声明字符串数组columns作为表格的列名,再声明int类型的数组来定义每个表格列的宽度。然后创建表格的数据模型并遍历所有表格列对象,根据int类型数组的索引来设置表格列的宽度。

    代码如下:

    private JTable getTable() {

    if (table == null) {

    table = new JTable();

    // 定义列名数组

    String[] columns = { "星期一", "星期二", "星期三", "星期四", "星期五", "星期六",

    "星期日" };

    // 定义列宽数组

    int[] columnWidth = { 10, 20, 30, 40, 50, 60, 70 };

    // 创建表格数据模型

    DefaultTableModel model = new DefaultTableModel(columns, 15);

    table.setModel(model);// 设置表格数据模型

    TableColumnModel columnModel = table.getColumnModel();// 获取列模型

    int count = columnModel.getColumnCount();// 获取列数量

    for (int i = 0; i < count; i++) {// 遍历列

    TableColumn column = columnModel.getColumn(i);// 获取列对象

    column.setPreferredWidth(columnWidth[i]);// 以数组元素设置列的宽度

    }

    }

    return table;

    }

    展开全文
  • 心法领悟045:给表格列名留个位置。 如果直接将表格控件添加到滚动面板以外的容器中,首先应该通过JTable类的getTableHeader()方法获取表格的JTableHeader表头类的对象,然后再将该对象添加到容器的相应位置,否则...

    心法领悟045:给表格列名留个位置。

    如果直接将表格控件添加到滚动面板以外的容器中,首先应该通过JTable类的getTableHeader()方法获取表格的JTableHeader表头类的对象,然后再将该对象添加到容器的相应位置,否则表格将没有表头,无法显示任何列名称。

    import java.awt.BorderLayout;
    import java.awt.EventQueue;
    import java.util.Arrays;
    
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.border.EmptyBorder;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableColumn;
    import javax.swing.table.TableColumnModel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.UIManager;
    
    public class ArrayCreateTable extends JFrame {
        
        private JPanel contentPane;
        private JScrollPane scrollPane;
        private JTable table;
        
        /**
         * Launch the application.
         */
        public static void main(String[] args) {
            try {
                UIManager
                        .setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
            } catch (Throwable e) {
                e.printStackTrace();
            }
            EventQueue.invokeLater(new Runnable() {
                public void run() {
                    try {
                        ArrayCreateTable frame = new ArrayCreateTable();
                        frame.setVisible(true);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }
        
        /**
         * Create the frame.
         */
        public ArrayCreateTable() {
            setTitle("\u7528\u6570\u7EC4\u8BBE\u7F6EJTable\u8868\u683C\u7684\u5217\u540D\u4E0E\u5217\u5BBD");
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setBounds(100, 100, 557, 300);
            contentPane = new JPanel();
            contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
            contentPane.setLayout(new BorderLayout(0, 0));
            setContentPane(contentPane);
            contentPane.add(getScrollPane(), BorderLayout.CENTER);
        }
        
        private JScrollPane getScrollPane() {
            if (scrollPane == null) {
                scrollPane = new JScrollPane();
                scrollPane.setViewportView(getTable());
            }
            return scrollPane;
        }
        
        private JTable getTable() {
            if (table == null) {
                table = new JTable();
                // 定义列名数组
                String[] columns = { "星期一", "星期二", "星期三", "星期四", "星期五", "星期六",
                        "星期日" };
                // 定义列宽数组
                int[] columnWidth = { 10, 20, 30, 40, 50, 60, 70 };
                // 创建表格数据模型
                DefaultTableModel model = new DefaultTableModel(columns, 15);
                table.setModel(model);// 设置表格数据模型
                TableColumnModel columnModel = table.getColumnModel();// 获取列模型
                int count = columnModel.getColumnCount();// 获取列数量
                for (int i = 0; i < count; i++) {// 遍历列
                    TableColumn column = columnModel.getColumn(i);// 获取列对象
                    column.setPreferredWidth(columnWidth[i]);// 以数组元素设置列的宽度
                }
            }
            return table;
        }
    }
    

     

     

    展开全文
  • 利用JTable类直接创建表格创建表格:在JTable类中除了默认的构造方法之外,还提供了利用指定表格列名数组和表格数据数组创建表格的构造方法,如下:JTable(Object[][] rowData,Object[] columnNames)rowData就是表格...

    利用JTable类直接创建表格

    创建表格:

    在JTable类中除了默认的构造方法之外,还提供了利用指定表格列名数组和表格数据数组创建表格的构造方法,如下:

    JTable(Object[][] rowData,Object[] columnNames)

    rowData就是表格的数据数组

    columnNames就是表格的列名数组。

    使用表格时,一般将其添加到滚动面板中,然后将滚动面板加到相应的位置。

    在JTable中还提供了利用指定表格的列名向量和表格数据向量创造表格的构造方法,如下:

    JTable(Vector rowData,Vector columnNames)

    rowDara就是表格的数据向量

    columnNames就是表格的列名向量

    在使用表格时,有时候不需要使用滚动条,就可以在窗体中显示整个表格,在这种情况下,也可以直接将表格添加到相应的容器中。

    注意:如果是将表格添加到相应的容器中,则需要通过JTable类的getTableHeader()方法获得JTableHeader类的对象,然后再将该对象添加到容器的相应位置,否则表格将没有列名。

    简单表格案例:

    package view.flight;

    import javax.swing.*;

    import java.awt.*;

    /**

    * @author: 我的袜子都是洞

    */

    public class TestGui extends JFrame {

    // 列名

    String[] columnName = new String[]{"航班号", "出发时间", "飞行时间", "出发地", "目的地", "余票", "票价"};

    // 表格具体数据

    String[][] columnDate = new String[][]{

    {"1", "2019-01-18 10:05", "90分钟", "北京", "纽约", "50", "500.0"},

    {"2", "2019-01-18 10:05", "90分钟", "北京", "纽约", "10", "500.0"},

    {"3", "2019-01-18 10:05", "90分钟", "北京", "纽约", "10", "500.0"},

    {"4", "2019-01-18 10:05", "90分钟", "北京", "纽约", "40", "500.0"},

    };

    JTable table = new JTable(columnDate, columnName);

    TestGui(String title) {

    super(title);

    init();

    setComponent ();

    addComponent();

    addListener();

    setVisible(true);

    }

    private void init () {

    setSize(600, 400);

    // 设置窗口位置居中

    setLocationRelativeTo(null);

    // 设置布局

    setLayout(new BorderLayout());

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

    private void setComponent () {

    // 设置第一列宽度为40

    table.getColumnModel().getColumn(0).setPreferredWidth(40);

    // 设置第二列宽度为120

    table.getColumnModel().getColumn(1).setPreferredWidth(120);

    }

    private void addComponent () {

    // 使用srcllpane会自动显示列名

    JScrollPane scrollPane = new JScrollPane(table);

    add(scrollPane, BorderLayout.CENTER);

    }

    private void addListener () {

    }

    public static void main(String[] args) {

    new TestGui("JTable演示");

    }

    }

    e7f16b9bb292

    JTable界面

    定制表格

    表格创建之后,还需要对其进行一系列的定义,以便适合于具体的使用情况。默认情况下双击单元格便可对其编辑,如果不需要此功能,可以通过重构JTable类的isCellEditable(int row,int column)方法实现该方法返回boolean型值true,表示可以编辑,否则返回false则表示不可编辑。

    可通过JTableHeader类的setReorderingAllowed(boolean reorderAllowed)方法设置表格是否支持重新排列功能,该方法返回boolean型值true表示支持,返回false表示不支持。

    默认情况下,单元格中的内容左侧显示,如果需要居中显示,可通过重构JTable类的getDefaultRenderer(Class columnClass)方法来实现。

    重构的代码:

    public TableCellRenderer getDefaultRenderer(Class> columnClass) {

    DefaultTableCellRenderer cr=(DefaultTableCellRenderer)super.getDefaultRenderer(columnClass);

    cr.setHorizontalAlignment(DefaultTableCellRenderer.CENTER);

    return cr;

    }

    JTable类的用来定义表格的常用方法

    setRowHeight(int rowHeight):设置表格的行高,默认像素为16

    setRowSelectionAllowed(boolean sa):设置是否允许选中表格行,默认为允许选中,设为false表示不允许选中

    setSelectionMode(int sm):设置表格行的选中模式

    setSelectionBackground(Color cr):设置表格选中行的背景色

    setSelectionForeground(Color fc):设置表格选中行的前景色

    setAutoResizeMode(int mode):设置表格的自动调整模式

    在利用setSelectionMode(int sm)方法设置表格行的选择模式时,它的入口参数从ListSelectionModel的静态常量中选择。如下:

    静态常量:SINGLE_SELECTION,常量值:0,表示只选择一个。

    静态常量:SINGLE_INTERVAL_SELECTION,常量值:1,表示允许连续选择多个

    静态常量:MULTIPLE_INTERVAL_SELECTION,常量值:2,表示随意选择多个

    在利用setAutoResizeMode(int mode)方法设置表格的自动调整模式时,它的入口参数从JTable类的静态常量中选择。

    注意:表格的自动调整模式,就是在调整表格的某一列的宽度时,表格采用何种方式保持其总宽度不变。

    操纵表格

    在编写应用程序时,经常需要获得表格的一些信息,如下是JTable类中的三个经常用来获得表格信息的方法。

    getRowCount():获得表格拥有的行数,返回值为int型。

    getColumnCount():获得表格拥有的列数,返回值为int型。

    getColumnName(int column):获得位于指定索引位置的列的名称,返回值为String型。

    JTable类中经常用来操纵表格选中行的方法如下:

    setRowSelectionInterval(int from,int to):选中行索引从from到to的所有行(包括索引为from到to的行)

    addRowSelectionInterval(int from,int to):将行索引从from到to的所有行追加为表格的选中行

    isRowSelected(int row):查看行索引为row的行是否被选中

    selectAll():选中表格中的所有行

    clearSelection():取消所有选中行的选择状态

    getSelectedRowCount():得到选中行的数量,返回值为int型,如果没有被选中的行,则返回-1

    getSelectedRow():得到被选中的行中最小的索引值,返回值为int型,如果没有被选中的行,则返回-1

    -getSelectedRows():获得所有被选中行的索引值,返回值为int数组

    表格模型和表格

    接口TableModel定义了一个表格模型,抽象类AbstracTableModel实现了TableModel接口的大部分方法,只有以下3个抽象方法没有实现。

    public int getRowCount()

    public int getColumnCount()

    public Object getValueAt(int rowIndex,int columnIndex)

    通过继承AbstractTableModel可以实现上面的3个抽象方法可以创建自己的表格模型类。DefaultTableModel类便是由Swing类提供的继承了AbstractTableModel类并实现了上面3个抽象方法的表格模型类。

    从JDK1.6开始,提供了对表格进行排序的功能。通过JTable类的setRowSorter(RowSorter extends TableModel> sorter)方法可以为表格设置排序器。TableRowSorter类是由Swing提供的排序类,为表格设置排序器的代码如下:

    DefaultTableModel tableModel=new DefaultTableModel();

    JTable table=new JTable(tableModel);

    table.setRowSorter(new TableRowSorter(tableModel));

    在使用表格排序器时,通常需要为其设置表格模型,一种方法是通过构造方法TableRowSorter(TableModel model),另一种方法是通过setModel(TableModel model)方法为表格排序器设置表格模型。

    维护表格模型

    使用表格时,需要经常对表格中的内容进行维护,如向表格中添加新的数据行、修改表格中某一单元格的值、从表格中删除数据行等,这些操作都可以通过维护表格模型来完成。

    在向表格模型中添加新的数据行时有两种情况:一种是添加到表格模型的尾部,另一种是添加到表格模型指定的索引处,分别由addRow(Object[] rowData)和insertRow(int row,Object[] rowData)或addRow(Vector rowData)和insertRow(int row,Vector rowData)方法实现。

    如果需要修改表格模型中某一个单元格的数据,可以通过方法setValueAt(Object aValue,int row,int column)完成,其中aValue就是修改后的值,可以通过getValueAt(int row,int column)获得单元格的值,该方法返回Object型。

    如果需要删除表格模型中某一行的数据,可以通过方法removeRow(int row)来完成,其中row为欲要删除行的索引。

    使用TableModel模型案例:

    import javax.swing.*;

    import javax.swing.table.AbstractTableModel;

    import java.awt.*;

    /**

    * @author: 我的袜子都是洞

    */

    public class TestGui extends JFrame {

    JTable table = new JTable(new FlightTableModel());

    TestGui(String title) {

    super(title);

    init();

    setComponent ();

    addComponent();

    addListener();

    setVisible(true);

    }

    private void init () {

    setSize(600, 400);

    // 设置窗口位置居中

    setLocationRelativeTo(null);

    // 设置布局

    setLayout(new BorderLayout());

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

    private void setComponent () {

    // 设置第一列宽度为40

    table.getColumnModel().getColumn(0).setPreferredWidth(40);

    // 设置第二列宽度为120

    table.getColumnModel().getColumn(1).setPreferredWidth(120);

    }

    private void addComponent () {

    // 使用srcllpane会自动显示列名

    JScrollPane scrollPane = new JScrollPane(table);

    add(scrollPane, BorderLayout.CENTER);

    }

    private void addListener () {

    }

    public static void main(String[] args) {

    new TestGui("JTable演示");

    }

    }

    class FlightTableModel extends AbstractTableModel {

    // 列名

    String[] columnName = new String[]{"航班号", "出发时间", "飞行时间", "出发地", "目的地", "余票", "票价"};

    // 表格具体数据

    String[][] flightDate = new String[][]{

    {"1", "2019-01-18 10:05", "90分钟", "北京", "纽约", "50", "500.0"},

    {"2", "2019-01-18 10:05", "90分钟", "北京", "纽约", "10", "500.0"},

    {"3", "2019-01-18 10:05", "90分钟", "北京", "纽约", "10", "500.0"},

    {"4", "2019-01-18 10:05", "90分钟", "北京", "纽约", "40", "500.0"},

    };

    /**

    * 返回一共多少行

    */

    @Override

    public int getRowCount() {

    return flightDate.length;

    }

    /**

    * 返回一共多少列

    */

    @Override

    public int getColumnCount() {

    return columnName.length;

    }

    /**

    * 返回每一个单元格的值

    */

    @Override

    public Object getValueAt(int rowIndex, int columnIndex) {

    return flightDate[rowIndex][columnIndex];

    }

    /**

    * 获取每一列的名称

    */

    @Override

    public String getColumnName(int column) {

    return columnName[column];

    }

    /**

    * 单元格是否可以修改

    */

    @Override

    public boolean isCellEditable(int rowIndex, int columnIndex) {

    return false;

    }

    }

    效果:

    e7f16b9bb292

    使用TableModel的案例

    通过监听选中单元格获取对应数据的实例:

    import javax.swing.*;

    import javax.swing.event.ListSelectionEvent;

    import javax.swing.event.ListSelectionListener;

    import javax.swing.table.AbstractTableModel;

    import java.awt.*;

    /**

    * @author: 我的袜子都是洞

    */

    public class TestGui extends JFrame {

    FlightTableModel flight = new FlightTableModel();

    JTable table = new JTable(flight);

    TestGui(String title) {

    super(title);

    init();

    setComponent ();

    addComponent();

    addListener();

    setVisible(true);

    }

    private void init () {

    setSize(600, 400);

    // 设置窗口位置居中

    setLocationRelativeTo(null);

    // 设置布局

    setLayout(new BorderLayout());

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

    private void setComponent () {

    // 设置第一列宽度为40

    table.getColumnModel().getColumn(0).setPreferredWidth(40);

    // 设置第二列宽度为120

    table.getColumnModel().getColumn(1).setPreferredWidth(120);

    }

    private void addComponent () {

    // 使用srcllpane会自动显示列名

    JScrollPane scrollPane = new JScrollPane(table);

    add(scrollPane, BorderLayout.CENTER);

    }

    private void addListener () {

    // selection监听器监听表格哪行被选中

    table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {

    @Override

    public void valueChanged(ListSelectionEvent e) {

    // 被选中的行

    int row = table.getSelectedRow();

    String str = (String)flight.getValueAt(row,0);

    System.out.println("选中的行号是:"+row+",航班号是:"+str);

    }

    });

    }

    public static void main(String[] args) {

    new TestGui("JTable演示");

    }

    }

    class FlightTableModel extends AbstractTableModel {

    // 列名

    String[] columnName = new String[]{"航班号", "出发时间", "飞行时间", "出发地", "目的地", "余票", "票价"};

    // 表格具体数据

    String[][] flightDate = new String[][]{

    {"1", "2019-01-18 10:05", "90分钟", "北京", "纽约", "50", "500.0"},

    {"2", "2019-01-18 10:05", "90分钟", "北京", "纽约", "10", "500.0"},

    {"3", "2019-01-18 10:05", "90分钟", "北京", "纽约", "10", "500.0"},

    {"4", "2019-01-18 10:05", "90分钟", "北京", "纽约", "40", "500.0"},

    };

    /**

    * 返回一共多少行

    */

    @Override

    public int getRowCount() {

    return flightDate.length;

    }

    /**

    * 返回一共多少列

    */

    @Override

    public int getColumnCount() {

    return columnName.length;

    }

    /**

    * 返回每一个单元格的值

    */

    @Override

    public Object getValueAt(int rowIndex, int columnIndex) {

    return flightDate[rowIndex][columnIndex];

    }

    /**

    * 获取每一列的名称

    */

    @Override

    public String getColumnName(int column) {

    return columnName[column];

    }

    /**

    * 单元格是否可以修改

    */

    @Override

    public boolean isCellEditable(int rowIndex, int columnIndex) {

    return false;

    }

    }

    关键部分:

    // selection监听器监听表格哪行被选中

    table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {

    @Override

    public void valueChanged(ListSelectionEvent e) {

    // 被选中的行

    int row = table.getSelectedRow();

    String str = (String)flight.getValueAt(row,0);

    System.out.println("选中的行号是:"+row+",航班号是:"+str);

    }

    });

    获取到的结果图:

    窗口图:

    e7f16b9bb292

    窗口

    数据:

    e7f16b9bb292

    数据

    展开全文
  • Java Swing 中由JTable类实现表格。 一,创建表格 在 JTable 类中除了默认的构造方法外,还提供了利用指定表格列名数组和表格数据数组创建表格的构造方法。 JTable table = new JTable(Object[][] rowData, ...
  • 利用JTable类直接创建表格 创建表格: 在JTable类中除了默认的构造方法之外,还提供了利用指定表格列名数组和表格数据数组创建表格的构造...使用表格时,一般将其添加到滚动面板中,然后将滚动面板加到相应的位置...

    利用JTable类直接创建表格

    创建表格:

    在JTable类中除了默认的构造方法之外,还提供了利用指定表格列名数组和表格数据数组创建表格的构造方法,如下:

    JTable(Object[][] rowData,Object[] columnNames)

    • rowData就是表格的数据数组
    • columnNames就是表格的列名数组。

    使用表格时,一般将其添加到滚动面板中,然后将滚动面板加到相应的位置。

    在JTable中还提供了利用指定表格的列名向量和表格数据向量创造表格的构造方法,如下: JTable(Vector rowData,Vector columnNames)

    • rowDara就是表格的数据向量
    • columnNames就是表格的列名向量

    在使用表格时,有时候不需要使用滚动条,就可以在窗体中显示整个表格,在这种情况下,也可以直接将表格添加到相应的容器中。

    注意:如果是将表格添加到相应的容器中,则需要通过JTable类的getTableHeader()方法获得JTableHeader类的对象,然后再将该对象添加到容器的相应位置,否则表格将没有列名。

    简单表格案例:

    package view.flight;
    
    import javax.swing.*;
    import java.awt.*;
    
    /**
     * @author: 我的袜子都是洞
     */
    public class TestGui extends JFrame {
        // 列名
        String[] columnName = new String[]{"航班号", "出发时间", "飞行时间", "出发地", "目的地", "余票", "票价"};
        // 表格具体数据
        String[][] columnDate = new String[][]{
                {"1", "2019-01-18 10:05", "90分钟", "北京", "纽约", "50", "500.0"},
                {"2", "2019-01-18 10:05", "90分钟", "北京", "纽约", "10", "500.0"},
                {"3", "2019-01-18 10:05", "90分钟", "北京", "纽约", "10", "500.0"},
                {"4", "2019-01-18 10:05", "90分钟", "北京", "纽约", "40", "500.0"},
        };
        JTable table = new JTable(columnDate, columnName);
    
        TestGui(String title) {
            super(title);
            init();
            setComponent ();
            addComponent();
            addListener();
            setVisible(true);
        }
        private void init () {
            setSize(600, 400);
            // 设置窗口位置居中
            setLocationRelativeTo(null);
            // 设置布局
            setLayout(new BorderLayout());
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
        private void setComponent () {
            // 设置第一列宽度为40
            table.getColumnModel().getColumn(0).setPreferredWidth(40);
            // 设置第二列宽度为120
            table.getColumnModel().getColumn(1).setPreferredWidth(120);
            
        }
        private void addComponent () {
            // 使用srcllpane会自动显示列名
            JScrollPane scrollPane = new JScrollPane(table);
            add(scrollPane, BorderLayout.CENTER);
        }
        private void addListener () {
    
        }
        public static void main(String[] args) {
            new TestGui("JTable演示");
        }
    }
    复制代码

    定制表格

    表格创建之后,还需要对其进行一系列的定义,以便适合于具体的使用情况。默认情况下双击单元格便可对其编辑,如果不需要此功能,可以通过重构JTable类的isCellEditable(int row,int column)方法实现该方法返回boolean型值true,表示可以编辑,否则返回false则表示不可编辑。

    可通过JTableHeader类的setReorderingAllowed(boolean reorderAllowed)方法设置表格是否支持重新排列功能,该方法返回boolean型值true表示支持,返回false表示不支持。

    默认情况下,单元格中的内容左侧显示,如果需要居中显示,可通过重构JTable类的getDefaultRenderer(Class<?> columnClass)方法来实现。 重构的代码:

    public TableCellRenderer getDefaultRenderer(Class<?> columnClass) {
        DefaultTableCellRenderer cr=(DefaultTableCellRenderer)super.getDefaultRenderer(columnClass);
        cr.setHorizontalAlignment(DefaultTableCellRenderer.CENTER);
        return cr;
    }
    复制代码

    JTable类的用来定义表格的常用方法

    • setRowHeight(int rowHeight):设置表格的行高,默认像素为16
    • setRowSelectionAllowed(boolean sa):设置是否允许选中表格行,默认为允许选中,设为false表示不允许选中
    • setSelectionMode(int sm):设置表格行的选中模式
    • setSelectionBackground(Color  cr):设置表格选中行的背景色
    • setSelectionForeground(Color  fc):设置表格选中行的前景色
    • setAutoResizeMode(int mode):设置表格的自动调整模式

    在利用setSelectionMode(int sm)方法设置表格行的选择模式时,它的入口参数从ListSelectionModel的静态常量中选择。如下:

    • 静态常量:SINGLE_SELECTION,常量值:0,表示只选择一个。
    • 静态常量:SINGLE_INTERVAL_SELECTION,常量值:1,表示允许连续选择多个
    • 静态常量:MULTIPLE_INTERVAL_SELECTION,常量值:2,表示随意选择多个

    在利用setAutoResizeMode(int mode)方法设置表格的自动调整模式时,它的入口参数从JTable类的静态常量中选择。

    注意:表格的自动调整模式,就是在调整表格的某一列的宽度时,表格采用何种方式保持其总宽度不变。

    操纵表格

    在编写应用程序时,经常需要获得表格的一些信息,如下是JTable类中的三个经常用来获得表格信息的方法。

    • getRowCount():获得表格拥有的行数,返回值为int型。
    • getColumnCount():获得表格拥有的列数,返回值为int型。
    • getColumnName(int column):获得位于指定索引位置的列的名称,返回值为String型。

    JTable类中经常用来操纵表格选中行的方法如下:

    • setRowSelectionInterval(int from,int  to):选中行索引从from到to的所有行(包括索引为from到to的行)
    • addRowSelectionInterval(int from,int to):将行索引从from到to的所有行追加为表格的选中行
    • isRowSelected(int  row):查看行索引为row的行是否被选中
    • selectAll():选中表格中的所有行
    • clearSelection():取消所有选中行的选择状态
    • getSelectedRowCount():得到选中行的数量,返回值为int型,如果没有被选中的行,则返回-1
    • getSelectedRow():得到被选中的行中最小的索引值,返回值为int型,如果没有被选中的行,则返回-1 -getSelectedRows():获得所有被选中行的索引值,返回值为int数组

    表格模型和表格

    接口TableModel定义了一个表格模型,抽象类AbstracTableModel实现了TableModel接口的大部分方法,只有以下3个抽象方法没有实现。

    • public int getRowCount()
    • public int getColumnCount()
    • public Object getValueAt(int rowIndex,int columnIndex)

    通过继承AbstractTableModel可以实现上面的3个抽象方法可以创建自己的表格模型类。DefaultTableModel类便是由Swing类提供的继承了AbstractTableModel类并实现了上面3个抽象方法的表格模型类。

    从JDK1.6开始,提供了对表格进行排序的功能。通过JTable类的setRowSorter(RowSorter<? extends TableModel> sorter)方法可以为表格设置排序器。TableRowSorter类是由Swing提供的排序类,为表格设置排序器的代码如下:

    DefaultTableModel tableModel=new DefaultTableModel();
    JTable table=new JTable(tableModel);
    table.setRowSorter(new TableRowSorter(tableModel));
    复制代码

    在使用表格排序器时,通常需要为其设置表格模型,一种方法是通过构造方法TableRowSorter(TableModel model),另一种方法是通过setModel(TableModel  model)方法为表格排序器设置表格模型。

    维护表格模型

    使用表格时,需要经常对表格中的内容进行维护,如向表格中添加新的数据行、修改表格中某一单元格的值、从表格中删除数据行等,这些操作都可以通过维护表格模型来完成。

    在向表格模型中添加新的数据行时有两种情况:一种是添加到表格模型的尾部,另一种是添加到表格模型指定的索引处,分别由addRow(Object[] rowData)insertRow(int row,Object[] rowData)addRow(Vector rowData)insertRow(int row,Vector rowData)方法实现。

    如果需要修改表格模型中某一个单元格的数据,可以通过方法setValueAt(Object aValue,int row,int column)完成,其中aValue就是修改后的值,可以通过getValueAt(int row,int column)获得单元格的值,该方法返回Object型。

    如果需要删除表格模型中某一行的数据,可以通过方法removeRow(int row)来完成,其中row为欲要删除行的索引。

    使用TableModel模型案例:

    import javax.swing.*;
    import javax.swing.table.AbstractTableModel;
    import java.awt.*;
    
    /**
     * @author: 我的袜子都是洞
     */
    public class TestGui extends JFrame {
    
        JTable table = new JTable(new FlightTableModel());
    
        TestGui(String title) {
            super(title);
            init();
            setComponent ();
            addComponent();
            addListener();
            setVisible(true);
        }
        private void init () {
            setSize(600, 400);
            // 设置窗口位置居中
            setLocationRelativeTo(null);
            // 设置布局
            setLayout(new BorderLayout());
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
        private void setComponent () {
            // 设置第一列宽度为40
            table.getColumnModel().getColumn(0).setPreferredWidth(40);
            // 设置第二列宽度为120
            table.getColumnModel().getColumn(1).setPreferredWidth(120);
    
        }
        private void addComponent () {
            // 使用srcllpane会自动显示列名
            JScrollPane scrollPane = new JScrollPane(table);
            add(scrollPane, BorderLayout.CENTER);
        }
        private void addListener () {
    
        }
        public static void main(String[] args) {
            new TestGui("JTable演示");
        }
    }
    
    class FlightTableModel extends AbstractTableModel {
        // 列名
        String[] columnName = new String[]{"航班号", "出发时间", "飞行时间", "出发地", "目的地", "余票", "票价"};
        // 表格具体数据
        String[][] flightDate = new String[][]{
                {"1", "2019-01-18 10:05", "90分钟", "北京", "纽约", "50", "500.0"},
                {"2", "2019-01-18 10:05", "90分钟", "北京", "纽约", "10", "500.0"},
                {"3", "2019-01-18 10:05", "90分钟", "北京", "纽约", "10", "500.0"},
                {"4", "2019-01-18 10:05", "90分钟", "北京", "纽约", "40", "500.0"},
        };
        /**
         * 返回一共多少行
         */
        @Override
        public int getRowCount() {
            return flightDate.length;
        }
    
        /**
         * 返回一共多少列
         */
        @Override
        public int getColumnCount() {
            return columnName.length;
        }
    
        /**
         * 返回每一个单元格的值
         */
        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
            return flightDate[rowIndex][columnIndex];
        }
    
        /**
         * 获取每一列的名称
         */
        @Override
        public String getColumnName(int column) {
            return columnName[column];
        }
    
        /**
         * 单元格是否可以修改
         */
        @Override
        public boolean isCellEditable(int rowIndex, int columnIndex) {
            return false;
        }
    }
    复制代码

    效果:

    通过监听选中单元格获取对应数据的实例:

    import javax.swing.*;
    import javax.swing.event.ListSelectionEvent;
    import javax.swing.event.ListSelectionListener;
    import javax.swing.table.AbstractTableModel;
    import java.awt.*;
    
    /**
     * @author: 我的袜子都是洞
     */
    public class TestGui extends JFrame {
        FlightTableModel flight = new FlightTableModel();
        JTable table = new JTable(flight);
    
        TestGui(String title) {
            super(title);
            init();
            setComponent ();
            addComponent();
            addListener();
            setVisible(true);
        }
        private void init () {
            setSize(600, 400);
            // 设置窗口位置居中
            setLocationRelativeTo(null);
            // 设置布局
            setLayout(new BorderLayout());
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
        private void setComponent () {
            // 设置第一列宽度为40
            table.getColumnModel().getColumn(0).setPreferredWidth(40);
            // 设置第二列宽度为120
            table.getColumnModel().getColumn(1).setPreferredWidth(120);
    
        }
        private void addComponent () {
            // 使用srcllpane会自动显示列名
            JScrollPane scrollPane = new JScrollPane(table);
            add(scrollPane, BorderLayout.CENTER);
        }
        private void addListener () {
            // selection监听器监听表格哪行被选中
            table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
                @Override
                public void valueChanged(ListSelectionEvent e) {
                    // 被选中的行
                    int row = table.getSelectedRow();
                    String str = (String)flight.getValueAt(row,0);
                    System.out.println("选中的行号是:"+row+",航班号是:"+str);
                }
            });
        }
        public static void main(String[] args) {
            new TestGui("JTable演示");
        }
    }
    
    class FlightTableModel extends AbstractTableModel {
        // 列名
        String[] columnName = new String[]{"航班号", "出发时间", "飞行时间", "出发地", "目的地", "余票", "票价"};
        // 表格具体数据
        String[][] flightDate = new String[][]{
                {"1", "2019-01-18 10:05", "90分钟", "北京", "纽约", "50", "500.0"},
                {"2", "2019-01-18 10:05", "90分钟", "北京", "纽约", "10", "500.0"},
                {"3", "2019-01-18 10:05", "90分钟", "北京", "纽约", "10", "500.0"},
                {"4", "2019-01-18 10:05", "90分钟", "北京", "纽约", "40", "500.0"},
        };
        /**
         * 返回一共多少行
         */
        @Override
        public int getRowCount() {
            return flightDate.length;
        }
    
        /**
         * 返回一共多少列
         */
        @Override
        public int getColumnCount() {
            return columnName.length;
        }
    
        /**
         * 返回每一个单元格的值
         */
        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
            return flightDate[rowIndex][columnIndex];
        }
    
        /**
         * 获取每一列的名称
         */
        @Override
        public String getColumnName(int column) {
            return columnName[column];
        }
    
        /**
         * 单元格是否可以修改
         */
        @Override
        public boolean isCellEditable(int rowIndex, int columnIndex) {
            return false;
        }
    }
    复制代码

    关键部分:

    // selection监听器监听表格哪行被选中
            table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
                @Override
                public void valueChanged(ListSelectionEvent e) {
                    // 被选中的行
                    int row = table.getSelectedRow();
                    String str = (String)flight.getValueAt(row,0);
                    System.out.println("选中的行号是:"+row+",航班号是:"+str);
                }
            });
    复制代码

    获取到的结果图: 窗口图:

    数据:

    转载于:https://juejin.im/post/5c67d74be51d457f093b1b14

    展开全文
  • 最近用java设计了一个桌面管理系统, 在数据展示模块的时候遇到了一点问题,找不到好的展示方式 最后发现了JTable这个类, ...能生成一个5行6列的表格,表头列名是A-Z的大写字母,类似Excel 2.使用自己的指定模板 new
  • 这段代码创建了表格模型首先定义了表格模型的列名向量和数据向量并创建了表格模型然后把表格模型设置为表格构造方法的参数创建表格接着创建一个行值向量并把行值向量添加表格模型行索引是1的行即第2行 注意表格...
  • 2, HTableDescriptor 结构对象 包含表的名字及对应的表的列名 3,HColumnDescriptor 表列族结构对象 建立表或者为表添加列族 4,Table 用于连接单独的Hbase表 提供对表数据的增删改查方法 5,put 用于对单个行执行添加...
  • 创建表格 JTable提供了利用指定表格列名数组和表格数据数组创建啊表格的构造方法。...在使用表格的时候通常将其添加到滚动面板中,然后将滚动面板添加到相应的位置。 实例一:创建可以滚动的表格 import java...
  • 注意:如果是直接将表格添加到相应的容器中,则首先要通过JTable类的getTableHeader()方法获得JTableHeader类的对象,然后再将该对象添加到容器的相应位置,否则表格将没有列名 import java.awt.BorderLayout; ...
  • Java经典编程300例(code)

    千次下载 热门讨论 2013-01-09 10:26:53
    列名与列宽 49 实例035 使用按钮控件数组实现 计算器界面 51 实例036 通过复选框控件数组实现 添加多个复选框控件 52 实例037 使用选择排序法对数组排序 53 实例038 使用冒泡排序法对数组排序 55 实例039 使用快速...
  • 发布旧答案以添加一些有用的信息 .我遇到了类似的问题,但我也希望看到CONSTRAINT_TYPE以及REFERENCED表和列名 . 所以,要查看表格中的所有FK:USE '';SELECT i.TABLE_NAME, i.CONSTRAINT_TYPE, i.CONSTRAINT_NAME, ...
  • // 表格列名 { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; @Override public int getColumnCount() // 返回表格列数 { return columnName.length; } ...
  • 实例045 用数组设置JTable表格列名与列宽 55 3.2 数组操作 57 实例046 数组的下标界限 57 实例047 按钮控件数组实现计数器界面 58 实例048 复选框控件数组 59 实例049 用数组反转字符串 60 3.3 数组排序与查询 61 ...
  • 实例045 用数组设置JTable表格列名与列宽 55 3.2 数组操作 57 实例046 数组的下标界限 57 实例047 按钮控件数组实现计数器界面 58 实例048 复选框控件数组 59 实例049 用数组反转字符串 60 3.3 数组排序与查询 61 ...
  • 实例045 用数组设置JTable表格列名与列宽 55 3.2 数组操作 57 实例046 数组的下标界限 57 实例047 按钮控件数组实现计数器界面 58 实例048 复选框控件数组 59 实例049 用数组反转字符串 60 3.3 数组排序与查询 61 ...
  • 实例045 用数组设置JTable表格列名与列宽 55 3.2 数组操作 57 实例046 数组的下标界限 57 实例047 按钮控件数组实现计数器界面 58 实例048 复选框控件数组 59 实例049 用数组反转字符串 60 3.3 数组排序与查询 61 ...
  • 实例045 用数组设置JTable表格列名与列宽 3.2 数组操作 实例046 数组的下标界限 实例047 按钮控件数组实现计数器界面 实例048 复选框控件数组 实例049 用数组反转字符串 3.3 数组排序与查询 实例050 使用...
  • 实例045 用数组设置JTable表格列名与列宽 3.2 数组操作 实例046 数组的下标界限 实例047 按钮控件数组实现计数器界面 实例048 复选框控件数组 实例049 用数组反转字符串 3.3 数组排序与查询 实例050 使用...
  • 实例045 用数组设置JTable表格列名与列宽 3.2 数组操作 实例046 数组的下标界限 实例047 按钮控件数组实现计数器界面 实例048 复选框控件数组 实例049 用数组反转字符串 3.3 数组排序与查询 实例050 使用...
  • 实例045 用数组设置JTable表格列名与列宽 3.2 数组操作 实例046 数组的下标界限 实例047 按钮控件数组实现计数器界面 实例048 复选框控件数组 实例049 用数组反转字符串 3.3 数组排序与查询 实例050 使用...
  • 实例045 用数组设置JTable表格列名与列宽 3.2 数组操作 实例046 数组的下标界限 实例047 按钮控件数组实现计数器界面 实例048 复选框控件数组 实例049 用数组反转字符串 3.3 数组排序与查询 实例050 使用...
  • EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的...能知道每个表格导出时需要查询的字段和列名,以及每次导入时需要拼接的sql 添加语句。 通过以下四张表就...
  • sql客户端-源码

    2021-02-10 11:18:54
    关于该项目 还有另一个用于处理SQL数据库的CLI。 原因如下: 从远程Oracle数据库上的命令行运行查询时,输出很难读取。 该项目的目的是拥有一个Oracle Database cli工具,该工具可打印类似MySQL cli的数据。...Java
  • 2009达内SQL学习笔记

    2010-02-10 19:46:58
    如果指定列名,则DISTINCT只能用于COUNT(列名),DISTINCT不能用于COUNT(*)。 如:Select Distinct name From s_dept; Select Distinct dept_id,title From s_emp; 文本处理: TRIM()/LTRIM()/RTIRM():去空格。...
  • ext editorGrid 问题

    2009-12-03 20:45:31
    [code="java"]/** * 在线通讯录制作: 刘长炯 beansoft@126.com http://beansoft.blogjava.net/ 2008年5月 */ // 定义一个用户对象,这样便于我们动态的添加记录,虽然也可以设置成匿名内置对象 var User = Ext...
  • 测试培训教材

    2014-04-01 12:10:48
    9. 把QC中的需求字段和需求模版的列名所对应的字母标号进行关联映射。 从Excel导入 选Demo项目,提示错误: 改成用alice_qc用户登录即可! Author全改成Admin 从...
  • jpivot学习总结.doc

    2011-12-09 08:38:08
    baseDisplayURL 否 String 是 显示图表的链接,链接的后面还要添加参数“ ?=filename=[ 临时图表文件的名称 ] ” controllerURL 否 String 是 链接到 JPivot Controller 的 URL ,该属性在一些复杂环境下...
  • [Oracle.11g权威指南(第2版)].谷长勇.扫描版.pdf

    千次下载 热门讨论 2013-06-23 21:16:09
    3.3.7 添加Oracle用户的限制参数 34 3.3.8 创建安装所需要的目录 34 3.3.9 设置Oracle的环境变量 35 3.3.10 解压缩安装包 35 3.4 在Linux环境下安装Oracle 11g 36 3.4.1 Oracle用户图形终端方式登录 36 3.4.2 安装...
  • 9.1 电子表格 225 9.2 通过Model子句进行跨行引用 226 9.2.1 示例数据 226 9.2.2 剖析Model子句 227 9.2.3 规则 228 9.3 位置和符号引用 229 9.3.1 位置标记 229 9.3.2 符号标记 230 9.3.3 FOR循环 231 ...

空空如也

空空如也

1 2
收藏数 31
精华内容 12
关键字:

java表格添加列名

java 订阅