2017-02-10 1 views
0

스윙 대화 상자에 복수 줄 설명을 제공하는 JLabel이 있으므로 내용이 <html><body width="..."> 태그로 묶입니다. 대화 상자에는 JComboBox이 포함되어있어 레이아웃 관리자가 대화 상자의 너비를 결정할 수있는 소스 여야합니다. 긴 옵션이있는 경우 더 넓어 야합니다.GridBagLayout의 수동 요소?

불행히도 레이블은 절대 픽셀 값으로 인해 항상 동일한 너비를 가지며,이 값을 100%으로 설정하면 내용을 한 줄에 표시하면서 대화 상자를 화면의 너비까지 날려 버립니다.

GridBagLayout에 전체 너비를 계산하는 동안 구성 요소의 너비를 무시하고 값을 지정하는 옵션이 있습니까?

답변

1

JLabel을 사용하여 텍스트를 감싸는 대신 JTextArea을 사용하고 setLineWrap(...) 메서드를 사용하여 줄 바꿈을 제어 할 수 있습니다. 그런 다음 setColumns(...) 메서드를 사용하여 텍스트 영역의 너비를 제어 할 수 있습니다.

텍스트 영역의 배경색을 변경하여 JLabel처럼 보이게 할 수 있습니다.

GridBagLayout에 전체 너비를 계산하는 동안 구성 요소의 너비를 무시하고 그 값을 부여하는 옵션이 있습니까?

아니,하지만 당신은 자신 만의 계산을 할 수있는 JLabelgetPreferredSize(...) 메소드를 오버라이드 (override) 할 수도 있습니다. 맞춤 라벨에 설정 한 맞춤 속성을 기반으로 폭을 수정할 수 있습니다. 높이를 결정하는 방법을 모릅니다. 나는 HTML 포장 크기 계산을위한 논리를 본 적이 없다. 대화 상자에 pack()를 호출하기 전에 지금 마지막 단계로 JLabel의 텍스트를 설정하고 다음과 같이 그것을 : @camickr는 그의 대답을 썼다 동안

0

, 나는 해결 방법을 구현했습니다 그래서

String labelText = "<html><body>"; 
labelText += "<p style=\"width: " + (comboBox.getPreferredSize().width) + ";\">"; 
labelText += "This is text."; 
labelText += "</p></body></html>"; 

기본적으로 콤보 상자에 원하는 크기를 묻고 HTML 스타일 width 특성으로 사용합니다.