GVKun编程网logo

如何在JTable中添加行?(如何在jtable里添加数据)

5

在本文中,我们将给您介绍关于如何在JTable中添加行?的详细内容,并且为您解答如何在jtable里添加数据的相关问题,此外,我们还将为您提供关于java–如何在JTable中动态设置RowHeigh

在本文中,我们将给您介绍关于如何在JTable中添加行?的详细内容,并且为您解答如何在jtable里添加数据的相关问题,此外,我们还将为您提供关于java – 如何在JTable中动态设置RowHeight、java – 如何在JTable中隐藏网格线、jQuery Datatables插件:如何在向表中添加行时指定行属性、jQuery-JTable:添加行的单击事件吗?的知识。

本文目录一览:

如何在JTable中添加行?(如何在jtable里添加数据)

如何在JTable中添加行?(如何在jtable里添加数据)

您知道如何将新行添加到jTable吗?

答案1

小编典典

TableModelJTable的后面处理表后面的所有数据。为了在表格中添加和删除行,您需要使用DefaultTableModel

要使用此模型创建表:

JTable table = new JTable(new DefaultTableModel(new Object[]{"Column1", "Column2"}));

要添加一行:

DefaultTableModel model = (DefaultTableModel) table.getModel();model.addRow(new Object[]{"Column 1", "Column 2", "Column 3"});

您也可以使用此方法删除行。

java – 如何在JTable中动态设置RowHeight

java – 如何在JTable中动态设置RowHeight

我想在一个比给定单元格宽度更长的JTable中放置一个String.
如何动态设置rowHeight以便我可以读取整个String?
这是一个例子:
import javax.swing.*;

public class ExampleTable {

public JPanel createTable() {               
    JPanel totalGUI = new JPanel();

    //define titles for table
    String[] title = {"TITLE1","TITLE2","TITLE3"};

    //table data
    Object[][] playerdata = {       
    {new Integer(34),"Steve","test test test"},{new Integer(32),"Patrick","dumdi dumdi dummdi dumm di di didumm"},{new Integer(10),"Sarah","blabla bla bla blabla bla bla blabla"},};

    //create object 'textTable'
    JTable textTable = new JTable(playerdata,title);

    //set column width
    textTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
    textTable.getColumnModel().getColumn(0).setPreferredWidth(60);
    textTable.getColumnModel().getColumn(1).setPreferredWidth(60);
    textTable.setDefaultRenderer(String.class,new RowHeightCellRenderer());

    //scrollbar
    JScrollPane scrollPane = new JScrollPane(textTable);

    totalGUI.add(scrollPane);               
    return totalGUI;
}

private static void createAndShowGUI() {

    //create main frame
    JFrame mainFrame = new JFrame("");
    ExampleTable test = new ExampleTable();

    JPanel totalGUI = new JPanel();
    totalGUI = test.createTable();

    //visible mode
    mainFrame.add(totalGUI); //integrate main panel to main frame
    mainFrame.pack();
    mainFrame.setVisible(true);     
}


public static void main (String[] args) {               

    createAndShowGUI();     

}//main
}

在这里,您将看到用于对给定单元格的每个文本进行换行的代码

import java.awt.*;
    import javax.swing.*;
    import javax.swing.table.*;


    public class RowHeightCellRenderer extends JTextArea implements TableCellRenderer
    {
      /**
         * 
         */
        private static final long serialVersionUID = 1L;

    public Component getTableCellRendererComponent (JTable table,Object value,boolean isSelected,boolean hasFocus,int row,int column )  {
        setText( value.toString() );    
        return this;
      }
    }

谢谢,但我想动态实现RowHeight,具体取决于字符串长度…
我想读取单元格中的整个字符串/文本.有什么建议?

我是java初学者,这是我的第一个问题.我很高兴得到答案.

解决方法

使用JTextArea作为渲染组件时存在几个问题(并且大多数(如果不是全部)已经在此站点上的几个QA中进行了解释).试着总结一下:

