【发布时间】:2014-09-01 11:53:05
【问题描述】:
我使用 BorderLayout 的 JPanel 运行良好,直到我决定添加一个在其文本中包含 HTML 的 JLabel。我已经花了几个小时与遇到相同问题但没有解决的人仔细检查。当我注释掉处理这个 JLabel 的行时,一切正常。我尝试改用 JTextArea,但遇到了同样的问题。
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();
}
}
【问题讨论】:
-
不幸的是,这在 JLabels 内部不起作用。
-
私有组件控制KeyPanel是做什么的;做 ?您添加到布局中但没有制作任何像 JPanel 或其他任何对象?你有这个标签 multiLineTextLabel 但你没有将它添加到你的布局中?
-
当我将 multiLineTextLabel 添加到您的布局时,它可以完美运行
-
对不起,我忘记编辑了。它只是应该说 multiLineTextLabel 。
-
你现在有什么问题,因为它对我很有效?