0

ショーのボタンがクリックされたときにラベルを表示したいのですが、機能しません!

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

3 に答える 3

5

パネルにラベルを追加した後、フレームを呼び出して、新しいコンポーネントに合わせてフレームのサイズを変更する必要がありrevalidate()ます。repaint()pack()

于 2013-07-09T20:01:54.767 に答える
5

ActionListener インターフェイスを実装していません

編集:更新されたコードは、あなたが持っていることを示しています。Hovercraft Full Of Eels が示唆するように、次のステップはデバッグ手法を使用して問題を切り分けることです。

于 2013-07-09T19:45:27.707 に答える
4

myPanel() を2 回呼び出しており、これを行うことで、GUI に追加されない JPanel に JLabels を追加しています。

解決策:これをしないでください。myPanel()JPanelを返し、同時にクラスフィールドパネルも設定するので、あなたは最初はちょっと厄介です。したがって、パネル変数を一度設定してから、変数を使用します。

revalidate()そして、はい、repaint()Azad の推奨に従ってコンポーネントを追加した後のコンテナ (彼には 1+)。

于 2013-07-09T20:02:40.763 に答える