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?
GUI - dodawanie elementów
- Rejestracja: dni
- Ostatnio: dni
- Rejestracja: dni
- Ostatnio: dni
- Postów: 357
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
- Rejestracja: dni
- Ostatnio: dni
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():
- Rejestracja: dni
- Ostatnio: dni
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ć?
- Rejestracja: dni
- Ostatnio: dni
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;
- Rejestracja: dni
- Ostatnio: dni
Niestety nie pojawia się. Ja chcę żeby po naciśnięciu przycisku pojawił się ten JTextField w moim oknie dialogowym.
- Rejestracja: dni
- Ostatnio: dni
/*
* 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
}
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Polska, Warszawa
- Postów: 1066
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.