java的swing编程,Jtable的单元格如何赋值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java的swing编程,Jtable的单元格如何赋值相关的知识,希望对你有一定的参考价值。

java的swing编程,Jtable的单元格如何赋值
jTable.setValueAt(45,1,1);
这样写有错误。jTable是表的名字。我用的工具是netbean,可视化编程,直接拖控件的。请问要怎么赋值

不能对JTable直接进行增删改,要先获取JTable的model然后修改model再将修改后的model赋给JTable

String[] data = new String[8];//用于操作表内数据行的data数组,元素个数要与table的列的数量相一致
int numT;//表格已有数据的行数
JTable jTable=new JTable();
DefaultTableModel model = (DefaultTableModel) this.jTable.getModel();
numT = model.getRowCount();//获取当前已有行数
while (numT > 0) //如果是全体刷新表格需要移除之前的所有数据行
model.removeRow(0);
numT--;

sql= "select name,number,area,price,room,acreage,fishing,mating from message";
try
rs=stmt.executeQuery(sql);
while (rs.next())
data[0] = rs.getString(1).trim();
data[1] = rs.getString(2).trim();
data[2] = rs.getString(3).trim();
data[3] = rs.getString(4).trim();
data[4] = rs.getString(5).trim();
data[5] = rs.getString(6).trim();
data[6] = rs.getString(7).trim();
data[7] = rs.getString(8).trim();
model.addRow(data);

catch(SQLException e)
System.err.print("Error" + e.getMessage());

jTable.setModel(model);//将修改后的model传回给JTable

至于JButton那些触发在事件侦听里,根据
jTable.getSelectedRow();获取已选行号
jTable.getSelectedColumn();获取已选列号
改行就光获取行号就可以了,然后读取模板,删掉该行再传回给JTable即可
在JTable创建时可以选择设置是否允许多选,不多选上面的方法已经够了
还有什么百度hi吧,这里不多说了,省的又要审核了追问

在百度hi里面说吧

参考技术A 有两个方法。
1、自定义渲染器,自己添加。(或是用JDK已有的渲染器也可以)
2、重写TableModel的getColumnClass
参考实例如下:

public class Test
public static void main(String[] args)
String[][] cells = new String[6][7];
String add = "1";//已经存在的变量
int addValue = Integer.parseInt(add);//需要定义的中间变量
for (int rowIndex = 0; rowIndex <= 5; rowIndex++)
for (int columnIndex = 0; columnIndex <= 6; columnIndex++)
cells[rowIndex][columnIndex] = String.valueOf(addValue++) ;//赋值过程
System.out.print(cells[rowIndex][columnIndex]+",");

System.out.println("");


Swing-JTable的渲染器与编辑器使用demo

JTable的内容、外观、事件响应在很大程度上是由渲染器与编辑器控制的。具体说来,渲染器负责单元格的外观比如前景色、背景色,以及单元格提示;编辑器负责单元格的内容和事件响应。编辑器默认为文本框形式,也可以使用下拉菜单、按钮、单选按钮等形式。下面通过一个demo程序来说明渲染器与编辑器的基本用法。

JButtonTableExample.java

package JButtonTableExample;


import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;


public class JButtonTableExample extends JFrame {

    public JButtonTableExample() {
        super("JButtonTable Example");

        //添加TableModel以及表格数据
        DefaultTableModel dm = new DefaultTableModel();
        dm.setDataVector(new Object[][] { { "button 1", "foo" },
                { "button 2", "bar" } }, new Object[] { "Button", "String" });

        JTable table = new JTable(dm);
        //添加渲染器
        table.getColumn("Button").setCellRenderer(new ButtonRenderer());
        //添加编辑器
        table.getColumn("Button").setCellEditor( new ButtonEditor(new JCheckBox()));
        //GUI设置
        JScrollPane scroll = new JScrollPane(table);
        getContentPane().add(scroll);
        setSize(400, 100);
        setVisible(true);
    }

    public static void main(String[] args) {

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

以上是主程序,构造了GUI、table以及model。并设置了table的渲染器和编辑器。

 

ButtonRenderer.java

package JButtonTableExample;

import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;

class ButtonRenderer extends JButton implements TableCellRenderer {

      public JComponent getTableCellRendererComponent(JTable table, Object value,
          boolean isSelected, boolean hasFocus, int row, int column) {
          //value 源于editor
          String text = (value == null) ? "" : value.toString();
          //按钮文字
          setText(text);
          //单元格提示
          setToolTipText(text);
          //背景色
          setBackground(Color.BLACK);
          //前景色
          setForeground(Color.green);
        return this;
      }
    }

定制的渲染器必须实现TableCellRenderer及getTableCellRendererComponent方法。在该方法中,可以指定渲染器的文字、单元格提示、颜色、字体等。注意,此处的文字仅为显示的内容,不是单元格的实际数据。

 

ButtonEditor.java

package JButtonTableExample;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JOptionPane;
import javax.swing.JTable;

class ButtonEditor extends DefaultCellEditor {
      protected JButton button;//represent the  cellEditorComponent
      private String cellValue;//保存cellEditorValue

      public ButtonEditor(JCheckBox checkBox) {
        super(checkBox);
        button = new JButton();
        button.setOpaque(true);
        button.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            JOptionPane.showMessageDialog(button, cellValue + ": Ouch!");
          //刷新渲染器
            fireEditingStopped();
          }
        });
      }

      public JComponent getTableCellEditorComponent(JTable table, Object value,
          boolean isSelected, int row, int column) {
        //value 源于单元格数值
        cellValue = (value == null) ? "" : value.toString();
        return button;
      }

     public Object getCellEditorValue() {
        return new String(cellValue);
      }
    }

 

本编辑器实现了一个按钮,相应的业务代码均位于其事件响应函数中。定制的渲染器必须继承DefaultCellEditor,并重载其getTableCellEditorComponent方法。getTableCellEditorComponent的参数提供了表格对象、单元格数值、单元格选中标志以及单元格的坐标,并返回代表该单元格的渲染器的JComponent组件。在该方法中,我们将单元格数值保存为成员变量cellValue,并返回一个按钮。getCellEditorValue方法用于返回单元格数值,需要我们显示地指定。在按钮的事件响应函数中,本demo通过弹出对话框输出了相应的单元格数值。然后,调用了fireEditingStopped方法刷新渲染器。注意,该步骤不必可少,因为渲染器中的业务代码很有可能改变单元格数值,从而导致渲染器必须进行刷新。

运行效果如下:

技术分享

 

技术分享

 

以上是关于java的swing编程,Jtable的单元格如何赋值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JTable 中将单元格居中

java swing JTable显示问题

在点击之前如何使JTable中的单元格为空?

请问在java JTable中如何设置单元格字体居中对齐?

java swing怎么通过按钮实现对表格的增删改查操作

Swing jtable 怎么合并单元格 合并行 合并列