Avatar billede pashmak Nybegynder
01. maj 2009 - 08:08 Der er 3 kommentarer

GUI med mulighed for at få vist flere textfields

Hello,

Java + mysql.


Mit spørgsmål er følgende:
>case<
Jeg har en GUI JDialog, hvor man indtaster oplysninger om en person. Idéen er at man også skal kunne indtaste kompetencer for den pågældende person.

Problemet er at jeg på forhånd IKKE ved hvor mange tekstfields til kompetencer en person skal have tilføjet. Hvis fx Person A har 11 kompetencer som skal tastes ind.

Jeg har kompetence feltet som ArrayList, og idéen er så at kunne få lagret alle indtastninger ind i ArrayListen, så jeg enkeltvis kan få dem ind som rækker i mysql tabel.

>spørgsmål<
Spørgsmålet er bare hvordan man i GUI med JDialog kan gøre det muligt at bestemme hvor mange felter(til udfyldning af kompetencer) man ønsker for den pågældende person. Er det fx muligt at klikke på et PLUS(+) ikon, som så åbner et nyt felt under? Eller er der en anden løsning?



På forhånd tak
Avatar billede arne_v Ekspert
01. maj 2009 - 15:16 #1
Det er relativt nemt at tilfoeje JTextField's dynamisk. De skal bare addes til de component de ligger paa og saa skal den repainte.
Avatar billede arne_v Ekspert
02. maj 2009 - 03:35 #2
Demo:

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class DynField extends JFrame implements ActionListener {
    private JPanel fpanel;
    private List<JTextField> allf;
    private JButton add;
    private JButton get;
    public DynField() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setLayout(new BorderLayout());
        setTitle("Demo of adding fields");
        fpanel = new JPanel();
        getContentPane().add(fpanel, BorderLayout.CENTER);
        allf = new ArrayList<JTextField>();
        JPanel btns = new JPanel();
        btns.setLayout(new FlowLayout());
        add = new JButton("+");
        add.addActionListener(this);
        btns.add(add);
        get = new JButton("Test");
        get.addActionListener(this);
        btns.add(get);
        getContentPane().add(btns, BorderLayout.SOUTH);
        addfield();
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == add) {
            addfield();
        } else if(e.getSource() == get) {
            List<String> res = new ArrayList<String>();
            for(JTextField f : allf) {
                res.add(f.getText());
            }
            JOptionPane.showMessageDialog(this, res);
        }
    }
    private void addfield() {
        int n = allf.size() + 1;
        JTextField f = new JTextField();
        f.setColumns(50);
        JPanel tmp = new JPanel();
        tmp.setLayout(new BorderLayout());
        tmp.add(f, BorderLayout.CENTER);
        tmp.add(new JLabel("Data #" + n + ": "), BorderLayout.WEST);
        fpanel.setLayout(new GridLayout(n, 2));
        fpanel.add(tmp);
        fpanel.repaint();
        allf.add(f);
        pack();
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JFrame f = new DynField();
                f.setVisible(true);
            }
        });
    }
}
Avatar billede arne_v Ekspert
04. juli 2009 - 04:49 #3
OK ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester