# dynamische jlabels



## Kaladial (9. Aug 2007)

hallo 

ich versuche gerade ein programm zu schreiben welches dynamisch labels und textfelder anlegt

also heist ich hab nen eingabefeld und einen button und wenn ich nun den button drück sollen soviel jlabels erzeugt werden wie in dem eingabefeld steht

also ich hatte mir das so gedacht:


```
jButtonWeiter1.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					if(jTextFieldAnzParameter.getText().matches("[0-9]+")){
						jScrollPaneEigendschaften.setVisible(true);
						for(int i=0; i<Integer.parseInt(jTextFieldAnzParameter.getText()); i++){
							JLabel test=new JLabel();
							test.setText("hallo:"+i);
							jScrollPaneEigendschaften.add(test);
						}
					}
				}
			});
```

aber er zeigt mir nichts an

cu Kaladial


----------



## SlaterB (9. Aug 2007)

was ist jScrollPaneEigendschaften?

evtl. fehlt nur validate() auf das JFrame am Ende

-----------

Tipp:

> for(int i=0; i<Integer.parseInt(jTextFieldAnzParameter.getText()); i++){

hier wird wohl in jedem Schleifendurchlauf die Anzahl neu als String geparst,
mal das lieber nur EINMAL vor der Schleife


----------



## Kaladial (9. Aug 2007)

jScrollPaneEigendschaften = JScrollPane

auf diesem sollen die labels angezeigt werden


----------



## SlaterB (9. Aug 2007)

schaffst du es denn, auf normalen Wege mehrere JLabel in ein JScrollPane einzufügen?
wieso versuchst du so ein Neuland erst in einem komplizierten Button?

hab's grad nicht getestest, nehme aber mal an, dass das nicht geht 
GUI-Komponenten fügt man in ein JPanel oder so ein,
bei einem JScrollPane kann man einen ViewPoint setzen, das wars aber auch schon


----------



## Kaladial (9. Aug 2007)

hmmm naja ich dachte scroll hört sich gut an weil ich weis ja net wieviel ich erzeugen will und wenn ich das auf nen scroll pannel pack kommen dann scrollbars wenn es über die eigentlich sichtbare größe des pannels hinaus gehn ob bin ich da irgendwie falsch?


----------



## Kaladial (9. Aug 2007)

so hab das jetzt umgebaut weil auf dem scrollpane das wirklich net ging... 
nur anzeigen tut er mir trotzdem nix 


```
jButtonWeiter1.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					if(jTextFieldAnzParameter.getText().matches("[0-9]+")){
						int anz=Integer.parseInt(jTextFieldAnzParameter.getText());
						for(int i=0; i<anz; i++){
							JLabel test=new JLabel(); 
		                     test.setText("hallo:"+i); 
		                     jPanelEigenschaften.add(test); 
						}
					}
				}
			});
		}
```

jPanelEigenschaften = JPanel


----------



## SlaterB (9. Aug 2007)

SlaterB hat gesagt.:
			
		

> evtl. fehlt nur validate() auf das JFrame am Ende



weiterhin kann ich noch Ausgaben a la
System.out.println("Label i eingefügt");
empfehlen, um zu beweisen, dass der Code überhaupt ausgeführt wird,

mehr fällt mir persönlich nicht ein, dann müsstest du mehr Code, am besten ein komplettes lauffähiges Beispiel posten


----------



## Kaladial (9. Aug 2007)

wie meinste das mit dem validate() ?? wo soll n das dran ?


----------



## SlaterB (9. Aug 2007)

die Operation validate() auf das JFrame-Objekt aufrufen,
damit nach neueingefügten Komponenten gesucht wird


----------



## Kaladial (9. Aug 2007)

```
jButtonWeiter1.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					if(jTextFieldAnzParameter.getText().matches("[0-9]+")){
						int anz=Integer.parseInt(jTextFieldAnzParameter.getText());
						for(int i=0; i<anz; i++){
							JLabel test=new JLabel(); 
		                    test.setText("hallo:"+i); 
		                    jPanelEigenschaften.add(test); 
		                    
						}
						jPanelEigenschaften.validate();
					}
				}
			});
```

^^ sowas da?


----------



## SlaterB (9. Aug 2007)

die Operation validate() auf das ---------->JFrame-Objekt<--------- aufrufen

vielleicht gehts ja auch mit JPanel, kann ich nicht sagen,

und antworte als nächstes nicht mit 'hab ich, geht nich, was nun?'.
hab schon geschrieben was ansonsten zu tun ist


----------



## Kaladial (9. Aug 2007)

ok dann hier mein quellcode in kurzform:

aufrufende datei:


```
import javax.swing.SwingUtilities;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JButton;

import java.awt.Rectangle;
import java.awt.Dimension;

public class TestApp1 extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JButton jButton = null;

	/**
	 * This method initializes jButton	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButton() {
		if (jButton == null) {
			jButton = new JButton();
			jButton.setBounds(new Rectangle(118, 18, 99, 69));
			jButton.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					showDlg();
				}
			});
		}
		return jButton;
	}

	private void showDlg(){
    	DlgTest dlg = new DlgTest(this); 
    	dlg.setModal(true);
    	dlg.setSize(new Dimension(332, 172));
    	dlg.setVisible(true);
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				TestApp1 thisClass = new TestApp1();
				thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				thisClass.setVisible(true);
			}
		});
	}

	/**
	 * This is the default constructor
	 */
	public TestApp1() {
		super();
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setSize(300, 200);
		this.setContentPane(getJContentPane());
		this.setTitle("JFrame");
	}

	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.add(getJButton(), null);
		}
		return jContentPane;
	}

}
```

Dialog wo man in das eingabefeld ne zahl einträgt und per button eigentlich die labels erstellt werden sollen


```
import javax.swing.JPanel;
import java.awt.Frame;
import java.awt.BorderLayout;
import javax.swing.JDialog;
import javax.swing.JButton;
import javax.swing.JLabel;

import java.awt.Rectangle;
import javax.swing.JTextField;
import java.awt.Dimension;
import java.awt.GridBagLayout;

public class DlgTest extends JDialog {

	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JButton jButton = null;
	private JTextField jTextField = null;
	private JPanel jPanel = null;

	/**
	 * @param owner
	 */
	public DlgTest(Frame owner) {
		super(owner);
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setSize(444, 382);
		this.setContentPane(getJContentPane());
	}

	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(getJButton(), null);
			jContentPane.add(getJTextField(), null);
			jContentPane.add(getJPanel(), null);
		}
		return jContentPane;
	}

	/**
	 * This method initializes jButton	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButton() {
		if (jButton == null) {
			jButton = new JButton();
			jButton.setBounds(new Rectangle(33, 25, 84, 27));
			jButton.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					if(jTextField.getText().matches("[0-9]+")){
						int anz=Integer.parseInt(jTextField.getText());
						for(int i=0; i<anz; i++){
							System.out.println("test");
							JLabel test=new JLabel(); 
		                    test.setText("hallo:"+i); 
		                    jPanel.add(test); 
		                    
						}
					}		
				}
			});
		}
		return jButton;
	}

	/**
	 * This method initializes jTextField	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getJTextField() {
		if (jTextField == null) {
			jTextField = new JTextField();
			jTextField.setBounds(new Rectangle(170, 18, 92, 43));
		}
		return jTextField;
	}

	/**
	 * This method initializes jPanel	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanel() {
		if (jPanel == null) {
			jPanel = new JPanel();
			jPanel.setLayout(null);
			jPanel.setBounds(new Rectangle(58, 124, 196, 193));
		}
		return jPanel;
	}

}  //  @jve:decl-index=0:visual-constraint="10,10"
```


----------



## SlaterB (9. Aug 2007)

tolles Testprogramm, mit Layout, Dialog und wer weiß nicht alles,


jPanel.setLayout(null); 
->
//jPanel.setLayout(null);

+ das validate() natürlich, reicht auch auf jPanel, nicht unbedingt auf dem JFrame/ Dialog


----------



## Kaladial (9. Aug 2007)

> jPanel.setLayout(null);
> ->
> //jPanel.setLayout(null);



^^ nee nee für das testprog is das ok 

und du hast dloch geschrieben das du nen lauffähiges testprog haben wolltest... also hab ich im editor fix was zusammen gebaut...  ging halt am schnellsten... 

und da wo ich es brauch (also das aufrufen) das geschieht nunmal in nem dialog... also hab ich dir das auch mit rein gebastelt... 

und ka was du mit +validate() meinst sorry aber die antwort von eben hilft 0


----------



## SlaterB (9. Aug 2007)

..
ersetze
jPanel.setLayout(null); 
durch
//jPanel.setLayout(null); 

+

ersetze
jPanel.add(test); 
durch
jPanel.add(test); 
jPanel.validate();

bzw. das validate() besser hinter die Schleife


----------



## Kaladial (9. Aug 2007)

ok geht 

so und wenns jetzt net zu viel is pls noch ne erklärung was das layout damit zutun hat?
also wenn ich //jPanel.setLayout(null);  net mach geht es auch net... 

was hat das miteinander zu tun?


----------



## SlaterB (9. Aug 2007)

überlege mal was null-Layout mit setBounds() zu tun hat..


----------



## Kaladial (10. Aug 2007)

na wenn ich nen null layouit hab kann ich nen meine objecte dierekt positionieren über x y höhe breite


----------



## SlaterB (10. Aug 2007)

und wenn du das nicht tust, wie bei deinen JLabels, dann sind sie eben nicht zu sehen


----------



## Kaladial (10. Aug 2007)

```
test.setText("Parameter["+i+"]:"); 
test.setBounds(new Rectangle(15, 15, 100, 25));
```

das geht aber leider net... also wie dann?


----------



## SlaterB (10. Aug 2007)

ich wollt schon wieder meckern, etwa weil du
jPanel.add(test);
statt
jPanel.add(test,null); (wie überall sonst bei null-Layout) verwendest
oder das validate() nicht benutzt,

aber es ist doch wieder was anderes 

validate() hilft anscheindend nur bei normalen Layouts,
fürs null-Layout hilft
jPanel.repaint();


----------



## Kaladial (10. Aug 2007)

ok dank dir das klappt jetzt auch


----------

