(Java)setBounds问题与JLabel

时间:2012-05-02 17:19:42

标签: java swing user-interface jlabel layout-manager

我保持这个简短,因为所有即时通讯只是问一行代码。 继承了我的问题,所以为了让我的Jlabel显示我使用.setBounds

我的问题是我无法猜测文本的宽度所以我需要做什么才能使我的setBounds采用文本宽度和高度。

如果我没有很好地解释这一点,请说并试着解释一下。

Some1想要一个例子,所以这里是:

我的代码片段:

JLabel poisonDescription = new JLabel("This is the poison icon, when this appears...");
//My declaration.. the next is inside a void.
poisonDescription.setBounds(50, 50, 400, 20);
        add(poisonDescription);

非常简单,我希望Bounds调整大小为字体大小!

哦,是的另一个问题......我如何制作JLabel多线?

4 个答案:

答案 0 :(得分:1)

不要使用setBounds,只需将JLabel句柄自己保留为preferredSize即可。无论您为标签容器选择何种布局,它都将正确处理标签。

要拥有多行标签,只需使用JTextArea:

JTextArea textArea = new JTextArea();
textArea.setEditable(false);
textArea.setLineWrap(true);
textArea.setOpaque(false);
textArea.setWrapStyleWord(false);

答案 1 :(得分:1)

您可以使用HTML来执行此操作。

import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class Main {
    public static void main(String[] args) {
        JLabel label = new JLabel("<html>One<br>Two!");
        JOptionPane.showMessageDialog(null, label);
    }
}

有关详细信息,请参阅The Java Tutorial如何在Swing组件中使用HTML

答案 2 :(得分:1)

您的主要问题的答案是这是LayoutManagers旨在解决的问题。如果你想解决这个问题,请停止使用null布局,开始使用像FlowLayout或BorderLayout这样的简单布局管理器,让layoutmanager调整你的标签大小

关于多行标签的问题#2,最简单的方法是使用&lt; HTML&gt;传入格式正确的HTML。包含标签

答案 3 :(得分:1)

    l1 = new JLabel("UserName");
    l2 = new JLabel("Password");

    t1 = new JTextField();
    t2 = new JTextField();

    b1 = new JButton("Log In");
    b2 = new JButton("Cancel");

    l1.setBounds(100,100,40,30);
    l2.setBounds(100,150,70,30);
    t1.setBounds(200,100,150,30);
    t2.setBounds(200,150,150,30);
    b1.setBounds(100,200,90,30);
    b2.setBounds(200,200,90,40);

只需提供按钮文本字段和其他内容的维度......