将单个行高调整为渲染组件的大小要求

基本上,要走的路是根据需要循环遍历单元格

>使用数据配置其渲染器
>询问渲染组件的首选大小
>将表格行高度设置为pref高度

OP编辑过的问题中的updateRowHeight方法很好.

JTextArea计算其preferredSize

为了获得一个合理的尺寸提示,它需要在另一个维度上以一些合理的尺寸“播种”.也就是说,如果我们想要一个需要宽度的高度,那么必须在每个调用中完成.在表的上下文中,合理的宽度是当前列宽:

public Component getTableCellRendererComponent(JTable table,int column) {
    ... // configure visuals
    setText((String) value);
    setSize(table.getColumnModel().getColumn(column).getWidth(),Short.MAX_VALUE);
    return this;
}// getTableCellRendererComponent

动态调整高度

行高度完全确定在表/列/模型的某些稳定状态.因此,在初始化完成后以及任何其所依赖的状态发生更改时,您都要设置它(调用updateRowHeight)一次.

// TableModelListener
@Override
public void tableChanged(TableModelEvent e) {
    updateRowHeights();
}

// TableColumnModelListener
@Override
public void columnMarginChanged(ChangeEvent e) {
    updateRowHeights();
}

注意

作为一般规则,getXXRendererComponent中的所有参数都是严格只读的,实现不得更改调用者的任何状态.从渲染器中更新rowHeight是错误的.

java – 如何在JTable中隐藏网格线

java – 如何在JTable中隐藏网格线

我试图隐藏JTable的网格线,但没有结果.甚至尝试改变网格线的颜色不起作用.这是我的代码:
// build the table
tableView = new JTable(ttm);
//Specifify the selection Listener and model
listSelectionModel = tableView.getSelectionModel();
listSelectionModel.addListSelectionListener(new SharedListSelectionHandler(tableView));
tableView.setSelectionModel(listSelectionModel);

//Add a mouse listener to our table and implement double click event
tableView.addMouseListener(new MouseAdapter(){

    public void mouseClicked(MouseEvent e){

        //If double click in a message show the Message Details window
        if (e.getClickCount() == 2){

            showMessageDetail();
            }
    }


} );

// set my own renderer
CustomCellRenderer mtr = new CustomCellRenderer();
tableView.setDefaultRenderer(Object.class,mtr);
// table properties
tableView.setGridColor(Color.black);
tableView.setShowGrid(false);
//tableView.setShowVerticalLines(false);
//tableView.setShowHorizontalLines(false);
tableView.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
//hide header
tableView.setTableHeader(null);
// hide the id column
String columName = tableView.getColumnName(TableModel.COLUMN_ID);
tableView.getColumn(columName).setMaxWidth(0);
tableView.getColumn(columName).setMinWidth(0);
tableView.getColumn(columName).setWidth(0);
//load the messages in the table
loadMessages();
//adjust column width
tableView = autoResizeColWidth(tableView,ttm);


    public class CustomCellRenderer extends JPanel implements TableCellRenderer {
/**
 * First gradient color
 */
private static final Color COLOR_1 = new Color(255,255,200);
/**
 * Second gradient color
 */
private static final Color COLOR_2 = new Color(255,200);
/**
 * Controls gradient direction
 */
private static final float SIDE = 50;

private GradientPaint gradientPaint = new GradientPaint(0,COLOR_1,SIDE,COLOR_2,true);

private JLabel label = new JLabel();

    public CustomCellRenderer() {
        setopaque(true);
        setLayout(new BorderLayout());
        add(label,BorderLayout.CENTER);
        label.setHorizontalAlignment(SwingConstants.CENTER);
    }

    public Component getTableCellRendererComponent(JTable table,Object value,boolean isSelected,boolean hasFocus,int row,int column) {
        label.setText(value.toString());
        return this;
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        g2.setPaint(gradientPaint);
        g2.fillRect(0,getWidth(),getHeight());
    }
    }

