简体   繁体   中英

Netbeans/java: retrieving text from JTextField-s that are inside a JTabbedPane

I am a beginner programmer making an application with a JTabbedPane, that has by default only one tab. If the user clicks a "Add tab" button, a new tab is given. The new tab has some jtextfields and comboboxes. I want to get the text from the new tab's components (jtextfields, combobes), but i do not know how to access it. (so that i could use ".getText()" functions)

Also, can you guys give me a hint: what is the fastest/best way to save such text from all tabs to a formatted ".txt" file without hardcoding?

Thanks in advance, if you need more info, i will post it :)

Code for adding new tabs (after button is clicked, new JPanel form is added with some jtextfields):

private void dodajOsebo_buttonActionPerformed(java.awt.event.ActionEvent evt) { 

    int tabNum = OsebniPodatki_TabbedPane.getTabCount() + 1;

    OsebniPodatki_TabbedPane.addTab("Oseba " + tabNum, new PodatkiOStranki());

    PodatkiOPotovanju_TabbedPane.addTab("Oseba " + tabNum, new PodrobnostiPotovanja());

}

Code for one of the custom JPanel forms:

package FRI;


public class PodatkiOStranki extends javax.swing.JPanel {
metode m = new metode();

public PodatkiOStranki() {
    initComponents();
}


private void initComponents() {

    spol_buttonGroup = new javax.swing.ButtonGroup();
    podatki_LABEL = new javax.swing.JLabel();
    Ime_op = new javax.swing.JLabel();
    Priimek_op = new javax.swing.JLabel();
    Spol = new javax.swing.JLabel();
    PotniList_op = new javax.swing.JLabel();
    Naslov_op = new javax.swing.JLabel();
    kraj_op = new javax.swing.JLabel();
    elPosta_op = new javax.swing.JLabel();
    ime_field = new javax.swing.JTextField();
    priimek_field = new javax.swing.JTextField();
    spol_m = new javax.swing.JRadioButton();
    spol_z = new javax.swing.JRadioButton();
    potniList_field = new javax.swing.JTextField();
    naslov_field = new javax.swing.JTextField();
    kraj_field = new javax.swing.JTextField();
    elPosta_field = new javax.swing.JTextField();
    ponastaviVnos_button = new javax.swing.JButton();

    setMaximumSize(new java.awt.Dimension(400, 600));
    setMinimumSize(new java.awt.Dimension(375, 562));
    setPreferredSize(new java.awt.Dimension(375, 562));

    podatki_LABEL.setFont(new java.awt.Font("Lucida Grande", 1, 24)); // NOI18N
    podatki_LABEL.setText("Podatki o stranki");

    Ime_op.setText("Ime:");

    Priimek_op.setText("Priimek:");

    Spol.setText("Spol:");

    PotniList_op.setText("Št. potnega lista:");

    Naslov_op.setText("Naslov:");

    kraj_op.setText("Kraj & poštna št:");

    elPosta_op.setText("E-pošta:");

    ime_field.addKeyListener(new java.awt.event.KeyAdapter() {
        public void keyTyped(java.awt.event.KeyEvent evt) {
            ime_fieldKeyTyped(evt);
        }
    });

    priimek_field.addKeyListener(new java.awt.event.KeyAdapter() {
        public void keyTyped(java.awt.event.KeyEvent evt) {
            priimek_fieldKeyTyped(evt);
        }
    });

    spol_buttonGroup.add(spol_m);
    spol_m.setText("Moški");

    spol_buttonGroup.add(spol_z);
    spol_z.setText("Ženska");

    kraj_field.addKeyListener(new java.awt.event.KeyAdapter() {
        public void keyTyped(java.awt.event.KeyEvent evt) {
            kraj_fieldKeyTyped(evt);
        }
    });

    ponastaviVnos_button.setFont(new java.awt.Font("Lucida Grande", 1, 14)); // NOI18N
    ponastaviVnos_button.setText("Ponastavi vnos");
    ponastaviVnos_button.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            ponastaviVnos_buttonActionPerformed(evt);
        }
    });

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
    this.setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addComponent(podatki_LABEL)
                    .addGap(0, 0, Short.MAX_VALUE))
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(Priimek_op)
                        .addComponent(PotniList_op)
                        .addComponent(Naslov_op)
                        .addComponent(Ime_op)
                        .addComponent(elPosta_op)
                        .addComponent(kraj_op)
                        .addComponent(Spol))
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                        .addComponent(priimek_field)
                        .addComponent(naslov_field)
                        .addComponent(potniList_field)
                        .addComponent(kraj_field)
                        .addGroup(layout.createSequentialGroup()
                            .addComponent(spol_m)
                            .addGap(18, 18, 18)
                            .addComponent(spol_z))
                        .addComponent(ime_field, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 251, Short.MAX_VALUE)
                        .addComponent(elPosta_field, javax.swing.GroupLayout.Alignment.TRAILING))))
            .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        .addGroup(layout.createSequentialGroup()
            .addGap(107, 107, 107)
            .addComponent(ponastaviVnos_button, javax.swing.GroupLayout.PREFERRED_SIZE, 161, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(podatki_LABEL)
            .addGap(18, 18, 18)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(Ime_op)
                .addComponent(ime_field, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addGap(0, 0, 0)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(Priimek_op)
                .addComponent(priimek_field, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addGap(0, 0, 0)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(Spol)
                .addComponent(spol_m)
                .addComponent(spol_z))
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(potniList_field, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(PotniList_op))
            .addGap(0, 0, 0)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(naslov_field, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(Naslov_op))
            .addGap(0, 0, 0)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(kraj_field, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(kraj_op))
            .addGap(0, 0, 0)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(elPosta_field, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(elPosta_op))
            .addGap(75, 75, 75)
            .addComponent(ponastaviVnos_button, javax.swing.GroupLayout.PREFERRED_SIZE, 53, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(183, Short.MAX_VALUE))
    );
}// </editor-fold>                        

private void ime_fieldKeyTyped(java.awt.event.KeyEvent evt) {                                   
    m.preveriVnos(ime_field, evt);
}                                  

private void priimek_fieldKeyTyped(java.awt.event.KeyEvent evt) {                                       
    m.preveriVnos(priimek_field, evt);
}                                      

private void kraj_fieldKeyTyped(java.awt.event.KeyEvent evt) {                                    
    m.preveriVnos(kraj_field, evt);
}                                   

private void ponastaviVnos_buttonActionPerformed(java.awt.event.ActionEvent evt) {                                                     
    m.ponastaviVnosPodatkiOStranki(ime_field, priimek_field, potniList_field, naslov_field, elPosta_field, kraj_field, spol_buttonGroup);
}                                                    


// Variables declaration - do not modify                     
private javax.swing.JLabel Ime_op;
private javax.swing.JLabel Naslov_op;
private javax.swing.JLabel PotniList_op;
private javax.swing.JLabel Priimek_op;
private javax.swing.JLabel Spol;
private javax.swing.JTextField elPosta_field;
private javax.swing.JLabel elPosta_op;
private javax.swing.JTextField ime_field;
private javax.swing.JTextField kraj_field;
private javax.swing.JLabel kraj_op;
private javax.swing.JTextField naslov_field;
private javax.swing.JLabel podatki_LABEL;
private javax.swing.JButton ponastaviVnos_button;
private javax.swing.JTextField potniList_field;
private javax.swing.JTextField priimek_field;
private javax.swing.ButtonGroup spol_buttonGroup;
private javax.swing.JRadioButton spol_m;
private javax.swing.JRadioButton spol_z;
// End of variables declaration                   

}

