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?
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
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():
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ć?
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;
Niestety nie pojawia się. Ja chcę żeby po naciśnięciu przycisku pojawił się ten JTextField w moim oknie dialogowym.
Bez kodu nie posuniemy się dalej.
/*
* 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
}
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.