JLabel в JTable - Java

Узнай цену своей работы

Формулировка задачи:

Мне нужно сделать вывод JLabel в ячейках JTable, но не смотря на рендерер и другое, всё равно выводится только название класса: javax.swing.JLabel. Вот код, буду благодарен за помощь.
package schedule;
 
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;

class tablepanel extends JPanel{
    private table[][][] ttable;
        JTable Table;
    int i;
        
        class Renderer extends DefaultTableCellRenderer{
 
            @Override
            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {     
                return (JLabel)value;
            }
        }
        
        class Model extends DefaultTableModel{
            @Override
            public Class getColumnClass(int columnIndex) {
                if(columnIndex == 0)
                    return getValueAt(0, columnIndex).getClass();
 
                else return super.getColumnClass(columnIndex);
 
            }
        }

    public tablepanel(table[][][] t,int stgrp,inputdata input)
    {
            DecimalFormatSymbols s = new DecimalFormatSymbols();
            s.setDecimalSeparator('.');
            DecimalFormat f = new DecimalFormat("#,##0.00", s);
            
            double[] time={8.20,10.00,12.05,13.50,15.35,17.30,18.00}; 
            String[] day={"Mon","Tue","Wed","Thurs","Fri"};
            ttable=t;
            int stno;
            Table = new JTable();
            Model model = new Model();
            
            Table.setModel(model);
            Table.setDefaultRenderer(JLabel.class, new Renderer());
            
            Table.setPreferredScrollableViewportSize(new Dimension(600, 600));
            Table.setRowHeight(30);
            Table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
            //JLabel label=new JLabel(input.stgrp[stno].code);
            //add(label,BorderLayout.NORTH);
            model.addColumn("    ");
            
            for(i=1;i<=5;i++)
            {
                    model.addColumn(day[i-1]);
            }
            //JScrollBar s=new JScrollBar(HORIZONTAL);
            for(i=0;i<6;i++)
            {
                    TableColumn column=Table.getColumnModel().getColumn(i);
                    column.setMinWidth(100);
                    column.setPreferredWidth(100);
            }
            for(stno=0;stno<stgrp;stno++)
            {
                    for(i=1;i<=7;i++)
                    {
                            double x=time[i-1]+1.5;
                            model.addRow(new Object[]{new JLabel(f.format(time[i-1])+"-"+f.format(x)),
                                                      new JLabel(ttable[stno][i-1][0].course+" "+ttable[stno][i-1][0].ins+" "+ttable[stno][i-1][0].room),
                                                      new JLabel(ttable[stno][i-1][1].course+" "+ttable[stno][i-1][1].ins+" "+ttable[stno][i-1][1].room),
                                                      new JLabel(ttable[stno][i-1][2].course+" "+ttable[stno][i-1][2].ins+" "+ttable[stno][i-1][2].room),
                                                      new JLabel(ttable[stno][i-1][3].course+" "+ttable[stno][i-1][3].ins+" "+ttable[stno][i-1][3].room),
                                                      new JLabel(ttable[stno][i-1][4].course+" "+ttable[stno][i-1][4].ins+" "+ttable[stno][i-1][4].room)});

                    }
        }

            JScrollPane scroll = new JScrollPane(Table);
            scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
            scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
            //scroll.getViewport().setExtentSize(new Dimension(100,100));
            //scroll.setHorizontalScrollBar(s);
            add(scroll,BorderLayout.CENTER);
    }
}

Решение задачи: «JLabel в JTable»

textual
Листинг программы
package schedule;
 
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
 
class tablepanel extends JPanel{
    private table[][][] ttable;
        private JTable Table;
        private inputdata input;
        private int stgrp;
        
        class Renderer extends DefaultTableCellRenderer{
 
