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

标签 java

我需要帮助来使用 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/

相关文章:

java - 从十六进制转换为二进制以及二进制到十六进制,不使用转换,读取txt文件以查找RAM中的错误

java - Maven 正在调用哪个类?

java - Spring可变实例数

java - Eclipse 快捷键是什么来打开允许按 TAB 键时光标转到预期位置的功能?

java - 在Liferay搜索容器中显示来自不同数据库表的数据: Liferay

java - 使用鼠标瞄准 LibGDX

java - Gson 解析一个具有泛型类型的 Json 对象

java - 在保留箭头图标的同时动态设置 DisclosurePanel 的标题文本?

java - JAX-RS( Jersey )仅限管理员 API 调用

java - 当存在命名空间时通过Xpath表达式提取值