2016-01-12 55 views
1

我有一個JLabel,它裏面有很多文本,所以我需要添加新行。我發現爲了做到這一點,你需要在你的JLabel中使用html,並在<br>中使用新的行。那麼,只要我添加HTML到我的JLabel它消失了!JLabel在使用html時消失了

這裏的JLabel用下面的代碼的圖片:

instructionLabel = new JLabel("lol"); 
instructionLabel.setBounds(25,10,500,100); 
add(instructionLabel); 

http://prntscr.com/9p1cme

現在,當我更改代碼,只要我添加HTML,它消失:

instructionLabel = new JLabel("<html>lol</html>"); 
instructionLabel.setBounds(25,10,500,100); 
add(instructionLabel); 

http://prntscr.com/9p1d4u

該程序給n o錯誤&如果需要,我願意提供更多代碼。

+1

避免的一個基本的例子像素完美的佈局是現代UI設計中的幻想。影響組件的個體大小的因素太多,其中沒有一個可以控制。 Swing旨在與佈局經理一起工作,放棄這些將導致問題和問題無法結束,您將花費越來越多的時間嘗試糾正 – MadProgrammer

+0

@madprogrammer這可能是這種情況發生的原因嗎?看起來像一個單獨的問題。沒有一個佈局看起來對所有我喜歡的節目都有吸引力。我不希望我的組件堆疊在一起,或者放在一個網格中,等等。 – Chawbee

+0

好吧,因爲我沒有關於如何讓佈局工作的背景,所以我不能說,但是因爲你已經做出了沒有努力來計算標籤的預期需求,這是一個非常好的選擇 – MadProgrammer

回答

2

避免使用null佈局,像素完美的佈局是現代UI設計中的幻想。影響組件的個體大小的因素太多,其中沒有一個可以控制。搖擺設計爲核心與佈局管理工作,丟棄這些會導致沒有問題,問題是,你將花費更多的時間,試圖結束整頓

HtmlLabel

import java.awt.EventQueue; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class LabelExample { 

    public static void main(String[] args) { 
     new LabelExample(); 
    } 

    public LabelExample() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     public TestPane() { 
      add(new JLabel("Look ma, no html")); 
      add(new JLabel("<html>Look ma, html</html>")); 
     } 

    } 

} 

更多見Laying Out Components Within a Container細節

在此基礎上要求...

Requirement

我做了一個簡單的GridBagLayout並製作這...

Score

import java.awt.Color; 
import java.awt.EventQueue; 
import java.awt.Font; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 
import javax.swing.border.LineBorder; 

public class LabelExample { 

    public static void main(String[] args) { 
     new LabelExample(); 
    } 

    public LabelExample() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     public TestPane() { 
      setLayout(new GridBagLayout()); 
      JLabel points = new JLabel("<html><b>Points: 0</b></html>"); 
      JLabel highscore = new JLabel("<html><b>Highscore: 0</b></html>"); 
      JLabel score = new JLabel("97"); 
      score.setFont(score.getFont().deriveFont(Font.BOLD, 96)); 

      GridBagConstraints gbc = new GridBagConstraints(); 
      gbc.gridx = 0; 
      gbc.gridy = 0; 
      gbc.weightx = 1; 
      add(points, gbc); 
      gbc.gridx = 2; 
      add(highscore, gbc); 

      gbc.weightx = 0; 
      gbc.weighty = 1; 
      gbc.gridx = 1; 
      gbc.anchor = GridBagConstraints.CENTER; 
      gbc.gridy++; 
      gbc.ipadx = 50; 
      gbc.ipady = 50; 
      score.setHorizontalAlignment(JLabel.CENTER); 
      add(score, gbc); 

      JButton high = new JButton("High"); 
      JButton low = new JButton("Low"); 

      gbc = new GridBagConstraints(); 
      gbc.gridx = 0; 
      gbc.gridy = 2; 
      gbc.fill = GridBagConstraints.HORIZONTAL; 
      add(high, gbc); 
      gbc.gridx = 2; 
      add(low, gbc); 
     } 


    } 

} 

這只是一個粗略的開始使用`null`佈局提供了思路

+0

感謝您的答案,但我不想徹底檢查我的整個佈局,看看它是否會使一些html工作。這是非常值得注意的未來參考,雖然,謝謝。我剛剛開始並且還不熟悉佈局。 – Chawbee

0
// You can try below code to solve your problem. 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import java.awt.Font; 

public class Tutorial extends JFrame { 

    public static void main(String[] args) { 
    new Tutorial(); 
    } 

    public Tutorial() { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setBounds(100, 100, 450, 300); 
     getContentPane().setLayout(null); 

     JLabel instructionLabel = new JLabel("<html><p>lol <br> Working</p></html>"); 
     instructionLabel.setFont(new Font("Tahoma", Font.BOLD, 12)); 
     instructionLabel.setBounds(25,10,500,100); 
     getContentPane().add(instructionLabel); 
     setVisible(true); 
    } 
}