当前位置: 首页 > 知识库问答 >
问题:

JLabel文本大于JLabel大小并转向“…”

秦宏盛
2023-03-14

我对Java真的很陌生,我想做一个简单的GUI,上面有一个按钮,当你点击它的时候就会有价值,我在YouTube上学习了这个教程。一切都很顺利。但有一点没有,即jlabel文本的结尾从一个数字(9)变为...。手动调整窗口的大小会使数字返回,所以我尝试在它启动时在代码中调整字体、窗口、按钮和标签的大小,这确实起作用,但仍然会遇到同样的问题。

这是我的按钮代码:

JButton button = new JButton("Click me!");
    button.addActionListener(this);

...我相信它会称之为:

public void actionPerformed(ActionEvent e) {
    count++;
    label.setText("Number of clicks: " + count);
}

我在其他问题上试过一些其他的解决方法,但它们一点帮助都没有。

GUI的完整代码如下:

package javaGUI;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.BorderFactory;
import javax.swing.JButton;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class GUI implements ActionListener {
    private int count = 0;
    private JLabel label;
    private JFrame frame;
    private JPanel panel;

    public GUI() {
        frame = new JFrame();

        JButton button = new JButton("Click me!");
        button.addActionListener(this);
        button.setPreferredSize(new Dimension(10, 75));

        label = new JLabel("Number of clicks: 0");
        label.setFont(new Font("System", Font.PLAIN, 22));

        panel = new JPanel();
        panel.setBorder(BorderFactory.createEmptyBorder(60, 100, 30, 100));
        panel.setLayout(new GridLayout(0, 1));
        panel.add(button);
        panel.add(label);

        frame.add(panel, BorderLayout.CENTER);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setTitle("GUI");
        frame.pack();
        frame.setVisible(true);
    }

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

    @Override
    public void actionPerformed(ActionEvent e) {
        count++;
        label.setText("Number of clicks: " + count);
        label.setHorizontalTextPosition(JLabel.CENTER);
        label.setVerticalTextPosition(JLabel.CENTER);
    }

}

共有1个答案

汪安宁
2023-03-14

当框架在可见之前被“打包”时,所有组件都以其首选的大小显示。

问题是,当需要在标签中显示多个数字时,标签的首选大小增加了,但框架中没有足够的空间来完整显示标签文本,因此文本被截断。

因此,解决方案是pack()框架,以便GridLayout中的组件可以再次以其首选大小显示:

label.setText("Number of clicks: " + count);
frame.pack();

另外请注意,您不应该在ActionListener中设置标签属性。创建标签时应设置以下属性:

label = new JLabel("Number of clicks: 0");
label.setHorizontalTextPosition(JLabel.CENTER);
label.setVerticalTextPosition(JLabel.CENTER);
 类似资料:
  • 起初,我只有文本栏和状态栏,如下例所示(我不需要父容器): 这是应该的。但是,请记住状态栏的高度。现在,如果您将StatusBar类更改为下面的类,那么高度几乎会增加一倍。为什么会这样? 这种设置并不需要更多的垂直空间: 我可以让这成为一个新问题,但我觉得不值得...

  • 问题内容: 在Java中,由于空间不足而无法显示JLabel的文本时,文本将被截断并在末尾添加“ …”。 如何轻松找出当前JLabel是显示全文还是被截断? 编辑: 我看到有一种方法可以使用来找出文本的大小。但是,此解决方案无法完全回答问题。如果JLabel的文本包含HTML装饰,则还将计算HTML标签的宽度。因此,可能发生的结果是比JLabel的宽度更大,但仍然可以正确显示文本。 有没有办法知道

  • 我知道如何以正常的方式改变JLabel的字体大小 但是我想看看当您将JLabel添加到面板时是否有一种方法,即简单的方法。像这样.. 当JLabel没有名称时,我如何更改后者的字体大小? 我尝试在JPanel上设置字体,但它不起作用。 对此,我们将不胜感激。

  • 问题内容: 我正在制作一个具有以下布局()的Java Swing应用程序: 当用户添加或删除图标时,其他图标应缩小或增长。 我的问题很简单:我有一个包含;如何调整此图标的大小? 问题答案: 调整图标大小并不容易。您需要使用Java的2D图形来缩放图像。第一个参数是Image类,您可以从类中轻松获取。您可以使用class加载图像文件,然后只需调用getter方法即可获取图像。

  • 我想在内部设置一个的。 我试着用 但这不起作用。我怎么能这么做?

  • 线宽=线宽+25;//调试尝试 我不得不添加这段代码,这样它就增加了它得到的长度。这是我添加的代码,只是为了暂时解决问题。我想要一个永久的解决办法。