            @Override
            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
                if(value instanceof JLabel){
                    //This time return only the JLabel without icon
                    return (JLabel)value;
                }else{
                    return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
                }
            }
        }
        
        class Model extends DefaultTableModel{
            @Override
            public Class getColumnClass(int columnIndex) {
                /*
                if(columnIndex == 0)
                    return getValueAt(0, columnIndex).getClass();
 
                else return super.getColumnClass(columnIndex);*/
                return JLabel.class;
 
            }
        }
        
    
        
    public tablepanel(table[][][] t,int stgrp,inputdata input)
    {
            this.ttable=t;
            this.input = input;
            this.stgrp = stgrp;
            
            DecimalFormatSymbols s = new DecimalFormatSymbols();
            s.setDecimalSeparator('.');
            DecimalFormat f = new DecimalFormat("#,##0.00", s);
            
            double[] time1={8.20,10.00,12.05,13.50,15.35,17.20,19.05};
            double[] time2={9.50,11.35,13.40,15.25,17.10,18.55,20.40}; 
            String[] day={"Mon","Tue","Wed","Thurs","Fri"};
            
            int stno;
            int i;
            Table = new JTable();
            Model model = new Model();
            
            Table.setModel(model);
            Table.setDefaultRenderer(JLabel.class, new Renderer());
            
            Table.setPreferredScrollableViewportSize(new Dimension(600, 600));
            Table.setRowHeight(60);
            Table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
            model.addColumn("    ");
            
            for(i=1;i<=5;i++)
            {
                    model.addColumn(day[i-1]);
            }
            for(i=0;i<6;i++)
            {
                    TableColumn column=Table.getColumnModel().getColumn(i);
                    column.setMinWidth(100);
                    column.setPreferredWidth(100);
            }
            for(stno=0;stno<stgrp;stno++)
            {
                    model.addRow(new Object[]{new JLabel(input.stgrp[stno].code, SwingConstants.CENTER),"","","","",""});
                    for(i = 0;i <= 6;i++)
                    {
                        JLabel[] labels = new JLabel[6];
                        labels[0] = new JLabel(f.format(time1[i])+"-"+f.format(time2[i]), SwingConstants.CENTER);
                        for (int j = 0; j <= 4; j++){
                            labels[j+1] = new JLabel("<html>"+ttable[stno][i][j].course+"<br>"+ttable[stno][i][j].ins+"<br>"+ttable[stno][i][j].room+"</html>", SwingConstants.CENTER);
                        }
                        
                        /*
                        model.addRow(new Object[]{new JLabel(f.format(time[i-1])+"-"+f.format(x)),
                                                  new JLabel("<html>"+ttable[stno][i-1][0].course+"<br>"+ttable[stno][i-1][0].ins+" "+ttable[stno][i-1][0].room+"</html>",  SwingConstants.CENTER),
                                                  new JLabel(ttable[stno][i-1][1].course+" "+ttable[stno][i-1][1].ins+" "+ttable[stno][i-1][1].room, SwingConstants.CENTER),
                                                  new JLabel(ttable[stno][i-1][2].course+" "+ttable[stno][i-1][2].ins+" "+ttable[stno][i-1][2].room, SwingConstants.CENTER),
                                                  new JLabel(ttable[stno][i-1][3].course+" "+ttable[stno][i-1][3].ins+" "+ttable[stno][i-1][3].room, SwingConstants.CENTER),
                                                  new JLabel(ttable[stno][i-1][4].course+" "+ttable[stno][i-1][4].ins+" "+ttable[stno][i-1][4].room, SwingConstants.CENTER)});*/
                        model.addRow(labels);
                    }
                    model.addRow(new Object[]{"","","","","",""});
                    model.addRow(new Object[]{"","","","","",""});
        
            }
            
        
            JScrollPane scroll = new JScrollPane(Table);
            scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
            scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
            add(scroll,BorderLayout.CENTER);
            
        }
        
        public void createAndShowGUI(){
            
            JFrame tableframe = new JFrame();
            tablepanel panel = new tablepanel(ttable,stgrp,input);
            
            EventQueue.invokeLater(new Runnable()
            {
                @Override
                public void run()
                {
                        tableframe.setTitle("CLASS SCHEDULING");
                        tableframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
                        panel.setOpaque(true);
                        tableframe.setContentPane(panel);
                        tableframe.pack();
                        tableframe.setVisible(true);
 
                }
            }); 
        }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4 из 5