Java:无法在另一个java文件中更改JFrame组件的内容

时间:2017-07-27 07:28:35

标签: java jframe

我有这个问题:

  • 我有一个JFrame GUI类GUIView.java:

         public class GUIView extends JFrame{ 
    
            //other instance variables
            ....
            public JTextArea gameGuide; 
    
            //constructor
            public GUIView(){ 
                ...
                initGUI();
    
            } 
            //init GUI
            public void initGUI(){
                //add other components
                ... 
                gameGuide = new JTextArea(); 
    
                //set layout 
                ...
                add(gameGuide);
            }
           public void setText(String s){
                this.gameGuide.setText(s);
           }
    
           public void showGame(){
                GUIView f = new GUIView() ; 
                f.setSize(450,600); 
                f.setTitle("TIC TAC TOE ONLINE");
                f.setResizable(false);
                f.setLocationRelativeTo(null);
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
                f.setVisible(true); 
            }
       }
    

    - 然后我有一个名为Worker.java的文件

    public class Worker { 
        public GUIView guiView; 
    
        public Worker(GUIView guiView) {
            this.guiView= guiView; 
        }
    
        public static void main(String[] args){
            GUIView guiView = new GUIView();
            Worker worker = new Worker(guiView);
            guiView.setText("testing if this will work");
            guiView.showGame();
        } }
    

GUI工作,它显示一个空白的游戏指南文本区域。

在Worker.java中,我尝试更改gameGuide的内容,但gameGUI.setText()中的字符串没有显示出来。

我试过设置可见真 - > false - >是的,仍然没有奏效。

请解释原因?有没有办法可以在Worker.java中更改组件gameGuide textArea的内容?

2 个答案:

答案 0 :(得分:2)

这可能会有所帮助。实际上,创建了两个不同的GUIView JFrame。

fucs[commandID](arg1, arg2);

答案 1 :(得分:1)

您每次都在GUIView方法中创建一个新的showGame()。无论你之前在另一个上面设置了什么,你总会看到那个。

public static void main(String[] args){
    GUIView guiView = new GUIView(); // creates a GUIView
    Worker worker = new Worker(guiView);
    guiView.setText("testing if this will work"); // changes the created GUIView
    guiView.showGame(); // creates an entirely new GUIView and shows that one instead
}