2008-09-24 3 views
8

사용자 지정 파일 선택 구성 요소를 쓰고 있습니다. 내 UI에서, 먼저 사용자는 JFileChooser 팝업 버튼을 클릭합니다. 파일이 닫히면 선택한 파일의 절대 경로가 JTextField에 기록됩니다.Java, Swing : JTextField의 최대 너비는 어떻게 설정합니까?

문제는 절대 경로가 일반적으로 길어서 텍스트 필드가 확대되어 컨테이너가 너무 넓어집니다.

내가 이것을 시도했다, 그러나 아무것도하지 않았다가, 텍스트 필드가 너무 넓은 여전히 ​​:이 비어있을 때

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

이,이 때문에 GridBagConstraints 첨부로, 이미 400 픽셀 긴 그것에.

HTML 페이지의 텍스트 필드와 같아지기를 바랍니다. 고정 된 크기이고 입력이 너무 길면 확대되지 않습니다.

그래서 JTextField의 최대 크기는 어떻게 설정합니까?

답변

12

텍스트 필드가있는 레이아웃 관리자에 따라 다를 수 있습니다. 일부 레이아웃 관리자는 확장되고 일부는 그렇지 않습니다. 일부는 경우에 따라 확장되고 다른 일부는 항상 확장됩니다.

내가 그렇다면 당신이 가장 합리적인 레이아웃에 필드가 (적어도, 그것은 성장 안) 크기를 변경해서는 안

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

을 다하고 있으리라 믿고있어. 종종 레이아웃 관리자는 JScrollPane에 넣을 때 잘못 작동합니다.

제 경험상, setMaximumSizesetPreferredWidth 등을 통해 크기를 제어하려고 시도하는 것은 기껏해야 불확실합니다. 스윙은 레이아웃 관리자와 독자적으로 결정 했으므로 그에 대해 할 수있는 방법은 거의 없습니다.

내가 말한 것은 모두 내가 경험 한 문제가 없었기 때문에 레이아웃 관리자를 사려 깊게 사용하면 문제가 해결 될 것이라고 생각합니다.

3

setMaximumSize을 사용하여 텍스트 필드의 컨테이너에서 최대 너비를 설정하여이 문제를 해결했습니다.

davetron의 대답에 따르면, 레이아웃 관리자가 해당 속성을 무시할 수 있기 때문에 이는 매우 위험한 해결책입니다. 제 경우에는 컨테이너가 맨 위에 있으며 첫 번째 테스트에서 컨테이너가 작동했습니다.

+0

그래, 불행히도 그것이 스윙과 어울리는지.여러 가지면에서 훌륭한 툴킷이지만, 다른 레이아웃 관리자의 구성 요소를 예측할 수 없게 만드는 것은 정말로 짜증스러운 일입니다. – davetron5000

3

텍스트 필드에 크기를 설정하지 마십시오. 대신 setColumns를 통해 열 크기를 0이 아닌 값으로 설정하거나 생성자를 column 인수와 함께 사용하십시오.

JTextComponent에서 열이 0 일 때보고되는 기본 크기는 텍스트를 렌더링하는 데 필요한 전체 공간입니다. columns가 0이 아닌 값으로 설정되면 기본 크기는 많은 표준 열 너비를 표시하는 데 필요한 크기입니다. (가변 피치 글꼴의 경우 대개 소문자 'm'의 크기에 가깝습니다). 열을 0으로 설정하면 텍스트 필드는 전체 컨테이너를 가져올 수있는만큼 많은 공간을 요청합니다.

채우기가있는 GridBagLayout에 이미 있으므로, 열을 1로 설정하고 다른 구성 요소 또는 다른 적절한 낮은 숫자를 기준으로 채우기를 확장 할 수 있습니다.

+1

이 방법은'FlowLayout'을 사용할 때 권장됩니다. – sworisbreathing

관련 문제