Java:Swing问题中JLabel上的setText

时间:2011-07-25 03:29:56

标签: java swing awt jlabel

我在使用类中的方法设置JLabel的文本时遇到问题,该方法从调用该方法的其他类创建GUI。设置JLabel的方法在GUI外部调用,但是当从GUI类中调用时,它可以工作。从GUI类外部调用后,我在标签上测试了getText()方法,并显示标签已更新。我知道它可能是Swing的油漆问题或更新问题,但我不知道该怎么做。我在标签上尝试了repaint()revalidate(),然后在它内部的面板上尝试了public void setStatusLabel(String statusEntered) { //Shows the variable statusEntered has been received System.out.println(statusEntered); //Not working status_label.setText(statusEntered); //Used this to check if the label receives the data. It does. String status = status_label.getText(); System.out.println(status); } //GUI Class reference MainWindow mainwindow = new MainWindow(); public void connect(){ Connection conn = null; try { String userName = "root"; String password = ""; String url = "jdbc:mysql://localhost:3306"; Class.forName("com.mysql.jdbc.Driver").newInstance(); conn = DriverManager.getConnection(url, userName, password); //This works System.out.println("Connection Established"); //The issue is with this guy mainwindow.setStatusLabel("Connection"); } catch(Exception e) { System.err.println("Failed to connect to database"); mainwindow.setStatusLabel("No connection"); } } 。这是我目前的代码:

public static void main(String[] args) {
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new MainWindow().setVisible(true);
        }
    });
}

我称之为的背景。设置数据库连接

{{1}}

对此的任何帮助都很棒,或者如果你有一些建议的链接,那也很棒!谢谢你的帮助。

这是我的主要内容:

{{1}}

2 个答案:

答案 0 :(得分:5)

您的问题可能是引用之一 - 您的GUI类中的mainwindow变量可能不是指正在显示的MainWindow对象。您是否在代码中的任何其他地方致电new MainWindow();?如果是这样,那么你最好将对可视化MainWindow的引用传递到上面的这个类中,这样你就可以调用它上面的方法来产生可以看到的东西。

例如,

public class DatabaseConnection {
   // MainWindow mainwindow = new MainWindow();  *** don't do this ***
   MainWindow mainwindow;

   public DatabaseConnection(MainWindow mainwindow) {
      this.mainwindow = mainwindow; // pass in the reference in the constructor
   }

   public void connect() {
      Connection conn = null;

      // ... etc

      // now we can call methods on the actual visualized object
      mainwindow.setStatusLabel("Connection");
   }

答案 1 :(得分:3)

我试图做的是,你返回连接状态并将其打印在mainWindow status_jlable上,这里你不需要传递数据库类中主窗口的引用你只需要返回连接状态这就是你所需要的一切。

public class MainWindows extends JFrame {

    private JLabel status_label;
    public MainWindows(){
        status_label  = new JLabel("Status");
    }

    public void setStatusLabel(String staus){
        status_label.setText(staus);    
    }
    /*.
     * 
     * your code for visualizing 
    .
    .
    .
    .
    .
    .*/

    public static void main(String args[]){
        MainWindows mw = new MainWindows();

        //this will return true if the connection will estblished and will false if not
        mw.setStatusLabel("Connection established "+ new DatabaseConnection().connect());

    }

}

/////////////数据库类

   public class DatabaseConnection{


        public boolean connect(){
            Connection conn = null;


            // adding this new variable to get connection status;
            boolean returnStatus = false;  //default return false if connection established it will true .
            try {
                String userName = "root";
                String password = "";
                String url = "jdbc:mysql://localhost:3306";
                Class.forName("com.mysql.jdbc.Driver").newInstance();
                conn = DriverManager.getConnection(url, userName, password);

                //This works
                System.out.println("Connection Established");
                //The issue is with this guy
                returnStatus = true;  // making status true if connection is established

                return returnStatus;
            }
            catch(Exception e) {
                System.err.println("Failed to connect to database");
                return returnStatus;
            }
        }

    }