Как отобразить столбец прогресса в таблице Java

Итак, я создаю проект, который имеет три столбца; один - столбец флажка, второй - строка (слова образуют базу данных neo4j), а третий - индикаторы выполнения.

Все столбцы отображаются и работают нормально, но столбец индикатора выполнения невидим, как кажется. Вот некоторый код:

    //CONSTRUCTOR
        public BiogramTableJSedit2Jan9()
        {   
            //*************************************************
            //* SETTING UP THE FORM                      *                                          
            //*************************************************
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setBounds(200,200,800,300);
            setTitle("Netword Data Table");
            getContentPane().setLayout(null);

            //*************************************************


        //********************************************
                //CREATING TABLE BLOCK                       *
                //********************************************

                //ADD SCROLLPANE
                JScrollPane scroll=new JScrollPane();
                scroll.setBounds(70,80,600,200);
                getContentPane().add(scroll);

                //THE TABLE
                final JTable table=new JTable();
                scroll.setViewportView(table);


                //THE MODEL OF THE TABLE
                DefaultTableModel model=new DefaultTableModel()  
                {
                    //****************************************
                    //* SETTING TABLE COLUMNS BLOCK          * 
                    //****************************************
                    public Class<?> getColumnClass(int column)  
                    {
                        switch(column)
                        {
                        case 0:                             // |This is the first column
                            return Boolean.class;           // |First column is set to Boolean as it will contain check boxes
                        case 1:                             // |This is the second column
                            return String.class;            // |Second column set to String as it will contain strings
                        case 2:
                            return JProgressBar.class;      // |This is for the progress bar column (IN PROGRESS - NOT DISPLAYED YET...) 

                        default:
                            return String.class;            // |The table is set to String as default 
                        }
                    }
                };


                //Create and run the query in the table         
                neoQuery= Q1();
                resultVariable = session.run(neoQuery.get());   



                //ASSIGN THE MODEL TO TABLE 
                table.setModel(model);

                model.addColumn("Select");                  // |Column for check boxes
                model.addColumn("Bigrams");                 // |Column for Bigrams

                table.getColumn("Status").setCellRenderer(new ProgressCellRender());

                //**********************************************
ProgressWorker worker = new ProgressWorker(model); //HAVE AN ERROR HERE
worker.execute();

Это класс визуализации прогресса:

//a table cell renderer that displays a JProgressBar
public class ProgressCellRender extends JProgressBar implements TableCellRenderer {

  @Override
  public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
      int progress = 0;
      if (value instanceof Float) {
          progress = Math.round(((Float) value) * 100f);
      } else if (value instanceof Integer) {
          progress = (int) value;
      }
      setValue(progress);
      return this;
  }
}

Теперь вы можете видеть, что я использую getColumn для отображения этого столбца, но когда я запускаю его, вы можете видеть первый и второй, но не столбец индикатора выполнения. Я хочу, чтобы это выглядело примерно так:

JTable с примером столбца индикатора выполнения

У меня также есть класс рабочего прогресса, который не полностью реализован.

private static class ProgressWorker extends SwingWorker<Void, Integer> 
    { //Swing worker class for updating the progress bar

        private BiogramTableJSedit2Jan9 model;

        private final JProgressBar progress; //declaration for progress bar

        public ProgressWorker(JProgressBar model)
        { 
            this.progress = model;

        }

        @Override
        protected Void doInBackground() throws Exception {

            return null;
        }

Буду признателен, если кто-нибудь сможет объяснить мне, почему не отображается столбец жажды. Спасибо за любые ответы заранее.

1 ответ

Решение

Поскольку ваш опубликованный код не был автономным, я настроил минимальный тест вместе с вашим уже опубликованным ProgressCellRender учебный класс.

Важное исправление в методе getColumnClass из DefaultTableModel, Нужно вернуть Integer.class или же Float.class потому что только те могут быть обработаны вашим ProgressCellRender,

И, конечно же, фактические данные в этом столбце должны быть Integer или же Float,

public class Main {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(Main::initGUI);
    }

    private static void initGUI() {
        JFrame frame = new JFrame("TableModel JProgressBar Demo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JScrollPane scroll = new JScrollPane();
        frame.getContentPane().add(scroll);

        final JTable table = new JTable();
        scroll.setViewportView(table);

        DefaultTableModel model = new DefaultTableModel() {
            public Class<?> getColumnClass(int column) {
                switch (column) {
                case 0:
                    return Boolean.class;
                case 1:
                    return String.class;
                case 2:
                    return Integer.class;  // !!!!
                default:
                    return String.class;
                }
            }
        };
        table.setModel(model);

        model.addColumn("Active");
        model.addColumn("Name");
        model.addColumn("Progress");

        table.getColumn("Progress").setCellRenderer(new ProgressCellRender());

        model.addRow(new Object[] { true, "aaaa", 14 });
        model.addRow(new Object[] { false, "bbbbbbbb", 0 });
        model.addRow(new Object[] { true, "ccccc", 2 });

        frame.pack();
        frame.setVisible(true);
    }
}

Тогда JProgressBars правильно отображаются в таблице:

введите описание изображения здесь

В вашем ProgessCellRender Вы можете добавить setStringPainted(true); чтобы получить процент также отображается в виде текста.

Другие вопросы по тегам