GUI - dodawanie elementów

0

Mam takie okienko:
<image> http://img580.imageshack.us/img580/2589/beztytuuhng.jpg</image>
Jak zrobić żeby po naciśnięciu na Add command dodał się JTextField taki jak jest obok labela Commands?

0

w obsłudze tego klawisza wpisać docelowy.setText(wejscie.getText());

wejście - textfield z którego pobierasz....

Oczywiście wszystko w obsłudze zdarzeń dla klawisza

Pozdro 600

0

Nie wiem jaka masz organizację kodu, jakiego używasz menadżera rozkładu i czy w ogóle używasz. W najprostszej wersji (w kodzie metody actionPerformed()) może być coś takiego:

frame.add(new JTextField());
frame.validate();
frame.repaint():
0

remigio: nie o to chodzi
bo: To okno dialogowe JDialog zostało stworzone w kreatorze GUI z Netbeansa, jak go znasz to wiesz jak wygląda kod, jak nie to mogę wstawić. To co napisałeś niestety nie działa. Wiesz może jak to inaczej zrobić?

0

Pisałem na wyczucie, teraz sprawdziłem. Jeżeli używasz menadżera rozkładu, to kod winien być taki:

add(new JTextField(8));
validate();
pack(); //tego brakowało
repaint();
return;
0

Niestety nie pojawia się. Ja chcę żeby po naciśnięciu przycisku pojawił się ten JTextField w moim oknie dialogowym.

0

Bez kodu nie posuniemy się dalej.

0
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * connOptJDialog.java
 *
 * Created on 2011-01-18, 03:18:37
 */

package pobicostree;

import java.util.ArrayList;
import javax.swing.JTextField;

/**
 *
 * @author Podstępca
 */
public class connOptJDialog extends javax.swing.JDialog {

    /** Creates new form connOptJDialog */
    public connOptJDialog(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        saved = false;
        commandsList = new ArrayList<JTextField>();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */

    boolean saved;
    ArrayList<JTextField> commandsList;

    boolean isSaved()
    {
        return saved;
    }

    int getTimeout()
    {
        String text = this.jTextField2.getText();
        return Integer.parseInt(text);      
    }

    String getReports()
    {
        return this.jTextField3.getText();
    }

    void setTimeout(int t)
    {
        String text = Integer.toString(t);
        this.jTextField2.setText(text);
    }

    void setReports(String r)
    {
        this.jTextField3.setText(r);

    }

    void setReliable(boolean r)
    {
        jCheckBox1.setSelected(r);
    }

    boolean getReliable()
    {
        return jCheckBox1.isSelected();
    }

    void setCommand1(String c)
    {
        jTextField1.setText(c);
    }

    String getCommand1()
    {
        return jTextField1.getText();
    }

    void setCommand2(String c)
    {
        //jTextField4.setText(c);
    }

    String getCommand2()
    {
        return null;//jTextField4.getText();
    }




    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        jTextField3 = new javax.swing.JTextField();
        jCheckBox1 = new javax.swing.JCheckBox();
        jLabel5 = new javax.swing.JLabel();
        jTextField2 = new javax.swing.JTextField();
        jButton1 = new javax.swing.JButton();
        jLabel6 = new javax.swing.JLabel();
        jComboBox1 = new javax.swing.JComboBox();
        jSeparator1 = new javax.swing.JSeparator();
        jSeparator2 = new javax.swing.JSeparator();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Connection Options");

        jLabel1.setText("Commands");

        jLabel3.setText("Reports");

        jTextField1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextField1ActionPerformed(evt);
            }
        });

        jCheckBox1.setText("(reliable/best effort)");
        jCheckBox1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jCheckBox1ActionPerformed(evt);
            }
        });

        jLabel5.setText("Timeout");

        jButton1.setText("OK");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jLabel6.setText("Link type");

        jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "link type 1" }));

        jButton2.setText("Add command");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });

        jButton3.setText("Add report");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(jCheckBox1)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(jLabel5)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, 63, javax.swing.GroupLayout.PREFERRED_SIZE)))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jButton1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 77, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGroup(layout.createSequentialGroup()
                                .addGap(63, 63, 63)
                                .addComponent(jLabel2))))
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                        .addComponent(jLabel6)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel1)
                            .addComponent(jLabel3))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 56, Short.MAX_VALUE)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(jTextField3)
                            .addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 272, Short.MAX_VALUE))))
                .addContainerGap())
            .addComponent(jSeparator1, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE)
            .addComponent(jSeparator2, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jButton2)
                .addContainerGap(291, Short.MAX_VALUE))
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jButton3)
                .addContainerGap(305, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(25, 25, 25)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel6)
                    .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(24, 24, 24)
                .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(17, 17, 17)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabel2)
                        .addGap(32, 32, 32))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jCheckBox1)
                        .addGap(18, 18, 18)))
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel5)
                    .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(20, 20, 20)
                .addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jButton2)
                        .addGap(28, 28, 28)
                        .addComponent(jLabel3))
                    .addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jButton3)
                .addGap(27, 27, 27)
                .addComponent(jButton1)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>                        

    private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {                                            
        // TODO add your handling code here:
    }                                           

    private void jCheckBox1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
        // TODO add your handling code here:
    }                                          

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        saved = true;
        super.setVisible(false);
    }                                        

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        add(new JTextField());
        validate();
        pack();
        repaint();
        return;
    }                                        

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                connOptJDialog dialog = new connOptJDialog(new javax.swing.JFrame(), true);
                dialog.addWindowListener(new java.awt.event.WindowAdapter() {
                    @Override
                    public void windowClosing(java.awt.event.WindowEvent e) {
                        System.exit(0);
                    }
                });
                dialog.setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JCheckBox jCheckBox1;
    private javax.swing.JComboBox jComboBox1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JSeparator jSeparator1;
    private javax.swing.JSeparator jSeparator2;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
    private javax.swing.JTextField jTextField3;
    // End of variables declaration                   

}

 
0

Jeżeli pojawienie się kontrolki tekstowej ma wystąpić jeden raz, to najłatwiej jest po prostu stworzyć w edytorze tę kontrolkę i nadać jej na starcie ustawienie ukryta/nieaktywna. Masz możliwość wstawienia swojego custom kodu do klasy wyprodukowanej przez generator GUI i tam możesz zrobić to co potrzebujesz.
Jeżeli jednak chciałbyś mieć możliwość dodawania takich kontrolek w nieograniczonych ilościach (tak jak np. w search files w Ubuntu), to potrzebujesz inaczej rozplanować kontrolki. Najlepiej stworzyć za pomocą tego samego edytora osobny "obscrollowany" panel obsługujący dodawanie i usuwanie takich JTextFieldów (początkowo musi mieć tylko przycisk "add" oraz niewidoczny "remove") oraz komunikację z resztą programu. Z logicznego punktu widzenia jest to tylko graficzna reprezentacja listy obiektów przechowujących tekst. Taka też może być struktura danych tak stworzonego panela. Gotowy już panel jako bean mógłbyś sobie dodać w swoim GUI tyle razy ile będziesz potrzebować. Swing oraz edytor Matisse mają potężne możliwości w tworzeniu bardzo elastycznego GUI (wręcz rekurencyjnego), ale tradycyjnie 80% ludzi wykorzystuje zaledwie 20% z nich.

1 użytkowników online, w tym zalogowanych: 0, gości: 1