gpt4 book ai didi

java - 尝试将 JTextField 输入传递到 JLabel,然后传递到 JPanel GUI 小程序

转载 作者:行者123 更新时间:2023-12-01 09:47:06 26 4
gpt4 key购买 nike

我正在为家庭作业制作一个“支票编写器”小程序,并且试图让用户的姓名显示在用户界面的任何位置。我已经尝试了一些方法,但现在我只是想将输入输入到 JLabel 上,然后输入到面板上。

public class project2 extends JPanel {

private JLabel labelName, labelAmount, resultName, resultMoney;
//private JTextArea resultName, resultMoney;
private JTextField name, dollarAmount;
private final int w = 1000, h = 200;

protected void paintComponent(Graphics g) {
g.drawString("Bank of Northwest Vista College", 425, 40);
g.drawString("Pay to the order of: ", 75, 70);
g.drawString("$", 730, 70);
}
public project2() {
setBackground(Color.white);
setPreferredSize(new Dimension(w, h));

labelName = new JLabel("Name:");
labelAmount = new JLabel("Check Amount:");
resultName = new JLabel("");
//resultMoney = new JLabel("$" + dollarAmount);

name = new JTextField(20);
name.addActionListener(new nameListener());

dollarAmount = new JTextField(20);
dollarAmount.addActionListener(new dollarListener());

add(labelName);
add(name);
add(labelAmount);
add(dollarAmount);
add(resultName);
//add(resultMoney);
}

我基本上最需要帮助的地方

private class nameListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
JLabel namelabel = new JLabel(name.getText());
JPanel namepanel = new JPanel();
namepanel.setPreferredSize(new Dimension(40, 10));
namepanel.add(name);
}
}

private class dollarListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
String MONEY = dollarAmount.getText();
}
}

}

最佳答案

问题:

  • 您似乎正在将直接写入组件的paintComponent方法中的内容与尝试使用JLabel显示文本相结合,并将这些方法结合起来。这不是解决这个问题的最干净的方法。通常,如果您想显示统一的消息,最好使用所有组件或所有图形,而不是混合使用。
  • 您尝试使用绝对定位将 JLabel 放置在 JPanel 上,忽略 JPanel 的布局管理器。 JPanel 使用 FlowLayout 作为默认布局管理器,此布局将忽略组件大小和边界,大多数 Swing 布局管理器也是如此。
  • 您正在重写 JPanel 的 PaintComponent,但没有调用 super 的方法。
  • 在 ActionListener 中,您将创建新组件,将新 JLabel 添加到新 JPanel,但不将 JPanel 添加到 GUI。无论如何,您并不真的想在这里创建新组件,如下所述。

建议:

  • 同样,要么在 Swing 组件(例如 JLabels)中显示文本,要么在 PaintComponent 方法中显示文本,但不要同时显示两者,除非您要显示两个完全不同且不应该排列的内容。
  • 如果重写paintComponent,请调用super.paintComponent(g);方法,通常作为重写方法中的第一个调用。这将确保清理脏像素并完成其他组件图形内务处理。
  • 避免使用 null 布局和 setBounds,而应使用布局管理器,并让布局管理器发挥其作用,帮助您轻松构建 GUI。
  • 不要从 ActionListener 中添加新的 JLabel,而是将文本添加到已存在并显示的 JLabel。

例如:

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.*;

public class SimpleExampleWithComponents extends JPanel {
private static final int COLS = 15;
private JTextField nameField = new JTextField(COLS);
private JTextField amountField = new JTextField(COLS);
private JButton submitButton = new JButton("Submit");

private JLabel payeeLabel = new JLabel(" ");
private JLabel amountLabel = new JLabel("$ ");

public SimpleExampleWithComponents() {
SubmitListener submitListener = new SubmitListener();
nameField.addActionListener(submitListener);
amountField.addActionListener(submitListener);
submitButton.addActionListener(submitListener);
submitButton.setMnemonic(KeyEvent.VK_S);

JPanel topPanel = new JPanel();
topPanel.add(new JLabel("Name:"));
topPanel.add(nameField);
topPanel.add(Box.createHorizontalStrut(15));
topPanel.add(new JLabel("Amount:"));
topPanel.add(amountField);
topPanel.add(Box.createHorizontalStrut(15));
topPanel.add(submitButton);

// holds one row and 3 columns
JPanel middlePanel = new JPanel(new GridLayout(1, 3));
middlePanel.add(new JLabel("Pay to the order of:"));
middlePanel.add(payeeLabel);
middlePanel.add(Box.createHorizontalStrut(15));
middlePanel.add(amountLabel);

setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
setLayout(new BorderLayout());
add(topPanel, BorderLayout.PAGE_START);
add(middlePanel, BorderLayout.CENTER);
}

private class SubmitListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
String name = nameField.getText().trim();
String amount = amountField.getText().trim();

payeeLabel.setText(name);
amountLabel.setText("$" + amount);
}
}

private static void createAndShowGui() {
SimpleExampleWithComponents mainPanel = new SimpleExampleWithComponents();

JFrame frame = new JFrame("GUI");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGui());
}
}

关于java - 尝试将 JTextField 输入传递到 JLabel,然后传递到 JPanel GUI 小程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37899318/

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