Java, Swing : Jtextfield의 최대 너비를 어떻게 설정합니까?
-
02-07-2019 - |
문제
사용자 정의 파일 선택 구성 요소를 작성하고 있습니다. 내 UI에서 먼저 사용자가 버튼을 클릭합니다. JFileChooser
; 닫히면 선택한 파일의 절대 경로는 JTextField
.
문제는 절대 경로가 일반적으로 길어 텍스트 필드가 확대되어 용기를 너무 넓게 만듭니다.
나는 이것을 시도했지만 아무것도하지 않았다. 텍스트 필드는 여전히 너무 넓다.
fileNameTextField.setMaximumSize(new java.awt.Dimension(450, 2147483647));
현재 비어있을 때는 이미 400px 길이입니다. GridBagConstraints
그것에 첨부.
HTML 페이지의 텍스트 필드와 같으며, 크기가 고정되어 있고 입력이 너무 길어지면 확대되지 않습니다.
그래서 최대 크기를 어떻게 설정합니까? JTextField
?
해결책
텍스트 필드가있는 레이아웃 관리자에 따라 다를 수 있습니다. 일부 레이아웃 관리자는 확장되고 일부는 그렇지 않습니다. 어떤 경우에는 어떤 경우에는 항상 확장되고 다른 일부는 항상 확장됩니다.
나는 당신이하고 있다고 가정합니다
filedNameTextField = new JTextField(80); // 80 == columns
그렇다면 대부분의 합리적인 레이아웃의 경우 필드가 크기를 변경하지 않아야합니다 (적어도 성장해서는 안됩니다). 종종 레이아웃 관리자는 들어갈 때 심하게 행동합니다 JScrollPane
에스.
내 경험상, setMaximumSize
그리고 setPreferredWidth
그리고 기껏해야 불안정합니다. 스윙은 레이아웃 관리자와 함께 자체적으로 결정했으며 그것에 대해 할 수있는 일은 거의 없습니다.
말하면, 나는 당신이 겪고있는 문제가 없었기 때문에 레이아웃 관리자의 신중한 사용이 문제를 해결할 것이라고 믿게됩니다.
다른 팁
텍스트 필드의 컨테이너에서 최대 너비를 설정하여이를 해결했습니다. setMaximumSize
.
Davetron의 답변에 따르면, 레이아웃 관리자가 해당 속성을 무시할 수 있기 때문에 이것은 깨지기 쉬운 솔루션입니다. 필자의 경우 컨테이너는 가장 큰 제품이며 첫 번째 테스트에서는 효과가있었습니다.
텍스트 필드에 크기를 설정하지 마십시오. 대신 SetColumns를 통해 또는 열 인수와 함께 생성자를 사용하여 열 크기를 0이 아닌 값으로 설정하십시오.
일어나고있는 것은 열이 0 일 때 jtextcomponent가보고 한 선호 크기가 텍스트를 렌더링하는 데 필요한 전체 공간이라는 것입니다. 열이 0이 아닌 값으로 설정되면 선호하는 크기는 많은 표준 열 너비를 보여주는 데 필요한 크기입니다. (가변 피치 글꼴의 경우 일반적으로 소문자 'M'의 크기에 가깝습니다). 열이 0으로 설정되면 텍스트 필드는 전체 컨테이너를 얻고 늘릴 수있는 한 많은 공간을 요청합니다.
이미 채우기가있는 그리드 백 층에 이미 가지고 있기 때문에 열을 1로 설정하고 다른 구성 요소 또는 다른 적절한 낮은 숫자를 기반으로 채우기를 늘릴 수 있습니다.