首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JLabel文本大于JLabel大小并转到“.”

JLabel文本大于JLabel大小并转到“.”
EN

Stack Overflow用户
提问于 2020-06-18 22:22:02
回答 2查看 130关注 0票数 0

我对Java非常陌生,我想用一个按钮制作一个简单的GUI,当你点击它的时候,我就按照教程的YouTube来实现它。一切都进行得很顺利,一切顺利。但有一件事没有做到,JLabel文本的结尾从数字(9)到...。手动调整窗口大小会使数字返回,因此我尝试在启动时重新调整代码中的字体、窗口、按钮和标签大小,但仍然遇到同样的问题。

这是我的按钮代码:

代码语言:javascript
复制
JButton button = new JButton("Click me!");
    button.addActionListener(this);

我相信...which会这么说:

代码语言:javascript
复制
public void actionPerformed(ActionEvent e) {
    count++;
    label.setText("Number of clicks: " + count);
}

我在其他问题上尝试过一些其他的解决方案,但它们根本没有帮助。

GUI的完整代码如下:

代码语言:javascript
复制
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);
    }

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-18 23:15:18

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

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

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

代码语言:javascript
复制
label.setText("Number of clicks: " + count);
frame.pack();

还请注意,您不应该在ActionListener中设置label属性。创建标签时应设置下列属性:

代码语言:javascript
复制
label = new JLabel("Number of clicks: 0");
label.setHorizontalTextPosition(JLabel.CENTER);
label.setVerticalTextPosition(JLabel.CENTER);
票数 0
EN

Stack Overflow用户

发布于 2020-06-18 23:15:19

基本上,你必须给JLabel空间来成长。

这里有一种方法。

代码语言:javascript
复制
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class ClickMe implements ActionListener, Runnable {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new ClickMe());
    }

    private int count = 0;
    private JLabel label;
    private JFrame frame;

    @Override
    public void run() {
        frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setTitle("Click Me");

        JPanel buttonPanel = new JPanel();

        JButton button = new JButton("Click me!");
        button.addActionListener(this);
        button.setFont(new Font("System", Font.PLAIN, 22));
        button.setPreferredSize(new Dimension(300, 75));
        buttonPanel.add(button);

        frame.add(buttonPanel, BorderLayout.CENTER);

        JPanel labelPanel = new JPanel();

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

        frame.add(labelPanel, BorderLayout.AFTER_LAST_LINE);

        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

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

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62460307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档