白色网格线总是被绘制.我被困在这里

我必须实现一个自定义的视口来摆脱这一点吗?

提前致谢,
亚历克斯

解决方法

你必须设置两件事情

>禁用网格显示
>零行/列单元间距

代码:

table.setShowGrid(false);
table.setIntercellSpacing(new Dimension(0,0));

或者使用JXTable(从SwingX project开始):

xTable.setShowGrid(false,false);

jQuery Datatables插件:如何在向表中添加行时指定行属性

jQuery Datatables插件:如何在向表中添加行时指定行属性

我想知道是否有其他人遇到过这个问题.当我最初在我的视图中构建我的表时,我在每个表行中使用自定义属性(称为customerID)来保存我需要传递给ajax调用的信息.但是,我也在动态地向表中添加行,我无法弄清楚如何传回相同的信息(customerID)以放入行的属性中.目前,我在添加行时唯一要做的就是构建一个字符串数组数组,这些数组完全映射到我的列.这工作正常,但没有空间发送回额外的信息.

我想我不需要将它存储在属性中,如果在添加行时有另一种方法将该信息发送回视图.有没有人对此有任何想法?

谢谢.

解决方法

我能够通过使用插件的内置函数逐个遍历行来解决这个问题.在服务器上,我创建了一个私有类,其中包含我回到客户端后所需的所有信息的字段.这包括表格单元格的实际值,还包括要放置在属性中的信息.我创建了这些列表(一个对象=一行的信息),序列化它们,并将它们发送回调用ajax方法.下面的代码假设我收到了序列化的对象字符串,我在JS中:
function(rowsToAdd) {

    var rowList = JSON.parse(rowsToAdd); // rows come back as object representations of table rows,with properties

    $.each(rowList,function(index,row) {
        var rowStringArray = [row.Prop1,row.Prop2,row.Prop3,row.Prop4];
        var rowPos = tableObject.fnAddData(rowStringArray); // add the row through the plugin,and receive the row's index in return
        var tableRowElement = tableObject.fnGetNodes(rowPos[0]); // get reference to <tr> element just added

        $(tableRowElement).attr('attributeINeeded',row.AttributeProp).attr('anotherAttributeINeeded',row.AttributeProp2);
    });
}

jQuery-JTable:添加行的单击事件吗?

jQuery-JTable:添加行的单击事件吗?

我必须遵循以下代码来显示我的用户表,这是通过JTable实现的。

<script type="text/javascript">    $(document).ready(function() {                      $(''#userTableContainer'').jtable({            title: ''Users'',            selecting: false,            paging: true,            pageSize: 15,            sorting: true,            addRecordButton: false,            saveUserPreferences: false,            create: false,            edit: false,            actions: {                listAction: ''user/getUsers.htm'',            },            fields: {                username: {                    title: ''username''                },                firstname: {                    title: ''firstname''                },                lastname: {                    title: ''lastname''                },                company: {                    title: ''company''                }             }        });        $(''#userTableContainer'').jtable(''load'');                  });</script><div id="content">    <h1>Users</h1>    <br />    <div id="userTableContainer">    </div></div>

是否可以为每行添加一个自定义操作事件?这样我就可以向控制器提交“ user / showUser.htm”之类的请求。

答案1

小编典典

这应该可以帮助您:

$(''#userTableContainer'').jtable({    ....    recordsLoaded: function(event, data) {        $(''.jtable-data-row'').click(function() {            var row_id = $(this).attr(''data-record-key'');            alert(''clicked row with id ''+row_id);        });    }});

关于如何在JTable中添加行?如何在jtable里添加数据的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于java – 如何在JTable中动态设置RowHeight、java – 如何在JTable中隐藏网格线、jQuery Datatables插件:如何在向表中添加行时指定行属性、jQuery-JTable:添加行的单击事件吗?的相关信息,请在本站寻找。

本文标签: