Java 将文本从一个JFrame传输到另一个JFrame(在代码中找不到我的错误)
我正在构建一个应用程序,我想“传输”文本字段的内容,但我做了一些错误的事情,我无法找到原因 这是我的主框架代码。当用户导航到file new Actor时,会弹出一个框架,用户必须在其中输入一些信息。我想在这种情况下将此信息从文本字段传输到主框架上的文本字段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
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的标准实例。。