Java 单击按钮时不显示JLabel

Java 单击按钮时不显示JLabel,java,swing,jlabel,Java,Swing,Jlabel,我想在单击“显示”按钮时看到标签,但不起作用 public class d4 extends JFrame implements ActionListener { Connection con; String dbName = "mydb"; String bdUser = "root"; String dbPassword = "2323"; String dbUrl = "jdbc:mysql://localhost/mydb"; JButton showButton; static JL

我想在单击“显示”按钮时看到标签,但不起作用

public class d4 extends JFrame implements ActionListener {

Connection con;
String dbName = "mydb";
String bdUser = "root";
String dbPassword = "2323";
String dbUrl = "jdbc:mysql://localhost/mydb";
JButton showButton;
static JLabel[] lbl;
JPanel panel;

public d4() {

try {
    con = DriverManager.getConnection(dbUrl, bdUser, dbPassword);
    System.out.println("Connected to database successfully!");

} catch (SQLException ex) {
    System.out.println("Could not connect to database");
}

add(mypanel(), BorderLayout.PAGE_START);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 500);
setLocation(300, 30);
setVisible(true);
pack();
}

public JPanel mypanel() {
panel = new JPanel(new FlowLayout(FlowLayout.LEFT));
showButton = new JButton("Show");
showButton.addActionListener(this);
panel.add(showButton);
revalidate();
repaint();

return panel;
}

@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == showButton) {
            lbl = recordsLabel();
        for(JLabel jlabel : lbl){
            panel.add(jlabel);  
}
}
public JLabel[] recordsLabel() {
try {
    Statement st1 = con.createStatement();
    ResultSet result1 = st1.executeQuery("select * from mytable");
    ArrayList<String> lableList = new ArrayList<>();
    while (result1.next()) {
        String resultRow = result1.getString(1) + " " + result1.getString(2);
        System.out.println(resultRow);
        lableList.add(resultRow);
    }
    Object[] arrayResultRow = lableList.toArray();

    int rows = result1.last() ? result1.getRow() : 0;

    lbl = new JLabel[rows];
    for (int i = 0; i < rows; i++) {
        lbl[i] = new JLabel(arrayResultRow[i].toString());
    }

} catch (SQLException sqle) {
    System.out.println("Can not excute sql statement");
}
return lbl;
}

public static void main(String[] args) {
new d4();
}
}

您尚未实现ActionListener接口

编辑:更新后的代码显示您已完成。现在,正如满是鳗鱼的气垫船所建议的那样,下一步是用调试技术隔离问题。

尝试调用重新验证并在面板添加标签后重新绘制,您还需要在框架上调用pack来调整框架大小以适应新组件。

您调用了两次myPanel,这样做,您正在将JLabel添加到从未添加到GUI的JPanel中

解决方案:不要这样做。您的myPanel一开始就有点古怪,因为它返回一个JPanel,同时还设置了类字段面板。因此,设置面板变量一次,然后使用该变量


是的,在按照Azad的建议1+向容器中添加组件后,重新验证容器并重新喷漆。

每次我看到有人放//怎么办?它完全告诉我你什么都没试过。@t我试过很多次,但都没成功@Tdorno I update code您现在需要进行一些调试以找出错误所在-查看sql语句是否正常工作,JLabel是否正在生成,等等。。。使用调试器检查变量状态,或者使用println语句或日志检查代码关键部分的变量状态。这将更易于阅读,因此有助于正确的代码缩进。您的类声称它实现了它,但实际上没有。-1,这不是OP的需要,很高兴注意到他忘记了实现,但最后,这并不是问题的根源。@HovercraftFullOfEels:很高兴知道这一点,谢谢你的支持,如果他更新他的答案,我将取消反对票,这样,有人来看这个答案时就不会感到困惑了。+1,我想将答案的第一部分添加到我的答案中:。我使用了revalidate和repain方法,并且使用了mypanel一次,现在没有例外,但是标签没有显示@萨贾德:你需要为你自己和我们简化你的问题。创建一个小程序,其中没有数据库代码,但只有虚拟硬编码数据,并尝试使用此小程序在按下按钮时将虚拟数据添加到JLabels。如果它不起作用,那么将新代码作为上述问题的附录发布。请确保只发布格式良好的代码,这样我们就不必费力地阅读和理解它。请注意,您很可能应该在JTable中显示数据库数据,而不是在jlabel中,尤其是当您需要显示多行数据时。@hoverCraftfullOfels这是我第一个用JTable显示数据的程序。@Sajjad-:我不是说代码更少,而是说代码更好,只使用与您的问题相关的代码。您当前的问题不涉及数据库处理,因为您声明该部分正在工作。所以,给我们展示没有任何数据库代码的代码,硬编码的数据,一个我们可以运行、编译的小程序,它向我们展示了你的问题。请注意,您不需要这样做,但如果您这样做,您就有更好的机会获得满意的解决方案-由您决定。