2013-07-09 53 views
0

我想在显示按钮点击时看到标签,但不工作!当鼠标点击按钮时,JLabels不显示

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(); 
} 
} 
+1

每当我看到有人把'//这里有什么?'它完全告诉我你没有尝试过任何东西。 – Tdorno

+0

@Tdorno我试了很多次,但没有工作! – Sajad

+0

@Tdorno我更新了代码 – Sajad

回答

4

你打电话myPanel()两次,通过这样做,您将JLabel添加到永远不会添加到GUI的JPanel。

解决方法:不要这样做。你的myPanel()是一种棘手的开始,因为它返回一个JPanel,并且同时设置类现场面板。因此,设置面板变量一次,然后使用该变量。

是的,revalidate()repaint()根据Azad的建议向其添加组件后的容器(1+给他)。

+0

+1,我的意思是把答案的第一部分加入我的:)。 – Azad

+0

我使用'revalidate()'和'repain()'方法并使用'mypanel()'一次,现在没有例外,但是lables不显示! – Sajad

+1

@Sajjad:你需要为自己和我们简化你的问题。创建一个没有数据库代码的小程序,但只有虚拟硬编码数据,并尝试用这个小程序在按钮按下时将虚拟数据添加到JLabel。如果它不起作用,则将新代码作为上述问题的附录发布。请确保只发布格式良好的代码,这样我们就不用费力阅读和理解它。请注意,很可能您应该在JTable中显示数据库数据,而不是在JLabel中显示数据库数据,尤其是在需要显示多行数据时。 –

5

您还没有实现ActionListener接口

编辑:更新的代码显示了你有。现在正如气垫船Full Of Eels所建议的那样,下一步就是用调试技术来隔离问题。

+0

我执行它,看我的代码 – Sajad

+0

你的类声称它实现它,但它并不真实。 – Richard

+0

@HovercraftFullOfEels我更新了代码... – Sajad

5

尝试在向面板添加标签之后调用revalidate()repaint(),您还需要在框架上调用pack()以调整框架的大小以适应新组件。