JLabel в JTable - Java

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

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

Мне нужно сделать вывод JLabel в ячейках JTable, но не смотря на рендерер и другое, всё равно выводится только название класса: javax.swing.JLabel. Вот код, буду благодарен за помощь.
Листинг программы
  1. package schedule;
  2. import javax.swing.*;
  3. import javax.swing.table.*;
  4. import java.awt.*;
  5. import java.text.DecimalFormat;
  6. import java.text.DecimalFormatSymbols;
  7.  
  8. class tablepanel extends JPanel{
  9. private table[][][] ttable;
  10. JTable Table;
  11. int i;
  12. class Renderer extends DefaultTableCellRenderer{
  13. @Override
  14. public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
  15. return (JLabel)value;
  16. }
  17. }
  18. class Model extends DefaultTableModel{
  19. @Override
  20. public Class getColumnClass(int columnIndex) {
  21. if(columnIndex == 0)
  22. return getValueAt(0, columnIndex).getClass();
  23. else return super.getColumnClass(columnIndex);
  24. }
  25. }
  26.  
  27. public tablepanel(table[][][] t,int stgrp,inputdata input)
  28. {
  29. DecimalFormatSymbols s = new DecimalFormatSymbols();
  30. s.setDecimalSeparator('.');
  31. DecimalFormat f = new DecimalFormat("#,##0.00", s);
  32. double[] time={8.20,10.00,12.05,13.50,15.35,17.30,18.00};
  33. String[] day={"Mon","Tue","Wed","Thurs","Fri"};
  34. ttable=t;
  35. int stno;
  36. Table = new JTable();
  37. Model model = new Model();
  38. Table.setModel(model);
  39. Table.setDefaultRenderer(JLabel.class, new Renderer());
  40. Table.setPreferredScrollableViewportSize(new Dimension(600, 600));
  41. Table.setRowHeight(30);
  42. Table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
  43. //JLabel label=new JLabel(input.stgrp[stno].code);
  44. //add(label,BorderLayout.NORTH);
  45. model.addColumn(" ");
  46. for(i=1;i<=5;i++)
  47. {
  48. model.addColumn(day[i-1]);
  49. }
  50. //JScrollBar s=new JScrollBar(HORIZONTAL);
  51. for(i=0;i<6;i++)
  52. {
  53. TableColumn column=Table.getColumnModel().getColumn(i);
  54. column.setMinWidth(100);
  55. column.setPreferredWidth(100);
  56. }
  57. for(stno=0;stno<stgrp;stno++)
  58. {
  59. for(i=1;i<=7;i++)
  60. {
  61. double x=time[i-1]+1.5;
  62. model.addRow(new Object[]{new JLabel(f.format(time[i-1])+"-"+f.format(x)),
  63. new JLabel(ttable[stno][i-1][0].course+" "+ttable[stno][i-1][0].ins+" "+ttable[stno][i-1][0].room),
  64. new JLabel(ttable[stno][i-1][1].course+" "+ttable[stno][i-1][1].ins+" "+ttable[stno][i-1][1].room),
  65. new JLabel(ttable[stno][i-1][2].course+" "+ttable[stno][i-1][2].ins+" "+ttable[stno][i-1][2].room),
  66. new JLabel(ttable[stno][i-1][3].course+" "+ttable[stno][i-1][3].ins+" "+ttable[stno][i-1][3].room),
  67. new JLabel(ttable[stno][i-1][4].course+" "+ttable[stno][i-1][4].ins+" "+ttable[stno][i-1][4].room)});
  68.  
  69. }
  70. }
  71.  
  72. JScrollPane scroll = new JScrollPane(Table);
  73. scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
  74. scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
  75. //scroll.getViewport().setExtentSize(new Dimension(100,100));
  76. //scroll.setHorizontalScrollBar(s);
  77. add(scroll,BorderLayout.CENTER);
  78. }
  79. }

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

