标签: tablemodel

ArrayList的数组与ArrayLists的数组相似

我正在创建一个TableModel,它将具有固定数量的列,但行数将会发生变化(大多数情况下,随着时间的推移而增加).哪种方法可以更好地存储数据,

ArrayList[] columns = new ArrayList[numberOfColumns];
// Each array element is one column. Fill each of them with a new ArrayList.
...
public Object getValueAt(int row, int column) {
    return columns[column].get(row);
}
Run Code Online (Sandbox Code Playgroud)

即创建一个ArrayLists 数组,每个数组ArrayList代表一列,或者:

ArrayList<Object[]> rows = new ArrayList<Object[]>();
// Each ArrayList element is one row.

public Object getValueAt(int row, int column) {
    return rows.get(row)[column];
}
Run Code Online (Sandbox Code Playgroud)

即创建一个包含数组的ArrayList,每个数组代表一行.

有哪些想法在速度或存储方面更有效?备选方案1要求ArrayList在每个添加的行中扩展N s,而备选方案2要求仅扩展一个,ArrayList但也创建长度为N的新数组(以表示新行).还是有一个明显的,更好的解决方案?

java arrays arraylist tablemodel data-structures

6
推荐指数
1
解决办法
1万
查看次数

从JXTreeTable中获取选定的值

我正在构建一个treetable使用JXTreeTabble,我想menu根据所选值禁用/能够项目.所以,我试着把这个代码放在我的table model:

public Object getValueAt(int index) {
        if (index >= 0 && index < root.getSize()){
            return root.get(index);
        }

        return null;

    }
Run Code Online (Sandbox Code Playgroud)

问题

以上仅适用于table未扩展内容的情况.由于indexselected row可能是比较大size的T的able model(模型可以有两个项目和行可以有10当一切都展开).此外,它object typeparent不同之处children(想象一本带有章节的书,因为它的孩子).

你有什么建议正确地做到这一点?

java object selected tablemodel jxtreetable

6
推荐指数
2
解决办法
3345
查看次数

如何在JTable行中设置自定义对象

我应该首先告诉它,这不是关于渲染表格单元格.

这是我正在使用基于User我的数据库中的对象的2D数组构建的TableModel .

    List<User> userList = userManagerService.getAllUsers();

    /* String[] col_user = {"Username", "Name", "Phone", .... } */
    String[][] data = new String[userList.size()][col_user.length];
    int i = 0;
    for (User user : userList) {
        String[] userdata = new String[col_user.length];
        userdata[0] = user.getUserUsername();
        userdata[1] = user.getUserName();
        userdata[2] = user.getUserPhone();
        userdata[3] = user.getUserNic();
        userdata[4] = user.getUserAddress();
        userdata[5] = user.getUserEmail();

        data[i++] = userdata;
    }

    VstTableItemModel tiModel = new VstTableItemModel(data, col_user);
    dataTable.setModel(tiModel);
Run Code Online (Sandbox Code Playgroud)

我的问题是如何User使用表中的选定行返回一个对象.请注意,我无法创建新User对象并使用行数据填充它.我必须得到被查询的User对象(对象userList).那么,他们用表格行设置对象的方法是什么?

这是我的VstTableItemModel课. …

java user-interface swing jtable tablemodel

6
推荐指数
1
解决办法
1万
查看次数

如何在JTable列中设置图标?

我能够设置列的标题,但无法在JTable的第一列的所有行中设置图标.

public class iconRenderer extends DefaultTableCellRenderer{
    public Component getTableCellRendererComponent(JTable table,Object obj,boolean isSelected,boolean hasFocus,int row,int column){
        imageicon i=(imageicon)obj;
        if(obj==i)
            setIcon(i.imageIcon);
        setBorder(UIManager.getBorder("TableHeader.cellBorder"));
        setHorizontalAlignment(JLabel.CENTER);
        return this;
    }
}

public class imageicon{
    ImageIcon imageIcon;
    imageicon(ImageIcon icon){
        imageIcon=icon;
    }
}  
Run Code Online (Sandbox Code Playgroud)

我的BuildTable()方法中的行和下面的行.

    public void SetIcon(JTable table, int col_index, ImageIcon icon){
      table.getTableHeader().getColumnModel().getColumn(col_index).setHeaderRenderer(new iconRenderer());
      table.getColumnModel().getColumn(col_index).setHeaderValue(new imageicon(icon));
}
Run Code Online (Sandbox Code Playgroud)

我们如何为第一列的所有行设置它?我已尝试使用for循环,但还没有得到行迭代来设置图标.或者还有其他方法吗?

java swing jtable cellrenderer tablemodel

5
推荐指数
1
解决办法
1万
查看次数

JTable中的单元验证

我有一个JTable需要对用户可以输入文本的单元格进行单元验证.当用户输入无效文本时,单元格的边框变为红色.

我设法让这个工作关联一个二维数组来标记每个单元格是否有错误.

问题是用户必须能够重新排序表(按列).我必须将错误标志存储在表模型中,而不是分开存储.任何人都有想法如何做到这一点?

java swing jtable tablemodel

5
推荐指数
2
解决办法
1万
查看次数

似乎无法使TableModelListener工作

我正在创建一个UI类,其中所有内容都将运行(另一个类将作为运行器).在这个类中,我有一个表,并且该表应该在更改时创建TableModeEvents,但它似乎没有这样做.

每当我对桌子做任何事情时,控制台都会打印出"测试",但事实并非如此.我已经制作了其他SSCCE,只要我将所有内容保存在一个程序中(在主方法中并且只有子类和匿名类),它们就能正常工作,但我似乎无法让它跨类工作.

