2008-09-24 30 views
8

Tôi đang viết thành phần lựa chọn tệp tùy chỉnh. Trong giao diện người dùng của tôi, trước tiên người dùng nhấp vào nút, bật ra một JFileChooser; khi nó được đóng lại, đường dẫn tuyệt đối của tệp đã chọn được ghi vào một JTextField.Java, Swing: làm cách nào để đặt độ rộng tối đa của JTextField?

Vấn đề là, đường dẫn tuyệt đối thường dài, khiến trường văn bản mở rộng, làm cho vùng chứa của nó quá rộng.

tôi đã cố gắng này, nhưng nó đã không làm bất cứ điều gì, lĩnh vực văn bản vẫn là quá rộng:

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

Hiện nay, khi nó là trống rỗng, nó đã 400px dài, vì GridBagConstraints kèm theo cho nó.

Tôi muốn nó giống như các trường văn bản trong các trang HTML, có kích thước cố định và không phóng to khi đầu vào quá dài.

Vì vậy, làm cách nào để đặt kích thước tối đa cho JTextField?

Trả lời

12

Nó có thể phụ thuộc vào trình quản lý bố cục trường văn bản của bạn. Một số trình quản lý bố cục mở rộng và một số trình quản lý bố cục không. Một số mở rộng chỉ trong một số trường hợp, những người khác luôn.

tôi giả sử bạn đang làm

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

Nếu vậy, bố trí hợp lý nhất, lĩnh vực này không nên thay đổi kích thước (ít nhất, nó không nên phát triển). Thường thì trình quản lý bố cục hoạt động kém khi được đưa vào JScrollPane s.

Theo kinh nghiệm của tôi, cố gắng kiểm soát các kích thước qua setMaximumSizesetPreferredWidth và cứ như vậy là bấp bênh nhất. Swing đã tự quyết định với trình quản lý bố cục và có rất ít điều bạn có thể làm.

Tất cả những gì được nói, tôi không gặp vấn đề gì bạn đang gặp phải, điều này khiến tôi tin rằng việc sử dụng một cách thận trọng người quản lý bố cục sẽ giải quyết vấn đề.

3

Tôi đã giải quyết vấn đề này bằng cách đặt chiều rộng tối đa trên vùng chứa của trường văn bản, sử dụng setMaximumSize.

Theo câu trả lời của davetron, đây là giải pháp dễ vỡ, vì trình quản lý bố cục có thể bỏ qua thuộc tính đó. Trong trường hợp của tôi, container là cao nhất, và trong một thử nghiệm đầu tiên nó làm việc.

+0

Vâng, thật không may là nó như thế nào với Swing.Đó là một bộ công cụ tốt đẹp theo nhiều cách, nhưng khả năng không thể đoán trước của các thành phần trong các trình quản lý bố cục khác nhau thực sự gây phiền toái. – davetron5000

3

Không đặt bất kỳ kích thước nào trên trường văn bản. Thay vào đó, hãy đặt kích thước cột thành giá trị khác 0 thông qua setColumns hoặc sử dụng hàm tạo với đối số cột.

Điều đang xảy ra là kích thước ưa thích được báo cáo bởi JTextComponent khi cột bằng 0 là toàn bộ không gian cần thiết để hiển thị văn bản. Khi cột được đặt thành giá trị khác 0, kích thước ưa thích là kích thước cần thiết để hiển thị nhiều chiều rộng cột tiêu chuẩn. (đối với một phông chữ thay đổi độ cao, nó thường gần với kích thước của chữ thường 'm'). Với các cột được đặt bằng 0, trường văn bản yêu cầu nhiều không gian vì nó có thể lấy và kéo dài toàn bộ vùng chứa.

Vì bạn đã có nó trong một GridBagLayout với một điền, bạn có thể chỉ cần đặt các cột 1 và để điền vào căng nó ra dựa trên các thành phần khác, hoặc một số khác phù hợp thấp số.

+1

Tôi khuyên bạn nên sử dụng phương pháp này khi sử dụng 'FlowLayout'. – sworisbreathing

Các vấn đề liên quan