java setText 在 JLabel 中不起作用



尝试在 JLabel 中显示 sql 结果。我正在使用 netbeans,因此它可以为 swing 组件自动生成代码。

Welcome_screen.java、主要方法

package my.welcomescreen;
import java.io.InputStream;
import java.sql.*;
import javax.swing.*;
public class Welcome_screen extends javax.swing.JFrame {
  public Welcome_screen() {
    initComponents();
  }
  private void initComponents() {
    jLabel9 = new javax.swing.JLabel();
  }
  public static void main(String args[]) {
    Welcome_screen courses = new Welcome_screen();
    courses.getCourses();

    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new Welcome_screen().setVisible(true);
         }
      });
   }
  public void getCourses(){
    db obj = new db();
    obj.dbconnect();
    String Query = "select * from courses";
    try{
        Connection con = obj.dbconnect();
        Statement st = con.createStatement();
        ResultSet rs = st.executeQuery(Query);
        if(rs.next()){
            //System.out.println(rs.getString("name"));
            jLabel9.setText(rs.getString("name"));
        }

    }catch(Exception e){
        System.out.println(e);
    }

}
private javax.swing.JLabel jLabel9;
}

数据库.java,数据库连接文件。

package my.welcomescreen;
import java.sql.*;
public class db {
    public static Connection dbconnect(){
        Connection con=null;
         try {
          Class.forName("com.mysql.jdbc.Driver");
          con = DriverManager.getConnection("jdbc:mysql://localhost/st2", "root", "");

    }
      catch (ClassNotFoundException | SQLException e){
      System.out.println(e);
  }
     return con; 
 }
}

当我将SQL结果打印到命令行时,它可以工作。 显示预期结果。但是在JLabel中什么都没有发生。甚至没有发生错误。我找不到问题所在。一点帮助将不胜感激!

首先:

你必须把JLABEL放在框架上:

getContentpane().add(label9);

之后,我建议看看以下方法:

rame.setSize(width, height);
Frame.getContentPane();
Container/JComponent.add(Component c);
Component.setLayout(LayountManager manager);

我建议观看更多视频或阅读有关Swing bevore的博客。但这是你应该使用的代码:

private void initComponents() {
    label9 = new JLabel();
    label9.setText("SOME TEXT");
    JPanel p = new JPanel();
    p.setSize(100, 50);
    p.setLayout(new FlowLayout());
    p.add(jLabel9);
    p.setVisible(true);
    setSize(200, 200);
    getContentPane().add(p);
}

尝试致电

jlabel9.setText("Your readen text!");
jlabel9.repaint();

它将重新绘制标签并更新内容。

您需要

在jPanel上找到jLabel9,然后在Frame上找到它。一种方法是使用构造函数。由于您的类是从 JFrame 扩展而来的,因此您无需使用 this.add()JFrame jf = new JFrame();

private void initComponents() {
    jLabel9 = new javax.swing.JLabel();
    jLabel9.setBackground(Color.red);
    jLabel9.setVisible(true);
    jLabel9.setText("Hello");
    JPanel jp = new JPanel();
    jp.setSize(100, 50);
    jp.add(jLabel9);
    jp.setVisible(true);
    setSize(200, 200);
    add(jp);
    setVisible(true);
}

或直接在JFrame

private void initComponents() {
    jLabel9 = new javax.swing.JLabel();
    jLabel9.setBackground(Color.red);
    jLabel9.setVisible(true);
    jLabel9.setText("Hello");
        setSize(200, 200);
        add(jLabel9);
// one of other way to use contentpane
// getContantPane().add(jLabel9);
        setVisible(true);
    }

请像这样尝试 -

jlabel.setText("Your Text");
jLabel.setVisisble(true);

最新更新