Java 从另一个方法更改Jlabel的文本

Java 从另一个方法更改Jlabel的文本,java,swing,jlabel,textlabel,Java,Swing,Jlabel,Textlabel,我很抱歉,如果这个问题的解决方案是显而易见的,我相信这个解决方案很简单,我只是无法在我的脑海中找到正确的答案 我已经创建了JFrame,如下代码所示。我希望在我的主要方法中更改标签(lblStatus)的文本,但我似乎无法使其正常工作。我是否需要创建标签的新实例或沿着这些线的其他内容 有人能告诉我该采取什么方法吗 问候,, 丹 注意-我删除了一些内容以突出显示相关代码 public class server { private JFrame frmCorbaServer; /** * La

我很抱歉,如果这个问题的解决方案是显而易见的,我相信这个解决方案很简单,我只是无法在我的脑海中找到正确的答案

我已经创建了JFrame,如下代码所示。我希望在我的主要方法中更改标签(lblStatus)的文本,但我似乎无法使其正常工作。我是否需要创建标签的新实例或沿着这些线的其他内容

有人能告诉我该采取什么方法吗

问候,, 丹

注意-我删除了一些内容以突出显示相关代码

public class server {

private JFrame frmCorbaServer;

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

    // SERVER CONTENT
        // If connection made
        System.out.println("Server connected"); // I want this to display in lblStatus!


}

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

/**
 * Initialize the contents of the frame.
 */
private void initialize() {
    frmCorbaServer = new JFrame();
    frmCorbaServer.setTitle("server 0.1");
    frmCorbaServer.setResizable(false);
    frmCorbaServer.setBounds(100, 100, 257, 153);
    frmCorbaServer.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frmCorbaServer.getContentPane().setLayout(null);

    JLabel lblStatus = new JLabel("...");
    lblServant.setFont(new Font("Tahoma", Font.PLAIN, 10));
    lblServant.setBounds(10, 36, 231, 14);
    frmCorbaServer.getContentPane().add(lblServant);
}

}

JLabel应该是实例成员。处理程序将帮助您在实例方法中修改标签的文本

public class server
{
   private JLabel lblStatus= new JLabel("Text") ; 

   public void changeLabel(String text) 
   {
     lblStatus.setText(text) ;
   } 

}
主界面中:
window.changelab(“主界面中”)

必须这样做,因为在初始化方法中,对
lblStatus
的引用丢失

private void initialize() {
    frmCorbaServer = new JFrame();
    frmCorbaServer.setTitle("server 0.1");
    frmCorbaServer.setResizable(false);
    frmCorbaServer.setBounds(100, 100, 257, 153);
    frmCorbaServer.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frmCorbaServer.getContentPane().setLayout(null);

    JLabel lblStatus = new JLabel("..."); // Forgotten when method finishes
    lblServant.setFont(new Font("Tahoma", Font.PLAIN, 10));
    lblServant.setBounds(10, 36, 231, 14);
    frmCorbaServer.getContentPane().add(lblServant);
}

JLabel应该是实例成员。处理程序将帮助您在实例方法中修改标签的文本

public class server
{
   private JLabel lblStatus= new JLabel("Text") ; 

   public void changeLabel(String text) 
   {
     lblStatus.setText(text) ;
   } 

}
主界面中:
window.changelab(“主界面中”)

必须这样做,因为在初始化方法中,对
lblStatus
的引用丢失

private void initialize() {
    frmCorbaServer = new JFrame();
    frmCorbaServer.setTitle("server 0.1");
    frmCorbaServer.setResizable(false);
    frmCorbaServer.setBounds(100, 100, 257, 153);
    frmCorbaServer.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frmCorbaServer.getContentPane().setLayout(null);

    JLabel lblStatus = new JLabel("..."); // Forgotten when method finishes
    lblServant.setFont(new Font("Tahoma", Font.PLAIN, 10));
    lblServant.setBounds(10, 36, 231, 14);
    frmCorbaServer.getContentPane().add(lblServant);
}

我不熟悉CORBA编程,所以只能给出一些一般性的建议。首先,您需要知道服务器何时连接。这很可能不会发生在
main()
方法中。是否有一个侦听器或其他回调方法被调用以通知您服务器已连接

一旦您了解了这一部分,更改JLabel的文本就相当容易了。首先,您需要声明一个实例变量:

private JLabel lblStatus;
initialize()
中创建JLabel时,不需要声明:

lblStatus = new JLabel("...");
最后,当您知道服务器已连接时,只需调用
setText()
方法:

lblStatus.setText("Server connected");

我不熟悉CORBA编程,所以只能给出一些一般性的建议。首先,您需要知道服务器何时连接。这很可能不会发生在
main()
方法中。是否有一个侦听器或其他回调方法被调用以通知您服务器已连接

一旦您了解了这一部分,更改JLabel的文本就相当容易了。首先,您需要声明一个实例变量:

private JLabel lblStatus;
initialize()
中创建JLabel时,不需要声明:

lblStatus = new JLabel("...");
最后,当您知道服务器已连接时,只需调用
setText()
方法:

lblStatus.setText("Server connected");

谢谢你的快速回复。然而,我得到了一个错误。“无法对非静态方法进行静态引用”只有main是静态的。我正在呼叫服务器。主界面中的changeLabel(“已连接”)
窗口无法解析。
:/。我真的需要复习一下我的基本java技能。它位于
run()
中,如代码所示。我正在调用主窗口中的
window.changelevel(“”
)。我应该在run之外创建一个窗口变量吗?请注意,我在Eclipse中使用WindowBuilder构建了这个GUI。我不认为这会让事情变得如此糟糕。在EventQueue.InvokeLater之前,在main中使用server window=null。然后,内部类应该能够访问它。它也将在主屏幕上显示。谢谢您的快速回复。然而,我得到了一个错误。“无法对非静态方法进行静态引用”只有main是静态的。我正在呼叫服务器。主界面中的changeLabel(“已连接”)
窗口无法解析。
:/。我真的需要复习一下我的基本java技能。它位于
run()
中,如代码所示。我正在调用主窗口中的
window.changelevel(“”
)。我应该在run之外创建一个窗口变量吗?请注意,我在Eclipse中使用WindowBuilder构建了这个GUI。我不认为这会让事情变得如此糟糕。在EventQueue.InvokeLater之前,在main中使用server window=null。然后,内部类应该能够访问它。如果可能的话,你能举一个与我的代码相关的例子吗?从上面你可以看到。我在这方面有很多问题。如果可能的话,你能举一个与我的代码相关的例子吗?从上面你可以看到。我在这方面有很多麻烦。