知道我做错了什么吗?

package SSCCE;

import java.awt.BorderLayout;

import javax.swing.*;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;

public class SSCCE {

static Object[][] data = { {"Abyss", Boolean.FALSE},{"Scepter", Boolean.FALSE},{"FoN", Boolean.FALSE} };
public static void main(String[] args){

    //table model------------------------------------------
    TableModel model = new AbstractTableModel(){
        Object[][] rowData = { {"Abyss", Boolean.FALSE},{"Scepter", Boolean.FALSE},{"FoN", Boolean.FALSE} };
        String[] columnNames = {"Name","Boolean"};

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

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

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

          public Object getValueAt(int row, int column) {return rowData[row][column];} …
Run Code Online (Sandbox Code Playgroud)

java swing jtable listener tablemodel

4
推荐指数
1
解决办法
6188
查看次数

如何在JTable中刷新数据我正在使用TableModel

嗨,

我创建了我的TableModel,并希望在添加新行后刷新JTable.应该添加什么来监听"刷新"JTable?

public class MyTableModel implements TableModel  {
    private Set<TableModelListener> listeners = new HashSet<TableModelListener>();

    //List<Staff> staffs = Factory.getInstance().getStaffDAO().getAllStaff();
    private List<Staff> staffs;

    public MyTableModel(List<Staff> staffs){
        this.staffs = staffs;
    }

    @Override
    public int getRowCount() {
        return staffs.size();
    }

    @Override
    public int getColumnCount() {
        return 5;  
    }

    @Override
    public String getColumnName(int columnIndex) {
        switch (columnIndex){
            case 0:
                return "First Name";
            case 1:
                return "Second Name";
            case 2:
                return "Date";
            case 3:
                return "Position";
            case 4:
                return "Salary";
        }
        return "";  
    }

    @Override
    public …
Run Code Online (Sandbox Code Playgroud)

java swing jtable tablemodel

4
推荐指数
2
解决办法
5万
查看次数

Java Swing - 通知GUI有关模型的更改

我在JTable中有一个列绑定到业务对象列表上的底层布尔属性.我还有一个组合框,应该选择应该选择哪些项目.我基本上将以下代码添加为组合框的处理程序:

            macroCombo.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    JComboBox comboBox = (JComboBox) e.getSource();
                    Predicate filter = (Predicate) comboBox.getSelectedItem();
                    for(SelectableKey key : tableEntries){
                        key.setSelected(filter.evaluate(key));
                    }
                }
            });
Run Code Online (Sandbox Code Playgroud)

我还想根据值改变一些其他控件.目前,表中只有少数单元格会更改其状态以进行选择/取消选择.只有当我单击该行或选择多行时,UI才会自行更新.是否有来自我需要做的处理程序的调用来告诉GUI重绘自己?ALOS,如果我修改除JTable之外的其他控件,我怎么告诉他们改变他们的状态?

谢谢

java swing jtable jcombobox tablemodel

3
推荐指数
1
解决办法
807
查看次数

Java,将单元格内容更改为同一行中另一个单元格的函数

我的问题需要一些帮助.我有一个表,例如双列和字符串列.如果双列中的值为negativ,则字符串应为"negativ".另一种方式,如果值为positiv,则字符串应为"positiv".现在的问题是如果我在jTable中编辑double值,那么字符串也应该更新.

更新我的问题,实际代码如下所示: 但它不起作用,因为在编辑第一列值后,第二列中的字符串不会更新.它只在我第一次启动程序时才有效.

import java.util.Vector;
import javax.swing.*;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.*;

public class ExampleRemoveAddRows extends JFrame {

    private Object[] columnNames = {"Double", "positiv / negativ"};
    private Object[][] data = {
        {new Double(10.0), "positiv"},
        {new Double(-10.0), "negativ"},
        {new Double(20.0), "positiv"},
        {new Double(-30.0), "negativ"}
    };
    private JTable table;
    private DefaultTableModel model;

    public ExampleRemoveAddRows() {
        model = new DefaultTableModel(data, columnNames) {
            @Override
            public Class getColumnClass(int column) {
                return getValueAt(0, column).getClass();
            }
            @Override
            public Object getValueAt(int row, int column) {  
                if (column …
Run Code Online (Sandbox Code Playgroud)

java swing jtable tablemodel

3
推荐指数
1
解决办法
2840
查看次数

使用多个自定义表模型,避免重复代码

我正在一个项目中,我们有几个域类来建模业务数据.这些类是简单的POJO,我必须使用它们显示几个表.例如,考虑这个类:

public class Customer {

    private Long id;
    private Date entryDate;
    private String name;
    private String address;
    private String phoneNumber;

    public Customer(Long id, Date entryDate, String name, String address, String phoneNumber) {
        this.id = id;
        this.entryDate = entryDate;
        this.nombre = name;
        this.domicilio = address;
        this.telefono = phoneNumber;
    }

    // Getters and setters here
}
Run Code Online (Sandbox Code Playgroud)

我创建了自己的表格模型,从AbstractTableModel扩展,以便直接使用Customer类:

public class CustomerTableModel extends AbstractTableModel {

    private final List<String> columnNames;
    private final List<Customer> customers;

    public CustomerTableModel() {
        String[] header = new …
Run Code Online (Sandbox Code Playgroud)

java swing jtable tablemodel abstracttablemodel

3
推荐指数
1
解决办法
456
查看次数