Pergunta

Eu estou escrevendo um componente de seleção de arquivo de costume. Na minha UI, primeiro o usuário clica em um botão, que aparece um JFileChooser; quando ele é fechado, o caminho absoluto do arquivo selecionado é gravado em um JTextField.

O problema é, caminhos absolutos são geralmente muito tempo, o que faz com que o campo de texto para ampliar, fazendo seu recipiente muito grande.

Eu tentei isso, mas ele não fez nada, o campo de texto ainda é muito ampla:

fileNameTextField.setMaximumSize(new java.awt.Dimension(450, 2147483647));

Atualmente, quando está vazio, já é 400px de comprimento, por causa da GridBagConstraints ligado a ele.

Eu gostaria que fosse como campos de texto em páginas HTML, que têm um tamanho fixo e não ampliar quando a entrada é muito longo.

Então, como faço para definir o tamanho máximo para uma JTextField?

Foi útil?

Solução

Pode depender do gerenciador de layout seu campo de texto está em. Alguns gerenciadores de layout expandir e outros não. Alguns expandir apenas em alguns casos, outros sempre.

Eu estou supondo que você está fazendo

filedNameTextField = new JTextField(80); // 80 == columns

Se assim for, para a maioria dos layouts razoáveis, o campo não deve alterar o tamanho (pelo menos, não deve crescer). gerentes muitas vezes de layout se comportar mal quando colocado em JScrollPanes.

Na minha experiência, tentando controlar os tamanhos através setMaximumSize e setPreferredWidth e assim por diante são precárias na melhor das hipóteses. Balanço decidiu por conta própria com o gerente de layout e há pouco que você pode fazer sobre ele.

Tudo o que está sendo dito, eu não tive o problema que está ocorrendo, o que me leva a crer que algum uso criterioso de um gerenciador de layout vai resolver o problema.

Outras dicas

Eu resolvi isso definindo a largura máxima no recipiente do campo de texto, usando setMaximumSize.

De acordo com a resposta de davetron, esta é uma solução frágil, porque o gerenciador de layout pode desconsiderar essa propriedade. No meu caso, o recipiente é o mais alto e, em um primeiro teste funcionou.

não definir qualquer um dos tamanhos no campo de texto. Em vez disso definir o tamanho da coluna para um valor diferente de zero via SetColumns ou usando o construtor com o argumento de coluna.

O que está acontecendo é que o tamanho preferido relatado pelo JTextComponent quando colunas é zero é toda a quantidade de espaço necessário para tornar o texto. Quando as colunas é definido como um valor diferente de zero o tamanho preferido é o tamanho necessário para mostrar que muitas larguras das colunas padrão. (Para uma fonte de passo variável que é normalmente próximo do tamanho da caixa inferior 'm'). Com colunas definido para zero o campo de texto está solicitando tanto espaço quanto ele pode chegar e esticando todo o recipiente.

Uma vez que você já tem em um GridBagLayout com um preenchimento, você poderia provavelmente apenas definir as colunas a 1 e deixou o trecho preenchê-lo com base nos outros componentes, ou algum outro número adequadamente baixa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top