Adicionar texto e ícone (com MouseListener) à coluna JTable
-
19-09-2019 - |
Pergunta
Eu quero implementar seguintes funcionalidades, mas estou confuso se é possível em Java. Se sim, de que forma? Por favor, ajuda:
Eu quero criar uma espécie JTable da mesa onde 1a linha da tabela contém os nomes das colunas e um ícone em cada coluna ou seja, em cada célula da primeira linha. Clicando nesse ícone deve levar à remoção dessa coluna da tabela (possível usando MouseListener ??).
Eu encontrei muitos solução onde eu posso adicionar botão para uma célula em JTable mas nenhum que descreve a adição de texto e ícone (com MouseListener) a uma célula. Por favor, veja se você pode ajudar e muito obrigado pela leitura.
Solução
Você pode criar um TableCellRenderer
personalizado que estende JLabel
. Este JLabel
pode ser criado com um ícone (JLabel
pode exibir ícones, à direita ou à esquerda do texto). Você vai querer o getTableCellRendererComponent
para teste wether a linha que está sendo processado é o primeiro ou não, e em caso afirmativo, definir o ícone, caso contrário, não.
Para a ação de remoção, você pode adicionar um MouseListener
sobre a mesa, e quando processando o método mouseClicked
, você pode encontrar a célula que foi clicado no testando a rowAtPoint
e columnAtPoint
criando um Point
do mouseEvent.getX()
e mouseEvent.getY()
. Se você determinar a primeira linha com o ícone foi clicado, você pode remover a coluna do modelo de coluna.
Se por 1a linha , você realmente quer dizer o cabeçalho da tabela, você pode criar o mesmo processador para o JTableHeader
, e definir o MouseListener
sobre esse componente.
Outras dicas
Bem, eu não entendi sua pergunta.
Eu quero criar uma espécie JTable de mesa onde 1ª linha da tabela contém nomes de coluna e um ícone
Você quer dizer o cabeçalho da tabela, gosto da maneira como triagem obras, exibindo o nome da coluna e a direção de classificação?
Se sim, então você usa um renderizador personalizado para o cabeçalho da tabela e adicionar um MouseListener para o cabeçalho para determinar qual coluna foi clicada. Você deve ser capaz de personalizar a padrão Table Header Renderer para fazer o que quiser.
Ou você quer dizer a primeira linha de dados na tabela. Se sim, então você ainda precisa usar um processador personalizado mas desta vez você adicionar o MouseListener para a tabela não o cabeçalho da tabela.
Em ambos os casos, você pode usar o método TableColumnModel.removeColumn () para remover a coluna da exibição da tabela.