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

JLabel文本被切断

黄俊誉
2023-03-14

从上面的图像中可以看到,一些文本被剪掉了:(代码:

package malgm.school.clockui.ui;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;

import javax.swing.*;

import malgm.school.clockui.ClockUI;
import malgm.school.clockui.ResourceLoader;

public class ClockFrame extends JFrame {

    private static final long serialVersionUID = 1L;

    public final static int FRAME_WIDTH = 600;
    public final static int FRAME_HEIGHT = 200;

    public ClockFrame() {
        setTitle("Clock");
        setSize(FRAME_WIDTH, FRAME_HEIGHT);
        setResizable(false);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        relocalize();
    }

    public void relocalize() {
        //Wipe controls
        this.getContentPane().removeAll();
        this.setLayout(null);

        initComponents();
    }

    @SuppressWarnings("unused")
    private void initComponents() {
        setLayout(new BorderLayout());

        JPanel header = new JPanel();
        header.setLayout(new BoxLayout(header, BoxLayout.LINE_AXIS));

        JPanel section = new JPanel();
        section.setLayout(new BoxLayout(section, BoxLayout.LINE_AXIS));

        JLabel label = new JLabel("The time is...");

        JButton speakButton = new JButton("Speak");
        speakButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Runtime rt = Runtime.getRuntime();

                try {
                    Process pr = rt.exec(ClockUI.dir + "/SpeakingClock.exe");
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }

        });

        JLabel time = new JLabel("test");
        ResourceLoader resLoader = new ResourceLoader();
        time.setFont(resLoader.getFont(ResourceLoader.FONT_DIGITAL, 72));

        section.add(Box.createHorizontalGlue());
        section.add(time);
        section.add(Box.createHorizontalGlue());

        header.add(label);
        header.add(Box.createHorizontalGlue());
        header.add(speakButton);

        add(header, BorderLayout.PAGE_START);
        add(section, BorderLayout.CENTER);
    }

}

FONT:http://www.dafont.com/digital-7。FONT

如有任何帮助,我将不胜感激

共有1个答案

东门胤
2023-03-14

成功使用Swing布局的关键是避免setLayout(null)pack()封闭的窗口。这让包含的组件采用其首选的大小,如下所示。为了避免这个陷阱,不要调用setresizable(false)

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

/** @see https://stackoverflow.com/a/23551260/230513 */
public class ClockFrame extends JFrame {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                ClockFrame cf = new ClockFrame();
            }
        });
    }

    public ClockFrame() {
        setTitle("Clock");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        initComponents();
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    @SuppressWarnings("unused")
    private void initComponents() {
        JPanel header = new JPanel();
        header.setLayout(new BoxLayout(header, BoxLayout.LINE_AXIS));
        JPanel section = new JPanel();
        section.setLayout(new BoxLayout(section, BoxLayout.LINE_AXIS));
        JLabel label = new JLabel("The time is...");
        JButton speakButton = new JButton("Speak");
        JLabel time = new JLabel("00:00");
        time.setFont(time.getFont().deriveFont(72f));
        section.add(Box.createHorizontalGlue());
        section.add(time);
        section.add(Box.createHorizontalGlue());
        header.add(label);
        header.add(Box.createHorizontalGlue());
        header.add(speakButton);
        add(header, BorderLayout.PAGE_START);
        add(section, BorderLayout.CENTER);
    }
}
 类似资料:
  • 我有一个JLabel,随着JFrame窗口的扩展,字体大小会自动改变。JLabel中的文本可以缩写,也可以放入全文,如下所示: 因为我对Swing使用了Eclipse的“AbsoluteLayout”(),所以JLabels不会自动调整到文本的大小,而是固定值。请注意,我确实会随着窗口大小的改变而改变这些固定值。我已经有了一个算法。 我想知道是否有一种方法来确定我的文本是否会显示成这样,而不是进行

  • 我有一个JLabel,我已经设置了自定义字体,“BP饮食”到它。如果我将此添加到JFrame中,文本看起来很好,但是当我将JFrame的布局更改为FlowLayout时,文本的顶部就会被切断。当您将JLabel添加到JPanel并将其添加到JFrame时,也会出现同样的问题。我在http://www.hichris.com/more/files/bpdiet.otf上有这个字体 下面是代码: 感谢

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

  • 问题内容: 我刚刚开始将Swing应用程序从OS X移植到Windows,使用s会很麻烦。 我注意到,如果标签的文本是HTML ,则指定为的字体将被忽略(在Mac上不会发生)。HTML格式极其有用,可提高复杂显示的可读性。 通常情况下,我会在HTML标记中指定字体,但是我使用的字体是在运行时通过JAR中的ttf 加载的。我尝试在font标签中使用加载的字体的名称,但这没有用。 有什么办法可以在Wi

  • 我正在设计一个配置托盘的应用程序,我有一个扩展的类,我用它创建带有旋转文本的JLabels。我在网上找到了几个关于如何这样做的例子,我的旋转工作很好,它不是完美的,但这是一个正在进行的工作。 我现在遇到的问题是我旋转的JLabels中的文本重复了,我不知道为什么。下面是一张图片,显示了每个标签中的重复文本,它在一些地方比在其他地方更突出,例如与高度标签的重复可以清楚地看到。 下面是我的类的源代码,

  • 我正在使用标签来显示路径,我在侦听器中使用的关于Laebl的唯一方法是setText()方法。有没有办法不发生这种情况?我使用SWT,更喜欢维护网格布局,这样我就可以拥有2列。任何信息都会有所帮助。谢谢你。 这是密码