Java 动态创建Jlabel的对齐
我试图动态创建jlabels和jtextfields,然后将它们添加到jPanel中,用户可以在其中将数据插入数据库中的表中 我从数据库中检索所有表属性的名称,然后我必须为每个名称创建一个jlabel和一个jtext。其结果应如下所示(仅当jpanel底部没有更多空间时,才应创建标签5): 我试着使用GroupLayout和SequentialGroup,但我没有达到任何类似的效果。我完成了一件我无法理解和解决的非常尴尬的事情 名为“ESTADO”的标签应位于“SIGLA”标签下方,带有“插入表格”的标签应位于屏幕左侧,如第一幅图像所示 我的代码是:Java 动态创建Jlabel的对齐,java,swing,jlabel,jtextfield,grouplayout,Java,Swing,Jlabel,Jtextfield,Grouplayout,我试图动态创建jlabels和jtextfields,然后将它们添加到jPanel中,用户可以在其中将数据插入数据库中的表中 我从数据库中检索所有表属性的名称,然后我必须为每个名称创建一个jlabel和一个jtext。其结果应如下所示(仅当jpanel底部没有更多空间时,才应创建标签5): 我试着使用GroupLayout和SequentialGroup,但我没有达到任何类似的效果。我完成了一件我无法理解和解决的非常尴尬的事情 名为“ESTADO”的标签应位于“SIGLA”标签下方,带有“插
ArrayList<String[]> tableAtts = sql.getTableAttributeNames(table);
javax.swing.GroupLayout jPDataInsertionLayout = new javax.swing.GroupLayout(jPDataInsertion);
jPDataInsertion.setLayout(jPDataInsertionLayout);
GroupLayout.SequentialGroup shgp = jPDataInsertionLayout.createSequentialGroup();
GroupLayout.SequentialGroup svgp = jPDataInsertionLayout.createSequentialGroup();
jPDataInsertionLayout.setHorizontalGroup(
jPDataInsertionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
.addGroup(shgp));
jPDataInsertionLayout.setVerticalGroup(
jPDataInsertionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
.addGroup(svgp));
//shgp.addContainerGap();
svgp.addContainerGap().addComponent(jLInsertingTable);
for (String[] values : tableAtts) {
JLabel jLTableAtt = new JLabel(values[0]);
JTextField jTFTableAtt = new JTextField();
jTFTableAtt.setColumns(13);
shgp.addComponent(true,jLTableAtt)
.addGap(18, 18, 18)
.addComponent(jTFTableAtt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE);
svgp.addGap(18, 18, 18)
.addGroup(jPDataInsertionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLTableAtt, javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jTFTableAtt,javax.swing.GroupLayout.Alignment.BASELINE ,javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE));
}
shgp.addComponent(jLInsertingTable);
ArrayList tableAtts=sql.getTableAttributeNames(表);
javax.swing.GroupLayout jPDataInsertionLayout=newjavax.swing.GroupLayout(jPDataInsertion);
setLayout(jPDataInsertionLayout);
GroupLayout.SequentialGroup shgp=jPDataInsertionLayout.createSequentialGroup();
GroupLayout.SequentialGroup svgp=jPDataInsertionLayout.createSequentialGroup();
jPDataInsertionLayout.setHorizontalGroup(
jPDataInsertionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
.addGroup(shgp));
jPDataInsertionLayout.setVerticalGroup(
jPDataInsertionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
.addGroup(svgp));
//shgp.addContainerGap();
svgp.addContainerGap().addComponent(jLInsertingTable);
for(字符串[]值:tableAtts){
JLabel jLTableAtt=新的JLabel(值[0]);
JTextField jTFTableAtt=新的JTextField();
jTFTableAtt.setColumns(13);
shgp.addComponent(true,jLTableAtt)
.addGap(18,18,18)
.addComponent(jTFTableAtt,javax.swing.GroupLayout.PREFERRED\u SIZE,javax.swing.GroupLayout.DEFAULT\u SIZE,javax.swing.GroupLayout.PREFERRED\u SIZE);
svgp.addGap(18,18,18)
.addGroup(jPDataInsertionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLTableAtt、javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jTFTableAtt,javax.swing.GroupLayout.Alignment.BASELINE,javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE));
}
shgp.addComponent(jLInsertingTable);
编辑:
根据#rcook所说的,我改变了小组,并设法创建了我想要的。
以下是我设法创建的代码:
ArrayList<String[]> tableAtts = sql.getTableAttributeNames(table);
ArrayList<JLabel> attLabels = new ArrayList<>();
ArrayList<JTextField> attFields = new ArrayList<>();
javax.swing.GroupLayout jPDataInsertionLayout = new javax.swing.GroupLayout(jPDataInsertion);
jPDataInsertion.setLayout(jPDataInsertionLayout);
GroupLayout.SequentialGroup hsg = jPDataInsertionLayout.createSequentialGroup();
ArrayList<String[]> tempTableAtt = new ArrayList<>(tableAtts);
for(int i = 0; (!tempTableAtt.isEmpty()) && i < COLUMN_SIZE ; i++){
GroupLayout.ParallelGroup innerhpg = jPDataInsertionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false);
for(int j = 0; (!tempTableAtt.isEmpty()) && j < ROW_SIZE ; j++){
String[] att = tempTableAtt.get(0);
GroupLayout.SequentialGroup innerhsg = jPDataInsertionLayout.createSequentialGroup();
JLabel jLTableAtt = new JLabel(att[0]);
JTextField jTFTableAtt = new JTextField();
jTFTableAtt.setColumns(13);
attLabels.add(jLTableAtt);
attFields.add(jTFTableAtt);
innerhsg.addComponent(jLTableAtt)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jTFTableAtt);
innerhpg.addGroup(javax.swing.GroupLayout.Alignment.LEADING, innerhsg);
tempTableAtt.remove(att);
}
hsg.addGap(18,18,18).addGroup(innerhpg);
}
jPDataInsertionLayout.setHorizontalGroup(
jPDataInsertionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPDataInsertionLayout.createSequentialGroup()
.addContainerGap()
.addGroup(jPDataInsertionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLInsertingTable)
.addGroup(hsg))));
GroupLayout.SequentialGroup vsg = jPDataInsertionLayout.createSequentialGroup();
vsg.addContainerGap()
.addComponent(jLInsertingTable);
for(int i = 0; i < tableAtts.size() && i < ROW_SIZE; i++){
GroupLayout.ParallelGroup vpg = jPDataInsertionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE);
vpg.addComponent(attLabels.get(i))
.addComponent(attFields.get(i), javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE);
for(int j = 0; (tableAtts.size() > ROW_SIZE) && ((i+(ROW_SIZE*(j+1))) < tableAtts.size()) && j < COLUMN_SIZE; j++){
vpg.addComponent(attLabels.get(i+(ROW_SIZE*(j+1))))
.addComponent(attFields.get(i+(ROW_SIZE*(j+1))), javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE);
}
vsg.addGap(18, 18, 18).addGroup(vpg);
}
jPDataInsertionLayout.setVerticalGroup(
jPDataInsertionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(vsg));
ArrayList tableAtts=sql.getTableAttributeNames(表);
ArrayList attLabels=新的ArrayList();
ArrayList attFields=新的ArrayList();
javax.swing.GroupLayout jPDataInsertionLayout=newjavax.swing.GroupLayout(jPDataInsertion);
setLayout(jPDataInsertionLayout);
GroupLayout.SequentialGroup hsg=jPDataInsertionLayout.createSequentialGroup();
ArrayList TestableAtt=新的ArrayList(tableAtts);
对于(inti=0;(!tettableatt.isEmpty())和&i行大小)和((i+(行大小*(j+1))
我不知道这是否是最好的解决方案,但它是有效的 为了使第一列标签一列接一列,那么所有这些标签都需要在一个平行组中。您的代码创建了pa