2014-08-31 61 views
1

使用BorderLayout的我的JPanel運行良好,直到我決定添加一個在其文本中有HTML的JLabel。我花了好幾個小時仔細檢查了有同樣問題的人,但沒有解決。當我評論處理這個JLabel的線時,一切正常。我嘗試使用JTextArea,但我有同樣的問題。JLabel中的HTML顯示不正確

import java.awt.*; 
import javax.swing.*; 
import java.awt.event.*; 

public class Gui extends JFrame implements KeyListener { 

JFrame jFrame; 
JPanel backgroundPanel; 
JLabel multiLineTextLabel; 
JLabel statusLabel; 

int xValue = 1000; 

Gui() { 
    jFrame = new JFrame("Frame Name"); 
    jFrame.setSize(1200, 600); 
    jFrame.setLayout(new BorderLayout()); 
    jFrame.setVisible(true); 
    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    backgroundPanel = new JPanel(); 
    backgroundPanel.setBackground(Color.BLACK); 

    String htmlString = "<html>Word1<br>Word2</html>"; 
    multiLineTextLabel = new JLabel(htmlString); 

    statusLabel = new JLabel("Some Text"); 

    jFrame.add(backgroundPanel, BorderLayout.CENTER); 
    jFrame.add(multiLineTextLabel, BorderLayout.EAST); 
    jFrame.add(statusLabel, BorderLayout.SOUTH); 
    jFrame.setFocusable(true); 
    jFrame.addKeyListener(this); 

} 

public void keyTyped(KeyEvent e) 
{ 
    //Won't be using 
} 

public void keyPressed(KeyEvent e) 
{ 
    int keyCode = e.getKeyCode(); 

    if(keyCode == KeyEvent.VK_LEFT) 
    { 
     xValue -= 20; 
     statusLabel.setText("You are clicking left"); 
    } 
    else if(keyCode == KeyEvent.VK_RIGHT) 
    { 
     xValue += 20; 
     statusLabel.setText("You are clicking right"); //You are "pressing" right 
    } 
    else if(keyCode == KeyEvent.VK_A) 
    { 
     statusLabel.setText("You are clicking A"); //You are "pressing" A 
    } 
    else if(keyCode == KeyEvent.VK_S) 
    { 
     statusLabel.setText("You are clicking S"); 
    } 
    else if(keyCode == KeyEvent.VK_ESCAPE) 
    { 
     jFrame.setVisible(false); 
     jFrame.dispose(); 
    } 
    else if(keyCode == KeyEvent.VK_P) 
    { 
     String positionString = new String("Your position/XValue = " + xValue); 

     statusLabel.setText(positionString); 
    } 

} 

public void keyReleased(KeyEvent e) 
{ 
    //Won't be using 
} 

public static void main(String[] args) 
{ 
    Gui go = new Gui(); 
} 
} 
+2

不幸的是不能在JLabels裏面工作。 – user3750325 2014-08-31 22:31:22

+0

什麼是私人組件controlKeyPanel;做什麼?你添加到你的佈局,但沒有像JPanel或任何其他任何對象?你是這個標籤multiLineTextLabel,但你沒有把它添加到你的佈局? – 2014-08-31 22:38:20

+0

當我添加multiLineTextLabel到你的佈局,它完美的作品 – 2014-08-31 22:43:23

回答

2

你的代碼執行正確的,但我的猜測是,你不知道,因爲在你的keyPressed功能點擊和按按鈕之間的區別,你說「您點擊右邊」能源部鼻涕有意義。你應該把它剔到你正在向右箭頭

你只需要按右,左,S或A按鈕來查看你的代碼正在做你想做的。

還有一點,你沒加之前multiLineTextLabelJFrame,但是當我告訴你,一切都按你的預期

一個點約JTextArea,你可以這樣做

String htmlString = "<html>Word1\n<br>Word2</html>"; 
JTextArea jta = new JTextArea(htmlString); 
jFrame.add(jta, BorderLayout.EAST); 

讓你html代碼就像你想要的一樣工作

0

解決方案是在最後設置框架可見。我意外地設置了可見,然後添加了所有組件。