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

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

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


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


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