2011-08-08 26 views
9

như tiêu đề cho biết: Tôi cần phải phù hợp với một JLabel vào một JFrame, nhưng văn bản trong JLabel quá dài, vì vậy tôi cần phải thêm một số linebreaks. Văn bản trong JLabel được lấy từ một tệp XML trực tuyến, vì vậy tôi không thể thay đổi văn bản để chứa các dấu ngắt dòng.Làm thế nào để phù hợp với một chuỗi dài thành một JLabel

Mã này chiết xuất dữ liệu từ file XML

Element element = (Element)nodes1.item(i); 
      String vær = getElementValue(element,"body"); 
      String v = vær.replaceAll("<.*>", ""); 
      String forecast = "Vær: " + v; 

trong trường hợp này chuỗi Tôi muốn thêm một số linebreaks vào chuỗi v. Các chuỗi v chứa các dữ liệu phân tích từ tập tin xml. Dự báo chuỗi được trả về và được đặt làm văn bản cho JLabel.

Chỉ cần hỏi xem có điều gì không rõ ràng, cảm ơn trước!

Trả lời

12

Tôi khuyên bạn nên sử dụng JTextArea thay vào đó và bật chế độ đóng gói. Cách duy nhất để làm điều đó trong một JLabel là để đặt ngắt dòng <br />, mà sẽ không hoạt động (ít nhất là không dễ dàng) trong tình huống của bạn nếu bạn không biết văn bản trước.

JTextArea linh hoạt hơn nhiều. Theo mặc định nó có vẻ khác nhau, nhưng bạn có thể fiddle xung quanh với một số thuộc tính hiển thị để làm cho nó trông giống như một JLabel.


Một đơn giản sửa đổi sử dụng ví dụ lấy từ How to Use Text Areas hướng dẫn -

public class JTextAreaDemo { 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() {   
       createAndShowGUI(); 
      } 
     }); 
    } 

    private static void createAndShowGUI(){ 
     final JFrame frame = new JFrame("JTextArea Demo"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     final JPanel panel = new JPanel(); 
     JTextArea textArea = new JTextArea(
       "If there is anything the nonconformist hates worse " + 
       "than a conformist, it's another nonconformist who " + 
       "doesn't conform to the prevailing standard of nonconformity.", 
       6, 
       20); 
     textArea.setFont(new Font("Serif", Font.ITALIC, 16)); 
     textArea.setLineWrap(true); 
     textArea.setWrapStyleWord(true); 
     textArea.setOpaque(false); 
     textArea.setEditable(false); 

     panel.add(textArea); 
     frame.add(panel); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 

enter image description here

+1

+1, Bạn cũng có thể muốn làm cho thành phần không mờ đục (ví dụ: 'setOpaque (false)) '). – mre

+0

Tôi đã bao gồm một ví dụ sử dụng đơn giản. Nếu bạn cảm thấy điều này là không cần thiết, hãy cho tôi biết và tôi sẽ quay lại. :) – mre

+0

Nhưng làm thế nào tôi có thể thay đổi kích thước JTextArea để nó chỉ chứa một số charcaters trên mỗi dòng. ví dụ: 30 Charcaters trên mỗi dòng trước khi linebreak? Cus Tôi muốn JPanel được trên tất cả các màn hình và không gói(); –

5

JLabel có thể hiển thị văn bản HTML, tức là nếu bạn quấn văn bản của mình bằng <html>your text<html>, nó có thể bao bọc văn bản. Đó là chưa được thử nghiệm, vì vậy YMMV.

+1

+1, Và đây là một hướng dẫn tốt đẹp - [Làm thế nào để Sử dụng HTML trong các thành phần Swing] (http://download.oracle.com/javase/tutorial/uiswing/components/html.html) – mre

1

bạn tự động có thể nói JLabel của bạn để thay đổi kích thước bản thân để phù hợp với văn bản.

nếu bạn không sử dụng một thử LayoutManager:

 jLabel.setText ("A somewaht long message I would not want to 
stop"); 
     jLabel.setSize(jLabel.getPreferredSize()); 

Nếu bạn đang sử dụng một Giám đốc Layout đoạn này nên làm việc:

 jLabel.setText ("A somewaht long message I would not want to 
stop"); 
     jLabel.validate(); 
Các vấn đề liên quan