我有两个 Jtabbedpane,一个是我的 Jtable 和我的 Jbutton(添加、更新、删除),我想要的是,当我单击“添加”时,会生成一个动态表单。假设我的表中有来 self 的数据库的 4 个列,当我单击“添加”时,必须生成 4 个标签和 4 个 Jtextfield。我试图在我的 Tabbed Pane 中创建一个 Jlabel 进行测试,但这没有用
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
jTabbedPane1.setSelectedComponent(jPanel2);
JLabel label1 = new JLabel("Test");
jPanel2.add(label1);}
最佳答案
如果您的面板(或任何容器,实际上)在您向其添加另一个组件时已经显示,那么您需要 revalidate和 repaint您的面板,因为组件的层次结构在 add 上无效方法调用。
另一方面,在这种特殊情况下,我会使用模态对话框来显示新项目的表单。参见 How to Make Dialogs教程。
编辑
基于此评论:
My request is just how i can generate dynamicaly a number x of form fields by getting x number of columns from my DB.
有几种方法可以实现这一点,但您可以制作一个可重用的类来帮助您。您应该提出的主要问题是您需要多少字段以及这些字段的标签是什么。一旦你找到了这个问题的答案,你就可以使用这样的东西:
public class FormGenerator {
private Map<String, String> data;
private JPanel panel;
public FormGenerator(List<String> formLabels) {
super();
initMap(formLabels);
initPanel(formLabels);
}
private void initMap(List<String> formLabels) {
data = new HashMap();
for (String label : formLabels) {
data.put(label, "");
}
}
private void initPanel(List<String> formLabels) {
int numberOfFields = formLabels.size();
panel = new JPanel(new GridLayout(numberOfFields, 2, 6, 6));
for (String fieldLabel : formLabels) {
JLabel label = new JLabel(fieldLabel);
label.setHorizontalAlignment(JLabel.TRAILING);
panel.add(label);
JTextField textField = new JTextField(15);
textField.putClientProperty("Textfield.For.Field", fieldLabel);
panel.add(textField);
}
}
public Map<String, String> getDataFromTextFields() {
for (Component comp : panel.getComponents()) {
if (comp instanceof JTextField) {
JTextField textField = (JTextField)comp;
String key = (String)textField.getClientProperty("Textfield.For.Field");
String value = textField.getText().trim();
data.put(key, value);
}
}
return data;
}
public JPanel getPanel() {
return panel;
}
}
请注意,底层数据结构可以是 map 或满足您要求的任何内容。这个 FormGenerator
类可以很容易地与 JOptionPane
结合使用。如以下代码片段所示:
// You have to figure out formLabels list
// The same column identifiers in your table maybe?
FormGenerator formGenerator = new FormGenerator(formLabels);
JPanel formPanel = formGenerator.getPanel();
int option = JOptionPane.showConfirmDialog(null
, formPanel
,"Add item"
, JOptionPane.OK_CANCEL_OPTION
, JOptionPane.PLAIN_MESSAGE);
if (option == JOptionPane.OK_OPTION) {
Map<String, String> data = formGenerator.getDataFromTextFields();
for (String key : data.keySet()) {
System.out.println(String.format("%1s : %2s", key, data.get(key)));
}
}
关于java - 通过 Jbutton 在 Jtabbed Pane 中创建动态表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25526374/