gpt4 book ai didi

java - JLabel setText() 的问题

转载 作者:行者123 更新时间:2023-12-01 12:21:23 25 4
gpt4 key购买 nike

我在使用 Jlabel 和 setText() 方法时遇到一些问题。通常,setText() 应该清除以前的文本并在单击按钮时替换为新文本,但文本却相互堆积。

    public class JFrameDemo extends JFrame{
private JButton clearButton;
private JLabel display;
private JButton exitButton;
private JButton go;
private JTextField nameField;
private JLabel name;

public JFrameDemo(){
doEnglish();
}

private void doEnglish(){
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
getContentPane().setLayout(null);

name = new JLabel("Enter Name");
getContentPane().add(name);
name.setBounds(5,30,300,30);
nameField = new JTextField();
getContentPane().add(nameField);
nameField.setBounds(80,33,150,25);

go = new JButton("Go");
getContentPane().add(go);
go.setBounds(5, 65, 50, 30);
go.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
goButtonActionPerformed();
}
});
}

private void goButtonActionPerformed(){
String na = nameField.getText();
display = new JLabel();
display.setText(na);
getContentPane().add(display);
display.setBounds(85,110,400,20);
}

public static void main(String args[]){
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new JFrameDemo().setVisible(true);
}
});
}
}

最佳答案

  1. 您正在使用 null 布局
  2. 您正在创建 JLabel 的新实例,然后将其添加到内容 Pane ...这并不奇怪

避免使用 null 布局,像素完美布局是现代 UI 设计中的一种幻觉。影响组件个体尺寸的因素太多,您无法控制其中任何一个。 Swing 的设计初衷是与布局管理器一起工作,放弃它们将导致无穷无尽的问题,您将花费越来越多的时间来尝试纠正

看看What is a Null Pointer Exception, and how do I fix it?了解更多详情...

相反,您应该检查 display 标签的状态,并仅在需要时创建...

private void goButtonActionPerformed(){
String na = nameField.getText();
if (display == null) {
display = new JLabel();
getContentPane().add(display);
// Get rid of this as soon as you can...
display.setBounds(85,110,400,20);
}
display.setText(na);
}

关于java - JLabel setText() 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26646320/

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