powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Заголовки в JTable
4 сообщений из 4, страница 1 из 1
Заголовки в JTable
    #34085574
Ku4in
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как в таблице сделать заголовки или шапку - это отдельный рядок с названием колонок. Аналогично отдельный столбик с названием рядков. чтоб типа было как в Exel.
...
Рейтинг: 0 / 0
Заголовки в JTable
    #34085668
Фотография Ruslan.Isbarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ku4inкак в таблице сделать заголовки или шапку - это отдельный рядок с названием колонок. Аналогично отдельный столбик с названием рядков. чтоб типа было как в Exel.

первое, что приходит на ум - создать рендерер (DefaultTableCellRenderer) для столбца.
...
Рейтинг: 0 / 0
Заголовки в JTable
    #34085670
Фотография Ruslan.Isbarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот, накидал за несколько минут.

По поводу качества прошу не судить, писалось как говорится "в полевых условиях, на коленке". Но идея, думаю, будет понятна.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
 import  javax.swing.*;
 import  javax.swing.table.DefaultTableCellRenderer;
 import  javax.swing.table.AbstractTableModel;

 import  java.awt.*;
 import  java.awt.event.MouseListener;
 import  java.awt.event.MouseEvent;
 import  java.awt.event.InputEvent;


/**
 * @author Ruslan F. Isbarov
 * @version 1.0 27.10.2006
 */


 public   class  MainFrame  extends  JFrame {

     public  MainFrame()  throws  HeadlessException {
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        JTable sampleTable =  new  JTable( new  SampleTableModel());
        sampleTable.getColumnModel().getColumn( 0 ).setCellRenderer( new  SampleTableCellRenderer());
        sampleTable.getTableHeader().setReorderingAllowed(false);
        sampleTable.setColumnSelectionAllowed(true);
        sampleTable.getTableHeader().addMouseListener( new  SampleTableHeaderMouseListener(sampleTable));

        JScrollPane scrollPane =  new  JScrollPane();
        scrollPane.setViewportView(sampleTable);
        scrollPane.getViewport().setBackground(Color.WHITE);

        setLayout( new  BorderLayout());
        getContentPane().add(scrollPane, BorderLayout.CENTER);

        Rectangle screenRect = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds();
         int  screenWidth  = screenRect.width;
         int  screenHeight = screenRect.height;
         int  mainWndW = (screenWidth  /  8 ) *  6 ;
         int  mainWndH = (screenHeight /  8 ) *  6 ;
         int  mainWndX = screenWidth /  2  - mainWndW /  2 ;
         int  mainWndY = screenHeight /  2  - mainWndH /  2 ;

        setLocation(mainWndX, mainWndY);
        setSize( new  Dimension(mainWndW, mainWndH));

        setVisible(true);
    }

     public   static   void  main(String[] args) {
         new  MainFrame();
    }


     class  SampleTableModel  extends  AbstractTableModel {

         private  String[] columnNames =  new  String[] {
                "", "A", "B", "C", "D", "E", "F"
        };

         private  String[][] data =  new  String[][] {
                { "A", "1.1", "1.2", "1.3", "1.4", "1.5", "1.7" },
                { "B", "2.1", "2.2", "2.3", "2.4", "2.5", "2.7" },
                { "C", "3.1", "3.2", "3.3", "3.4", "3.5", "3.7" },
                { "D", "4.1", "4.2", "4.3", "4.4", "4.5", "4.7" },
                { "E", "5.1", "5.2", "5.3", "5.4", "5.5", "5.7" },
                { "F", "6.1", "6.2", "6.3", "6.4", "6.5", "6.7" },
        };

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

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

         public  String getColumnName( int  column) {
             if  (column ==  0 ) {
                 return  "";
            }  else  {
                 return  columnNames[column];
            }
        }

         public  Object getValueAt( int  rowIndex,  int  columnIndex) {
             return  data[rowIndex][columnIndex];
        }

         public   boolean  isCellEditable( int  rowIndex,  int  columnIndex) {
             return  columnIndex !=  0 ;
        }
    }


     class  SampleTableCellRenderer  extends  DefaultTableCellRenderer {

         public  Component getTableCellRendererComponent(JTable table,
                                                       Object value,
                                                        boolean  isSelected,
                                                        boolean  hasFocus,
                                                        int  row,
                                                        int  column) {

            JLabel label =  new  JLabel(value.toString());
            label.setHorizontalAlignment(JLabel.CENTER);
            label.setVerticalAlignment(JLabel.CENTER);

             if  (isSelected) {
                label.setOpaque(true);
                label.setBackground(table.getSelectionBackground());
                label.setForeground(table.getSelectionForeground());
            }

            JPanel panel =  new  JPanel();
            /* panel.setBorder(new BevelBorder(BevelBorder.RAISED)); */
            panel.setLayout( new  BorderLayout());
            panel.add(label);

             return  panel;
        }

    }


     class  SampleTableHeaderMouseListener  implements  MouseListener {

         private  JTable table;


         public  SampleTableHeaderMouseListener(JTable table) {
             this .table = table;
        }

         public   void  mouseClicked(MouseEvent e) {
             if  (table.getRowCount() ==  0  || table.getColumnCount() ==  0 ) {
                 return ;
            }

             int  columnIndex = table.getColumnModel().getColumnIndexAtX(e.getX());
             if  (columnIndex ==  0 ) {
                table.setRowSelectionInterval( 0 , table.getRowCount() -  1 );
                table.setColumnSelectionInterval( 1 , table.getColumnCount() -  1 );

                 return ;
            }

             if  (e.getModifiersEx() == InputEvent.CTRL_DOWN_MASK) {
                table.addRowSelectionInterval( 0 , table.getRowCount() -  1 );
                table.addColumnSelectionInterval(columnIndex, columnIndex);
            }  else  {
                table.setRowSelectionInterval( 0 , table.getRowCount() -  1 );
                table.setColumnSelectionInterval(columnIndex, columnIndex);
            }
        }

         public   void  mouseEntered(MouseEvent e) {
        }

         public   void  mouseExited(MouseEvent e) {
        }

         public   void  mousePressed(MouseEvent e) {
        }

         public   void  mouseReleased(MouseEvent e) {
        }
    }


}
...
Рейтинг: 0 / 0
Заголовки в JTable
    #34085688
Фотография Ruslan.Isbarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S.: Но это всего лишь "визуальное" решение. В дополнение можно создать набор API, позволяющий в более удобной форме манипулировать данными, например при вводе данных, 0-м столбцом считать первый столбец и т.п. Немного фантазии и можно будет довести до ума :)
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Заголовки в JTable
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]