This depends a lot on how you declare and use your variables.

  1. When a tab is added, do you have a reference to it?
  2. When textfield/comboboxes are added to the tab, do you maintain their references? You can use a list of jtextfield references in order to get their text.

For the second part, if you have a reference to the tab you can iterate over its child component (been long, but i think the method could be getComponents()) and check if each is of type JTextField.

Well based on your custom jpanels:

  1. You would probably define a method there:

    public void getContent() { String text = naslov_field.getText(); text += kraj_field.getText(); }

  2. Instead of

    private void dodajOsebo_buttonActionPerformed(java.awt.event.ActionEvent evt) {

     int tabNum = OsebniPodatki_TabbedPane.getTabCount() + 1; OsebniPodatki_TabbedPane.addTab("Oseba " + tabNum, new PodatkiOStranki()); PodatkiOPotovanju_TabbedPane.addTab("Oseba " + tabNum, new PodrobnostiPotovanja()); 

    }

Declare the jpanels as variables.

//variable decl
     PodrobnostiPotovanja currentAddePodronPanel;
     PodatkiOStranki currentAddedPodatPanel;

     private void dodajOsebo_buttonActionPerformed(java.awt.event.ActionEvent evt) { 

        int tabNum = OsebniPodatki_TabbedPane.getTabCount() + 1;
        currentAddedPodatPanel = new PodatkiOStranki();
        currentAddePodronPanel = new PodrobnostiPotovanja();
        OsebniPodatki_TabbedPane.addTab("Oseba " + tabNum, currentAddedPodatPanel);

        PodatkiOPotovanju_TabbedPane.addTab("Oseba " + tabNum, currentAddePodronPanel);
      }

Assuming you have a button to get text from jpanel:

public void saveText(ActionEvent event){
  String content = currentAddedPodatPanel.getContent();
  //etc
}

Note on formatting: from jtextfield, you would have to do that on your own. Otherwise have a look at jtextarea with document (a little tedious) or JTextPane or JEditorPane The really big index

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM