gpt4 book ai didi

java - JLabel 文本大于 JLabel 大小并转向 "..."

转载 作者:行者123 更新时间:2023-12-01 16:13:41 28 4
gpt4 key购买 nike

我对Java真的很陌生,我想制作一个简单的GUI,其中有一个按钮,当你点击它时就会计数,我遵循this 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);
}

}

最佳答案

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

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

因此,解决方案是对框架进行 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);

关于java - JLabel 文本大于 JLabel 大小并转向 "...",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62460307/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com