2016-08-05 3 views
0

Я использую cardlayout для отображения списка панелей. В одной из панелей у меня есть JTable с несколькими столбцами и строками записей. Теперь я хотел бы, чтобы удалить первый столбец JTable, в зависимости от того, какого пользователя в Ниже мой код (в логине JFrame):.Как удалить столбец jTable из другого класса, в java

//calling the jframe that holds the cardlayout 

Home home= new Home(); 

//calling the panel that holds the jtable 

viewRecords b =new viewRecords(); 

//when a user logs in 

//removing the 1st column of the jtable in panel viewRecords 

b.jTable1.removeColumn(b.jTable1.getColumnModel().getColumn(0)); 

//displaying jFrame Home 

Home.setVisible(true); 

Проблема в том, что хорошо работает, когда используя JFrame для отображения таблицы, но не работает при использовании JPanel для отображения той же таблицы. Любая идея о том, как сделать эту работу?

+0

Является ли 'JTable' даже не видимым на' JPanel'? Просьба представить дополнительную информацию о вашей проблеме. Возможно, это тоже может вам помочь. [Как отобразить JTable в JPanel с Java?] (Http://stackoverflow.com/a/2623987/5702956) –

+0

Название в сочетании с первыми предложениями вашего вопроса подсказывает мне, что код 'extends JPanel'. Правильно ли эта оценка? Я спрашиваю, потому что расширение панели действительно необходимо только при переопределении метода paintComponent (Graphics), и это не похоже на эту ситуацию. Также, что модель (например, модель таблицы) слишком привязана к виду (панелям), где это плохой дизайн, и его следует сначала зафиксировать. –

ответ

0

этот код скрыть Fisrt столбца в JTable

jTable1.getColumnModel().getColumn(0).setMinWidth(0); 
jTable1.getColumnModel().getColumn(0).setPreferredWidth(0); 
jTable1.getColumnModel().getColumn(0).setMaxWidth(0); 
+1

Не играйте с шириной TableColumn. Столбец все еще является частью представления. Поскольку пользователь использует клавишу Tab для перехода от столбца к столбцу, «скрытый» столбец по-прежнему будет получать фокус, который смущает пользователя. – camickr

2

Вы можете удалить столбец с точки зрения таблицы:

public void hideColumn(int modelColumn) 
{ 
    int viewColumn = table.convertColumnIndexToView(modelColumn); 

    if (viewColumn != -1) 
    { 
     TableColumnModel tcm = table.getColumnModel(); 
     TableColumn column = tcm.getColumn(viewColumn); 
     tcm.removeColumn(column); 
    } 
} 

Для фантазии реализации этой логики проверить Table Column Manager, который позволяет пользователю скрывать/показывать столбцы.

+0

это, похоже, тоже не работает .... JTable находится на панели в cardlayout – Kenn

+0

@Kenn, Тогда вы делаете что-то неправильно. Менеджер компоновки не имеет значения. Неважно, добавляете ли вы таблицу непосредственно к фрейму или панели, а затем добавляете панель в фрейм. Вероятно, проблема заключается в том, что «b.table1» не ссылается на таблицу, отображаемую на панели. Вам необходимо перестроить код, чтобы вы не обращались к таким переменным. Я думаю, самое простое решение - добавить метод removeFirstColumn() к вам классу, содержащему эту таблицу. Затем вы просто вызываете метод. – camickr