textual
Листинг программы
  1. package schedule;
  2.  
  3. import javax.swing.*;
  4. import javax.swing.table.*;
  5. import java.awt.*;
  6. import java.text.DecimalFormat;
  7. import java.text.DecimalFormatSymbols;
  8.  
  9. class tablepanel extends JPanel{
  10.     private table[][][] ttable;
  11.         private JTable Table;
  12.         private inputdata input;
  13.         private int stgrp;
  14.        
  15.         class Renderer extends DefaultTableCellRenderer{
  16.  
  17.             @Override
  18.             public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
  19.                 if(value instanceof JLabel){
  20.                     //This time return only the JLabel without icon
  21.                     return (JLabel)value;
  22.                 }else{
  23.                     return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
  24.                 }
  25.             }
  26.         }
  27.        
  28.         class Model extends DefaultTableModel{
  29.             @Override
  30.             public Class getColumnClass(int columnIndex) {
  31.                 /*
  32.                 if(columnIndex == 0)
  33.                     return getValueAt(0, columnIndex).getClass();
  34.  
  35.                 else return super.getColumnClass(columnIndex);*/
  36.                 return JLabel.class;
  37.  
  38.             }
  39.         }
  40.        
  41.    
  42.        
  43.     public tablepanel(table[][][] t,int stgrp,inputdata input)
  44.     {
  45.             this.ttable=t;
  46.             this.input = input;
  47.             this.stgrp = stgrp;
  48.            
  49.             DecimalFormatSymbols s = new DecimalFormatSymbols();
  50.             s.setDecimalSeparator('.');
  51.             DecimalFormat f = new DecimalFormat("#,##0.00", s);
  52.            
  53.             double[] time1={8.20,10.00,12.05,13.50,15.35,17.20,19.05};
  54.             double[] time2={9.50,11.35,13.40,15.25,17.10,18.55,20.40};
  55.             String[] day={"Mon","Tue","Wed","Thurs","Fri"};
  56.            
  57.             int stno;
  58.             int i;
  59.             Table = new JTable();
  60.             Model model = new Model();
  61.            
  62.             Table.setModel(model);
  63.             Table.setDefaultRenderer(JLabel.class, new Renderer());
  64.            
  65.             Table.setPreferredScrollableViewportSize(new Dimension(600, 600));
  66.             Table.setRowHeight(60);
  67.             Table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
  68.             model.addColumn("    ");
  69.            
  70.             for(i=1;i<=5;i++)
  71.             {
  72.                     model.addColumn(day[i-1]);
  73.             }
  74.             for(i=0;i<6;i++)
  75.             {
  76.                     TableColumn column=Table.getColumnModel().getColumn(i);
  77.                     column.setMinWidth(100);
  78.                     column.setPreferredWidth(100);
  79.             }
  80.             for(stno=0;stno<stgrp;stno++)
  81.             {
  82.                     model.addRow(new Object[]{new JLabel(input.stgrp[stno].code, SwingConstants.CENTER),"","","","",""});
  83.                     for(i = 0;i <= 6;i++)
  84.                     {
  85.                         JLabel[] labels = new JLabel[6];
  86.                         labels[0] = new JLabel(f.format(time1[i])+"-"+f.format(time2[i]), SwingConstants.CENTER);
  87.                         for (int j = 0; j <= 4; j++){
  88.                             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);
  89.                         }
  90.                        
  91.                         /*
  92.                         model.addRow(new Object[]{new JLabel(f.format(time[i-1])+"-"+f.format(x)),
  93.                                                   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),
  94.                                                   new JLabel(ttable[stno][i-1][1].course+" "+ttable[stno][i-1][1].ins+" "+ttable[stno][i-1][1].room, SwingConstants.CENTER),
  95.                                                   new JLabel(ttable[stno][i-1][2].course+" "+ttable[stno][i-1][2].ins+" "+ttable[stno][i-1][2].room, SwingConstants.CENTER),
  96.                                                   new JLabel(ttable[stno][i-1][3].course+" "+ttable[stno][i-1][3].ins+" "+ttable[stno][i-1][3].room, SwingConstants.CENTER),
  97.                                                   new JLabel(ttable[stno][i-1][4].course+" "+ttable[stno][i-1][4].ins+" "+ttable[stno][i-1][4].room, SwingConstants.CENTER)});*/
  98.                         model.addRow(labels);
  99.                     }
  100.                     model.addRow(new Object[]{"","","","","",""});
  101.                     model.addRow(new Object[]{"","","","","",""});
  102.        
  103.             }
  104.            
  105.        
  106.             JScrollPane scroll = new JScrollPane(Table);
  107.             scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
  108.             scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
  109.             add(scroll,BorderLayout.CENTER);
  110.            
  111.         }
  112.        
  113.         public void createAndShowGUI(){
  114.            
  115.             JFrame tableframe = new JFrame();
  116.             tablepanel panel = new tablepanel(ttable,stgrp,input);
  117.            
  118.             EventQueue.invokeLater(new Runnable()
  119.             {
  120.                 @Override
  121.                 public void run()
  122.                 {
  123.                         tableframe.setTitle("CLASS SCHEDULING");
  124.                         tableframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  125.  
  126.                         panel.setOpaque(true);
  127.                         tableframe.setContentPane(panel);
  128.                         tableframe.pack();
  129.                         tableframe.setVisible(true);
  130.  
  131.                 }
  132.             });
  133.         }
  134. }

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут