Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将文本从一个JFrame传输到另一个JFrame(在代码中找不到我的错误)_Java_Swing - Fatal编程技术网

Java 将文本从一个JFrame传输到另一个JFrame(在代码中找不到我的错误)

Java 将文本从一个JFrame传输到另一个JFrame(在代码中找不到我的错误),java,swing,Java,Swing,我正在构建一个应用程序,我想“传输”文本字段的内容,但我做了一些错误的事情,我无法找到原因 这是我的主框架代码。当用户导航到file new Actor时,会弹出一个框架,用户必须在其中输入一些信息。我想在这种情况下将此信息从文本字段传输到主框架上的文本字段 public class GUI { private JFrame frmGUI = new JFrame(); private JMenuItem mntmActor; private JTextField gotText = new

我正在构建一个应用程序,我想“传输”文本字段的内容,但我做了一些错误的事情,我无法找到原因

这是我的主框架代码。当用户导航到file new Actor时,会弹出一个框架,用户必须在其中输入一些信息。我想在这种情况下将此信息从文本字段传输到主框架上的文本字段

public class GUI {

private JFrame frmGUI = new JFrame();
private JMenuItem mntmActor;
private JTextField gotText = new JTextField();
private NewActorFrame actorFrame = new NewActorFrame();
private JPanel panel = new JPanel();
private final JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                GUI window = new GUI();
                window.frmGUI.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the application.
 */
public GUI() {
    initialize();
}

/**
 * Initialize the contents of the frame.
 */
private void initialize() {
    initComponents();
    createEvents();

}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////// this method is for visualising all the components of the GUI such
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// as
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// buttons,
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// panels,
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// etc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
private void initComponents() {
    // TODO Auto-generated method stub

    frmGUI.setTitle("Use Case Tool");
    frmGUI.setBounds(100, 100, 762, 621);
    frmGUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frmGUI.getContentPane().setLayout(new BorderLayout(0, 0));

    // add elements to the form
    frmGUI.getContentPane().add(panel, BorderLayout.SOUTH);
    frmGUI.getContentPane().add(tabbedPane, BorderLayout.CENTER);

    tabbedPane.addTab("New tab", null, gotText, null);
    gotText.setColumns(10);

    JTree tree = new JTree();
    tree.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {
            JPanel textView = new JPanel();
            tabbedPane.addTab("Text View", null, textView, null);

        }
    });
    tree.setModel(new DefaultTreeModel(new DefaultMutableTreeNode("Project \"Test\"") {
        {
            add(new DefaultMutableTreeNode("Use Cases"));
            add(new DefaultMutableTreeNode("Actors"));
        }
    }));
    frmGUI.getContentPane().add(tree, BorderLayout.WEST);

    JMenuBar menuBar = new JMenuBar();
    frmGUI.setJMenuBar(menuBar);

    JMenu mnFile = new JMenu("FIle ");
    menuBar.add(mnFile);

    JMenu mnN = new JMenu("New");
    mnFile.add(mnN);

    JMenuItem mntmFolderInProject = new JMenuItem("Folder in Project");
    mnN.add(mntmFolderInProject);

    mntmActor = new JMenuItem("Actor");

    mnN.add(mntmActor);

    JMenuItem mntmUseCase = new JMenuItem("Use Case");
    mnN.add(mntmUseCase);

    JMenuItem mntmSystem = new JMenuItem("System");
    mnN.add(mntmSystem);

    JMenuItem mntmExport = new JMenuItem("Exit");
    mnFile.add(mntmExport);

    JMenu mnCreate = new JMenu("Help");
    menuBar.add(mnCreate);

}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////// this method is for the events which are going to be triggered
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
private void createEvents() {

    mntmActor.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent arg0) {
            // TODO Auto-generated method stub
            System.out.println("Create a new actor");
            actorFrame.setVisible(true);
            gotText.setText(actorFrame.getFieldText());

        }
    });

}
}
这是主窗口的类,现在是显示的另一个窗口的类:

