2013-07-09 58 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()以調整框架的大小以適應新組件。