php小编百草在这里为您解答:如果您想使用从jtextfield输入的内容作为另一个类中的数组列表,可以按照以下步骤进行操作。首先,获取jtextfield中输入的内容并保存到一个变量中。然后,在另一个类中创建一个arraylist对象,并将保存的内容添加到该列表中。这样,您就可以在另一个类中使用该数组列表了。记得要进行适当的异常处理和数据类型转换,确保输入的内容能够正确地添加到列表中。希望这个简短的回答能对您有所帮助!
如果我在点击提交按钮后尝试将 jtextfield 添加到另一个类,它将无法工作,因为另一个类尝试在更新之前获取数组列表
import java.util.*;
import java.io.*;
import javax.swing.swingutilities;
public class blackjackmain {
public static void main(string [] args) {
blackjackguiclass content = new blackjackguiclass();
arraylist<string> hi = new arraylist<string>();
content.outputgui();
hi = content.newacc;
}
}import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.*;
public class BlackjackGUIClass implements ActionListener {
GridBagLayout ez;
GridBagConstraints gg;
private JFrame gui;
private JPanel content;
private JLabel title;
private JTextField usern;
private JLabel userent;
private JButton login;
private JTextField passw;
private JLabel passent;
private JButton create;
ArrayList<String> logacc = new ArrayList<String>();
ArrayList<String> newacc = new ArrayList<String>();
int check = 0;
public BlackjackGUIClass() {
}
public void outputGUI () {
gui = new JFrame("Blackjack Menu");
content = new JPanel();
gui.add(content);
ez = new GridBagLayout();
gg = new GridBagConstraints();
content.setLayout(ez);
title = new JLabel ("Abel's Blackjack Casino");
usern = new JTextField(30);
usern.setPreferredSize(new Dimension(10, 60));
userent = new JLabel ("Enter Username: ");
login = new JButton("Login");
login.setPreferredSize(new Dimension(300, 50));
create = new JButton("Create Account");
create.setPreferredSize(new Dimension(300, 50));
passw = new JTextField(30);
passw.setPreferredSize(new Dimension(10, 60));
passent = new JLabel ("Enter Password: ");
login.addActionListener(this);
create.addActionListener(this);
passw.addActionListener(this);
usern.addActionListener(this);
Font createSize = new Font("Times New Roman", Font.PLAIN, 50);
Font second = new Font("", Font.PLAIN, 30);
title.setFont(createSize);
userent.setFont(second);
passent.setFont(second);
gg.insets = new Insets(5, 5, 5, 5);
gg.gridx = 1;
gg.gridwidth = 3;
gg.gridy = 0;
content.add(title, gg);
gg.gridx = 2;
gg.gridwidth = 1;
gg.gridy = 1;
content.add(usern, gg);
gg.gridx = 1;
content.add(userent, gg);
gg.gridy = 2;
gg.gridx = 1;
content.add(passent, gg);
gg.gridx = 2;
content.add(passw, gg);
gg.gridy = 3;
gg.gridx = 1;
gg.gridwidth = 1;
content.add(login, gg);
gg.gridy = 3;
gg.gridx = 2;
gg.gridwidth = 1;
content.add(create, gg);
gui.setExtendedState(JFrame.MAXIMIZED_BOTH);
gui.setLocationRelativeTo(null);
gui.setVisible(true);
gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e) {
BlackjackMain wow = new BlackjackMain();
if (e.getSource() == login) {
logacc.add(usern.getText());
logacc.add(passw.getText());
} else if (e.getSource() == create) {
newacc.add(usern.getText());
newacc.add(passw.getText());
}
gui.dispose();
}
}我尝试在主类中设置一个数组列表,该数组列表等于正在更新的 gui 类中的数组列表,但它尝试在添加来自 jtextfield 的输入之前进行更新
像大多数 gui 一样,swing 是一个事件驱动环境,也就是说,发生了一些事情并且您对其做出响应(查看 actionlistener,您不知道它何时可能被操作,只知道它可能在某个时刻被操作将来)。
当您在 jframe 上调用 setvisible 时,该调用将立即返回,并且在将来的某个时刻,该窗口将变得可见。
这意味着在您的代码中,您试图在用户有机会输入任何内容之前获取详细信息。
相反,请使用模式 jdialog (请参阅 如何使用对话框了解更多详情)和/或观察者模式来确定何时应对用户输入的内容采取行动。
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import static java.lang.ref.Cleaner.create;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
/**
*
* @author Mad
*/
public class Main {
public static void main(String[] args) {
new Main();
}
public Main() {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.add(new BlackjackGUIClass(new BlackjackGUIClass.Observer() {
@Override
public void createUser(String name, char[] password) {
frame.dispose();
JOptionPane.showMessageDialog(null, "A new user will be created", "Make it so", JOptionPane.PLAIN_MESSAGE);
}
@Override
public void authenticateUser(String name, char[] password) {
frame.dispose();
JOptionPane.showMessageDialog(null, "You will be authenticated", "Make it so", JOptionPane.PLAIN_MESSAGE);
}
}));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class BlackjackGUIClass extends JPanel {
public interface Observer {
public void createUser(String name, char[] password);
public void authenticateUser(String name, char[] password);
}
private Observer observer;
public BlackjackGUIClass(Observer observer) {
this.observer = observer;
GridBagLayout ez = new GridBagLayout();
GridBagConstraints gg = new GridBagConstraints();
setLayout(ez);
JLabel title = new JLabel("Abel's Blackjack Casino");
JTextField usern = new JTextField(30);
JLabel userent = new JLabel("Enter Username: ");
JButton login = new JButton("Login");
JButton create = new JButton("Create Account");
JPasswordField passw = new JPasswordField(30);
JLabel passent = new JLabel("Enter Password: ");
login.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// This is a repeating pattern and you should consider taking
// the time make a re-usable solution
String userName = usern.getText();
char[] password = passw.getPassword();
// Could make use of a delegate to validate the password
if (userName.isBlank()) {
JOptionPane.showMessageDialog(BlackjackGUIClass.this, "User name can't be empty", "Error", JOptionPane.PLAIN_MESSAGE);
return;
}
if (password.length == 0) {
JOptionPane.showMessageDialog(BlackjackGUIClass.this, "User name can't be empty", "Error", JOptionPane.PLAIN_MESSAGE);
return;
}
observer.authenticateUser(userName, password);
}
});
create.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// This is a repeating pattern and you should consider taking
// the time make a re-usable solution
String userName = usern.getText();
char[] password = passw.getPassword();
// Could make use of a delegate to validate the password
if (userName.isBlank()) {
JOptionPane.showMessageDialog(BlackjackGUIClass.this, "User name can't be empty", "Error", JOptionPane.PLAIN_MESSAGE);
return;
}
if (password.length == 0) {
JOptionPane.showMessageDialog(BlackjackGUIClass.this, "User name can't be empty", "Error", JOptionPane.PLAIN_MESSAGE);
return;
}
observer.createUser(userName, password);
}
});
Font createSize = new Font("Times New Roman", Font.PLAIN, 50);
Font second = new Font("", Font.PLAIN, 30);
title.setFont(createSize);
userent.setFont(second);
passent.setFont(second);
gg.insets = new Insets(5, 5, 5, 5);
gg.gridx = 1;
gg.gridwidth = 3;
gg.gridy = 0;
add(title, gg);
gg.gridx = 2;
gg.gridwidth = 1;
gg.gridy = 1;
add(usern, gg);
gg.gridx = 1;
add(userent, gg);
gg.gridy = 2;
gg.gridx = 1;
add(passent, gg);
gg.gridx = 2;
add(passw, gg);
gg.gridy = 3;
gg.gridx = 1;
gg.gridwidth = 1;
add(login, gg);
gg.gridy = 3;
gg.gridx = 2;
gg.gridwidth = 1;
add(create, gg);
}
}
}我也不鼓励您使用 setpreferredsize,这会对不同平台产生不利影响。
以上就是我想使用从 jtextfield 输入的内容作为另一个类中的数组列表的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号