class NewActorFrame extends JFrame  implements  ItemListener

{
final String[] typeList = {"Human","Machine","System"};
public JTextField actorNameText = new JTextField();
private JButton btnCreateActor = new JButton("Create");
private  JLabel lblTypeOfActor = new JLabel("Type of actor");
private JComboBox typeOfActor = new JComboBox();
private JPanel topPanel = new JPanel();


public  NewActorFrame()
{

    setTitle( "Create a new actor" );
    setSize( 489, 414 );
    setBackground( Color.gray );
    getContentPane().setLayout( new BorderLayout() );


    topPanel.setLayout( null );
    getContentPane().add( topPanel, BorderLayout.CENTER );

    // Create a combobox where the user can choose the type of actor         to      be created  
    typeOfActor.setBounds( 140, 109, 260, 20 );
    topPanel.add( typeOfActor );

    // Populate the combobox list
    for( int countTypes = 0; countTypes < typeList.length; countTypes++ ){
     typeOfActor.addItem( typeList[countTypes] );
    }
    //  Disable edits - the user can not add other types of actors
    typeOfActor.setEditable( false);
    lblTypeOfActor.setBounds(12, 112, 121, 15);
    topPanel.add(lblTypeOfActor);

    JLabel lblNameOfActor = new JLabel("Name of Actor");
    lblNameOfActor.setBounds(12, 155, 121, 15);
    topPanel.add(lblNameOfActor);

    actorNameText.setBounds(140, 153, 225, 19);
    topPanel.add(actorNameText);
    actorNameText.setColumns(10);  

    btnCreateActor.setBounds(293, 229, 117, 25);
    topPanel.add(btnCreateActor);


    // Watch for changes
    typeOfActor.addItemListener( this );


    btnCreateActor.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
           okButtonAction();
        }
     });



}




public void itemStateChanged( ItemEvent event )
{
    if( event.getSource() == typeOfActor
            && event.getStateChange() == ItemEvent.SELECTED )
    {
        System.out.println( "Change:"
                        + typeOfActor.getSelectedItem() );
    }
}

 public String getFieldText() {
      return actorNameText.getText();
   }

 private void okButtonAction() {

     System.out.println(getFieldText());
     System.out.println("Create pressed");
     this.dispose();
    }
 }
使用此代码,当我导航到菜单并选择new actor时,会弹出窗口,输入名称值,但按下按钮后,不会显示任何文本。我注意到,如果我再次执行此创建操作,并按下菜单上的Actor,我将从上一个文本字段中获取值。这不是我想要的


感谢你们所有试图帮助我的人

为什么要传输任何有用的信息?在用户有机会与第二个窗口交互之前,您会立即在第二个窗口显示时请求信息,以便向其中输入信息。因此,您当前的行为,即没有数据被传递,应该不会令人惊讶

如何解决这个问题?第二个窗口应该是一个模态对话框,比如模态JDialog,而不是Andrew Thompson在评论中告诉您的另一个JFrame。这样,来自调用类的程序流将停止,直到对话框窗口被处理完毕并且不再可见

请注意,同样的问题会一次又一次地被问到,如果你做一点挖掘,你会发现DUP和一次又一次给出的相同答案。

1请看2个Java GUI必须在不同的操作系统、屏幕大小、屏幕分辨率等上工作,在不同的地区使用不同的PLAF。因此,它们不利于像素完美布局。相反,使用布局管理器,或者与布局填充和边框一起使用。感谢所有试图提供帮助的人!谢谢你的提问!等待什么你的问题是怎么做??如果是,请将其添加为一个。如果没有,请考虑一个特定的问题并执行相同的编辑。顺便说一句,NewActorFrame应该是NewActorDalDialog,它不应该扩展任何内容,而是使用JDialog的标准实例。。