Pessoal,
busquei nos DOCs e não aparece opção para alinhar o header de uma TableColumn. Consegui fazê-lo
para o conteúdo da célula, mas não para o header. Alguem pode me ajudar? Grato.
Pessoal,
busquei nos DOCs e não aparece opção para alinhar o header de uma TableColumn. Consegui fazê-lo
para o conteúdo da célula, mas não para o header. Alguem pode me ajudar? Grato.
Tem que usar um renderizador customizado.
Exemplo do StackOverflow:
JTableHeader header = table.getTableHeader();
header.setDefaultRenderer(new HeaderRenderer(table));
Renderizador:
class HeaderRenderer implements TableCellRenderer {
DefaultTableCellRenderer renderer;
public HeaderRenderer(JTable table) {
renderer = (DefaultTableCellRenderer) table.getTableHeader().getDefaultRenderer();
// alinhando no centro
renderer.setHorizontalAlignment(JLabel.CENTER);
}
@Override
public Component getTableCellRendererComponent(JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int col) {
return renderer.getTableCellRendererComponent(table,
value,
isSelected,
hasFocus,
row,
col);
}
}
staroski, obrigado pela resposta. Pergunta: esta sua orientação se aplica tb
ao JavaFx? Pergunto isso pois a TableColumns a que me refiro é do universe
JavaFX. Grato.
Olá, que tipo de alinhamento você quer fazer? não ficou muito claro.
Andrauss, é o alinhamento do header (o título) da TableColumn. Ex: tenho 1
TableView com 3 colunas (TableColumn). A 1a Coluna com o titulo “Nome”, a 2a
com o título “Valor” e a 3a com o título “Data”. Eu gostaria de alinhar o “Nome” a
esquerda, “Valor” a direita e “Data” no Centro. (que é o default). Grato.
Dá pra fazer via CSS tanto para a célula, quanto para a coluna. Crie um arquivo .css e coloque isso nele:
.table-view .column-header.coluna-valor .label{ /* Coluna Valor*/
-fx-alignment: center-right;
}
.table-view .column-header.coluna-data .label{ /* Coluna Data*/
-fx-alignment: center;
}
.table-view .table-cell.coluna-valor { /* Célula da coluna Valor*/
-fx-alignment: center-right;
}
.table-view .table-cell.coluna-data { /* Célula da coluna Data */
-fx-alignment: center;
}
Depois adicione o arquivo aos estilos do seu painel, em seguida pegue a table column que desejar e adicione a classe. Exemplo:
colunaValor.getStyleClass().add("coluna-valor");
Ou no Scene Builder:
Dica.: Para saber o nome das classes CSS dos componentes do JavaFX e sua hierarquia, use o CSS Analyser do Scene Builder (View > Show CSS Analyser):
Veja a Documentação do CSS do JavaFx também.
Andrauss, obrigado. Criei um arq com sufixo css e inclui as instruções. Entretanto,
acho que falta a inclusão dele aos “estilos do painel”. Confesso que não entendi.
Entrei no DOCs do CSS e não vi referências a biblioteca de estilos ou q/q
coisa similar. Por favor, vc pode me orientar nessa etapa? Grato.
Me referi ao seu painel root, ou o painel em que a tableview está dentro, exemplo:
Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
root.getStylesheets().add("/caminho_para_o_arquivo/nome_arquivo.css");
No Scene Builder:
A estrutura que estou usando é VBox (com HBox, TableView e Botões) dentro
de uma Scene que por sua vez está dentro de um Stage. Não estou usando FXML.
Olá, não faz diferença vbox também possui o método getStylesheets.
Andrauss, desculpe-me pela demora na resposta. E, o pior, estou "travado"
neste ponto. As colunas continuam com o header centralizado e a seguinte msg
foi dada pelo Compilador:
WARNING: Resource “c:/java/programs/coluna-esquerda.css” not found.
Verifiquei e o arq coluna-esquerda.css está exatamente no caminho
c:/java/programs
Veja as linhas de código abaixo:
Definição do VBox
VBox vbox = new VBox(hBox, table|View, label);
vbox.setMinWidth(795);
vbox.setMinHeight(600);
vbox.setSpacing(5);
vbox.setPadding (new Insets (5));
vbox.setStyle("-fx-background-color:linear-gradient(to bottom, red, black);");
vbox.getStylesheets().add(“c:/java/programs/coluna-esquerda.css”);
Definição da Coluna:
colunaEsquerda.getStyleClass().add(“coluna-esquerda”);
Definição do .CSS:
.table-view .column-header.coluna-esquerda .label{
-fx-alignment: center-left;
}
Grato pela ajuda.
ajustando: é tableView e não table|View.
Como estão organizados os pacotes do seu projeto? Qual IDE? O caminho é esse que te falei, e o erro foi bem claro ao dizer que não encontrou o arquivo especificado. Faça o seguinte: coloque o arquivo .css no mesmo diretório da classe main ai você não precisa especificar todo o caminho do arquivo, seria algo como:
vbox.getStylesheets().add("/nome_da_pasta/coluna-esquerda.css");
Andrauss, vc estava certo? Funcionou quando eu tirei todo o caminho
e coloquei só a ultima Pasta e o arquivo, que no meu caso
foi “/pack1/coluna-esquerda.css”, onde o pack1 é o pacote onde todas as .class
estão. Que estranho, não? Eu olhei e reolhei e o caminho completo estava
absolutamente correto. Pq sera q desta vez só podia ser usada a ultima pasta e
o arquivo? Bom, vc me ajudou novamente. Obrigado.
Tenho uma outra duvida sobre Mascaras para o TextField. Vou abrir outro topico
e dar este como resolvido. Grato.