在我的应用程序中,执行db查询。该查询获取表的列名称。我想根据我的数据库的列名创建一个jlabel和jtextfield。如果按下提交按钮,则获取其值。任何帮助赞赏。谢谢。
我已尝试过以下代码..但没有运气..
public void getColumn(){
String sql = "SELECT * from user";
try {
pst = conn.prepareStatement(sql);
rs = pst.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
int count = 1;
ArrayList<String> columns= new ArrayList<String>();
for(int i = 1; i<= columnCount; i++){
columns.add(rsmd.getColumnName(i));
/ System.out.println(String.valueOf(columns));
}
ArrayList<JTextField> fields = new ArrayList<JTextField>();
for(int i = 0; i <columns.size();i++){
JLabel jl = new JLabel(String.valueOf(columns.get(i)));
jp.add(jl);
JTextField f = new JTextField(String.valueOf(columns.get(i)));
fields.add(f);
jp.add(f);
this.revalidate();
this.repaint();
}
我不需要在JTable中输出我的查询。我只需要在我的数据库中使用我的列名,然后在运行时根据它创建一个jlabel和jtextfield。
作为一个例子。
这是我的用户表..
id | fName | mName | lName
如果我点击一个按钮...... 结果将是这个..
id | ___________________
Name | _______________
mName | _______________
lName | _______________
引用文本框的行...
答案 0 :(得分:1)
使用JTable代替JLabel s / JTextField s
来自JDBC的输出可能是艰难而且很长的事件,那么你可能会问Concurency in Swing,Swing Gui可能会冻结或者可能对鼠标/键事件不负责任,直到JDBC结束
Swing是单线程的,所有输出到Swing GUI必须在Event Dispatch thread完成,Swing与此视图不同步,所有更新都在一瞬间完成
答案 1 :(得分:0)
我已经解决了我的问题。
过去两天这个问题一直困扰着我。最后,经过大量的反复试验,我意识到这是一个关于选择正确的LayoutManager的问题。
默认情况下,在NetBeans中添加拖放的容器(即JPanel,JScrollPanel)使用GroupLayout。因此,如果您尝试将新的运行时生成的组件添加到这些容器中,它们将不会显示。
要解决此问题,请重置布局管理器。到目前为止,GridLayout和FlowLayout管理器运行良好。
jpanel.setLayout(new GridLayout());
而且,这解决了我的问题。