gpt4 book ai didi

java - 使用java中的文本字段更改类的详细信息

转载 作者:太空宇宙 更新时间:2023-11-04 11:47:47 26 4
gpt4 key购买 nike

我需要帮助来使用 java 中的文本字段更改类的属性值,下面我有 3 个简化版本的代码来演示我遇到的问题。我在 alpha、UIalpha 和 mainGUI 类下面有 3 个类。当我运行 mainGUI 类时,我需要用户单击窗口上的电脑图像。这将创建打开一个新框架的 UIaplha 对象。该框架有一个文本字段,它应该能够更改 mainGUI 类中 aplha 类对象的名称属性。我的代码工作到一定程度,我不知道如何修复它。我多次搜索并尝试了多种方法,但没有一个对我有用。 pc image needed

Alpha.java

public class alpha{
String name;
public void setName(String n){
name=n;
}
public void print(){
System.out.println("name= "+name);
}
public static void main(String[] args){
alpha a=new alpha();
}
}

ma​​inGUI.java

import java.awt.*; // this is used to access the GridLayout class
import java.awt.event.*;
import javax.swing.*;
public class mainGUI extends JComponent{
private static final int WIDTH = 400;
private static final int HEIGHT = 300;
private int PCHeight=40;
private int PCWidth=41;
int y=20,x=30;
private JButton pc1button;
private PCButtonHandler pcbHandler;
public mainGUI(){
JFrame frame=new JFrame("NETWORK EXAMPLE");
ImageIcon image = new ImageIcon("pc.png");
pc1button =new JButton(image);
//////////////////////////////////////////////////////////
pc1button.setOpaque(false);
pc1button.setContentAreaFilled(false);
pc1button.setBorderPainted(false);
pc1button.setBounds(y,x,PCHeight,PCWidth);
////////////////////////////////////////////////////////
pcbHandler=new PCButtonHandler();
pc1button.addActionListener(pcbHandler);
frame.setTitle("GUI example");
Container pane= frame.getContentPane();
pane.setLayout(null);
pane.setBackground(Color.WHITE);
pane.add(pc1button);
frame.setSize(WIDTH, HEIGHT);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public class PCButtonHandler implements ActionListener
{
String name;
public void actionPerformed(ActionEvent e)
{
alpha test=new alpha();
test.setName("WRONG");
test.print();
UIalpha help=new UIalpha(test);
test=help.updateObjects();
test.print();
}
}
public static void main(String[] args){
mainGUI work=new mainGUI();
}
}

UIalpha.java

import java.awt.*; // this is used to access the GridLayout class
import java.awt.event.*;
import javax.swing.*;
public class UIalpha extends JFrame{
String Name;
private JLabel nameL;
private JTextField nameTF;
boolean pressed=false;
private JButton enterbutton=new JButton("Enter");
private JFrame frame=new JFrame("PC");
alpha refrence;
public UIalpha(alpha test){
this.refrence=test;
nameL= new JLabel("Enter the name of alpha: ", SwingConstants.CENTER);
nameTF=new JTextField(10);
nameTF.setMaximumSize(new Dimension(500,20));
enterbutton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
refrence.setName(nameTF.getText());
// test.setName(nameTF.getText());
//test.print();
pressed=true;
}
});
Container pane= frame.getContentPane();
frame.setLayout(new BoxLayout(pane,BoxLayout.PAGE_AXIS));
pane.add(nameL);
pane.add(nameTF);
pane.add(enterbutton);
frame.setMinimumSize(new Dimension(300,200));
frame.setPreferredSize(new Dimension(600,200));
frame.setMaximumSize(new Dimension(660,200));
frame.setVisible(true);
}
public alpha updateObjects(){

return refrence;
}
}

最佳答案

事实上,您的代码大部分都可以工作。呸,alpha 的变化反射(reflect)在 mainGUI 中。只是您太早尝试打印它 - 创建新框架不会阻塞。在您有机会输入新值之前,PCButtonHandler 中的两个 prints 都会立即发生。例如,如果您在 mainGUI 中添加一个新按钮来打印当前的 alpha 值,您将能够看到它发生了变化。

另外,既然我在这里:

  • Java 类名称应以大写字母开头。
  • 为了在应用程序增长时不至于变得疯狂,请使用布局管理器(例如 MigLayout)。

-编辑-

尝试使用新值执行某些操作(例如,在需要的地方更新整个 mainGUI)的好时机是窗口关闭时。您可以像在 mainGUI 中创建 UIalpha 一样进行操作:

help.addWindowListener(new WindowAdapter(){
@Override
public void windowClosing(WindowEvent e) {
System.out.println("window closing");
test.print();
}
});

或者好吧,当你修复 UIalpha 的方式时,这应该可以工作:

  • 删除frame变量
  • 无论您在该变量上调用方法,都在 UIalpha 上调用它(当前对象)

因为否则您会将该监听器设置在与您使用的框架不同的框架上。

关于java - 使用java中的文本字段更改类的详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42159733/

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