简体   繁体   中英

Custom TableModel and render for JTable wont display anything

I have a list of activities where i want the content to be shown. "name, isdone, sdate, endate, description" i have been reading, but nothing of why my table wont even draw

https://docs.oracle.com/javase/8/docs/api/javax/swing/table/TableCellRenderer.html http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#data

the variable "test" is only for trying to draw a table with the default model, and it works like a charm "activities" do not

public class ActivityToDoScreen implements IScreen {
    private int width=1200;
    private int height=800;
    private JPanel activityToDo;
    private IUser loggedinUser;

    @Override
    public void initializePanel(ProjectControlAppGui gui, Container pane) {
        loggedinUser = gui.loggedInUser();
        activityToDo = new JPanel();
        activityToDo.setBackground(Color.GRAY);
        activityToDo.setPreferredSize(new Dimension(width, height));
        Object[][] bah = {{new String("hej"), new Integer(5)},{new String("ss"),new Integer(7)}};
        String[]  buh ={"hej","med dig"};
        JTable test = new JTable(bah,buh);
        test.setDefaultRenderer(Object.class, new ActivityTableRender());
        activityToDo.add(test,BorderLayout.NORTH);
        ActivityTableModel model = new ActivityTableModel();
        try {
            model.Initialize(loggedinUser.getActivities());
        } catch (NotAllowedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        JTable activities = new JTable(model);
        activities.setSize(400, 400);
        activities.setDefaultRenderer(Object.class, new ActivityTableRender());

        JScrollPane scroll = new JScrollPane();
        scroll.add(activities);
        activityToDo.add(scroll,BorderLayout.CENTER);


        // TODO Auto-generated method stub

    }
    @Override
    public JPanel getContentPane() {
        // TODO Auto-generated method stub
        return activityToDo;
    }

}

public class ActivityTableModel extends AbstractTableModel implements ITableModel<IActivity>, TableModelListener {
     private List<IActivity> projectData;
     private final String[] columnNames = {"Name","Done","Start date", "End date","Description"};
     private final Class[] columnClasses = {Object.class, Boolean.class, Object.class, Object.class,Object.class};



       public boolean isCellEditable(int row, int column) {
          return false;
       }


    @Override
    public void tableChanged(TableModelEvent e) {
        int row = e.getFirstRow();
        int column = e.getColumn();
        TableModel model = (TableModel)e.getSource();
        setValueAt(model.getValueAt(row, column),row,column);
    }
       @Override
        public Object getValueAt(int row, int col) {
            IActivity activity= projectData.get(row);
            Object value = new Object();
            switch(col){
            case 0:
                value = activity.getName();
                break;
            case 1:
                value = activity.isDone();
                break;
            case 2:
                value = activity.getStartDate();
                break;
            case 3:
                value = activity.getEndDate();
                break;
            case 4:
                value = activity.getDescription();
                break;
            default:
                break;



            }
        return value;
        }
       @Override
        public void setValueAt(Object value,int row, int col){
            IActivity activity = projectData.get(row);
            switch(col){
            case 0:
                activity.setName((String)value);
                break;
            case 1:
                activity.setIsDone((boolean)value);
                break;
            case 2:
                activity.setStartDate((DateTime)value);
                break;
            case 3:
                activity.setEndDate((DateTime)value);
                break;
            case 4:
                activity.setDescription((String)value);
                break;
            default:
                break;
            }

            fireTableCellUpdated(row, col);
        }
    @Override
       public Class getColumnClass(int c) {
            return columnClasses[c];
        }

    @Override
    public int getColumnCount() {
    return columnNames.length;
    }   
    @Override
    public int getRowCount() {
        if(projectData== null) return 0;
    return projectData.size();
    }
    public final String[] getColumnNames(){
        return columnNames;
    }

    @Override
    public void Initialize(List<IActivity> list) {

        projectData=new ArrayList<IActivity>();
        for(IActivity activity: list){
            projectData.add(activity);
            fireTableRowsInserted(projectData.size()-1, projectData.size()-1);
        }
    }


}

When you want to display a component within the view of a JScrollPane, it should be done through the viewport. This can be done by passing the component to the JScrollPane constructor, or calling setViewportView :

JScrollPane scroll = new JScrollPane(activities);
//or
scroll.setViewportView(activities);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM