JPanel Problem

yax

Erfahrenes Mitglied
Hallo,

Ich habe ein kleines Problem, und zwar habe ich zwei JDialog´s. Ich möchte gerne wenn ich in den einen JDialog auf einen Button drücke, das sich dann im zweiten JDialog ein neues Panel im JTappedPane gebildet hat.

Hat irgendjemand eine Idee
 
Hallo, es gibt verschiedene Möglich, sag uns doch einfach, was du bisher hast, und dann können wir dir vielleicht den ein oder anderen Tipp geben.
 
Also ich hab ein Dialog indem man eine neue "Visitenkarte" mit Noten erstellen kann.

Code:
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.lang.annotation.Annotation;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Types;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

import org.h2.tools.Csv;
import org.h2.tools.SimpleResultSet;

@SuppressWarnings("serial")
public class Dialog extends JDialog implements getText {

	
	// Anfang Attribute
	private JLabel jLabel1 = new JLabel();
	private JTextField jTextField1 = new JTextField();
	private JLabel jLabel2 = new JLabel();
	private JTextField jTextField2 = new JTextField();
	private JLabel jLabel3 = new JLabel();
	private JTextField jTextField3 = new JTextField();
	private JTextField jTextField4 = new JTextField();
	private JTextField jTextField5 = new JTextField();
	private JLabel jLabel4 = new JLabel();
	private JLabel jLabel5 = new JLabel();
	private JTextField jTextField6 = new JTextField();
	private JTextField jTextField7 = new JTextField();
	private JLabel jLabel6 = new JLabel();
	private JLabel jLabel7 = new JLabel();
	private JTextField jTextField8 = new JTextField();
	private JTextField jTextField9 = new JTextField();
	private JLabel jLabel8 = new JLabel();
	private JLabel jLabel9 = new JLabel();
	private JTextField jTextField10 = new JTextField();
	private JTextField jTextField11 = new JTextField();
	private JTextField jTextField12 = new JTextField();
	private JLabel jLabel10 = new JLabel();
	private JLabel jLabel11 = new JLabel();
	private JLabel jLabel12 = new JLabel();
	private JButton jButton1 = new JButton();
	@SuppressWarnings("unused")
	private JTextField textfield = new JTextField();
	private JTextField jTextField13 = new JTextField();

	// Ende Attribute

	
	public Dialog(final JFrame owner) {
		super(owner);
		setTitle("Erstellen");
		setModal(true);

		JPanel p = new JPanel();
		p.setPreferredSize(new Dimension(500, 300));
		p.setLayout(null);

		jLabel1.setBounds(32, 24, 52, 24);
		@SuppressWarnings("unused")
		String deutsch = null;
		jLabel1.setText("Deutsch:");

		p.add(jLabel1);
		jTextField1.setBounds(96, 24, 121, 24);
		jTextField1.setText("");
		p.add(jTextField1);
		jLabel2.setBounds(32, 56, 40, 16);
		jLabel2.setText("Mathe:");

		p.add(jLabel2);
		jTextField2.setBounds(96, 56, 121, 24);
		jTextField2.setText("");
		p.add(jTextField2);
		jLabel3.setBounds(32, 88, 54, 16);
		jLabel3.setText("Englisch:");

		p.add(jLabel3);
		jTextField3.setBounds(96, 88, 121, 24);
		jTextField3.setText("");
		p.add(jTextField3);
		jTextField4.setBounds(96, 120, 121, 24);
		jTextField4.setText("");
		p.add(jTextField4);
		jTextField5.setBounds(96, 152, 121, 24);
		jTextField5.setText("");
		p.add(jTextField5);
		jLabel4.setBounds(32, 120, 53, 16);
		jLabel4.setText("Biologie:");

		p.add(jLabel4);
		jLabel5.setBounds(32, 152, 43, 16);
		jLabel5.setText("Physik:");

		p.add(jLabel5);
		jTextField6.setBounds(96, 184, 121, 24);
		jTextField6.setText("");
		p.add(jTextField6);
		jTextField7.setBounds(320, 184, 121, 24);
		jTextField7.setText("");
		p.add(jTextField7);
		jLabel6.setBounds(32, 184, 51, 16);
		jLabel6.setText("Technik:");

		p.add(jLabel6);
		jLabel7.setBounds(248, 56, 53, 16);
		jLabel7.setText("Religion:");

		p.add(jLabel7);
		jTextField8.setBounds(320, 152, 121, 24);
		jTextField8.setText("");
		p.add(jTextField8);
		jTextField9.setBounds(320, 120, 121, 24);
		jTextField9.setText("");
		p.add(jTextField9);
		jLabel8.setBounds(248, 88, 35, 16);
		jLabel8.setText("Sport:");

		p.add(jLabel8);
		jLabel9.setBounds(248, 120, 35, 16);
		jLabel9.setText("Kunst:");

		p.add(jLabel9);
		jTextField10.setBounds(320, 88, 121, 24);
		
		p.add(jTextField10);
		jTextField11.setBounds(320, 56, 121, 24);
		jTextField11.setText("");
		p.add(jTextField11);
		jTextField12.setBounds(320, 24, 121, 24);
		jTextField12.setText("");
		p.add(jTextField12);
		jLabel10.setBounds(248, 152, 38, 16);
		jLabel10.setText("Musik:");

		p.add(jLabel10);
		jLabel11.setBounds(240, 184, 49, 16);
		jLabel11.setText("Chemie:");

		p.add(jLabel11);
		jLabel12.setBounds(248, 24, 60, 24);
		jLabel12.setText("Informatik:");

		p.add(jLabel12);
		jButton1.setBounds(304, 224, 121, 33);
		jButton1.setText("OK");
		p.add(jButton1);

		jTextField13.setBounds(150, 250, 121, 24);
		jTextField13.setText("");
		p.add(jTextField13);

		jLabel12.setBounds(100, 250, 121, 24);
		jLabel12.setText("Name:");

		jButton1.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				try {
					Class.forName("org.h2.Driver");
				} catch (ClassNotFoundException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				Connection conn = null;
				try {
					conn = DriverManager.getConnection("jdbc:h2:~/test", "sa",
							"");
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

				try {
					conn.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

				SimpleResultSet rs = new SimpleResultSet();

				rs.addColumn("Deutsch - Note", Types.VARCHAR, 255, 0);
				rs.addColumn("Mathe - Note", Types.VARCHAR, 255, 0);
				rs.addColumn("Englisch - Note", Types.VARCHAR, 255, 0);
				rs.addColumn("Physik - Note", Types.VARCHAR, 255, 0);
				rs.addColumn("Biologie - Note", Types.VARCHAR, 255, 0);
				rs.addColumn("Chemie - Note", Types.VARCHAR, 255, 0);
				rs.addColumn("Technik - Note", Types.VARCHAR, 255, 0);
				rs.addColumn("Religions - Note", Types.VARCHAR, 255, 0);
				rs.addColumn("Sport - Note", Types.VARCHAR, 255, 0);
				rs.addColumn("Kunst - Note", Types.VARCHAR, 255, 0);
				rs.addColumn("Musik - Note", Types.VARCHAR, 255, 0);
				rs.addColumn("Name", Types.VARCHAR, 255, 0);

				rs.addRow(jTextField1.getText(), jTextField2.getText(),
						jTextField3.getText(), jTextField5.getText(),
						jTextField4.getText(), jTextField11.getText(),
						jTextField6.getText(), jTextField7.getText(),
						jTextField8.getText(), jLabel9.getText(),
						jTextField10.getText(), jTextField13.getText());

				try {
					Csv.getInstance().write("data/Noten.csv", rs, null);
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
					
				
				}
				
				dispose();
			}

			

		});

		add(p);
		pack();
		setLocationRelativeTo(owner);

		// Anfang Komponenten
		// Ende Komponenten
	}

	// Anfang Methoden

	public Class<? extends Annotation> annotationType() {
		// TODO Auto-generated method stub
		return null;
	}

	public String getText() {
		// TODO Auto-generated method stub
		return getText();
	}

	// Ende Methoden

	@Override
	public String getTheText() {
		// TODO Auto-generated method stub
		return getText();
	}
}

So, und wenn ich dann auf "OK" klicke, möchte ich gerne, dass im Dialog ein neues Panel erstellt wird, und dieses dann zu JTappedPane hinzugefügt wird. Das Panel soll den inhalt der Datenbank enthalten. Also bei jeden Klick auf OK, soll ein neues Panel mit den Inhalt der JTextField´s erzeugt werden, und dem JTappedPane, des anderen Dialogs übergeben werden.

Der andere Dialog:

Code:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.io.BufferedReader;
import java.io.FileReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.regex.Pattern;

import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;


import org.h2.tools.Csv;

public class Verwalten extends JDialog {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	JTabbedPane tp0 = new JTabbedPane();
	JTabbedPane tp1 = new JTabbedPane();
	JPanel p1 = new JPanel();
	JLabel l1 = new JLabel();
	JLabel l2 = new JLabel();
	JLabel l3 = new JLabel();
	JLabel l4 = new JLabel();
	JLabel l5 = new JLabel();
	JLabel l6 = new JLabel();
	JLabel l7 = new JLabel();
	JLabel l8 = new JLabel();
	JLabel l9 = new JLabel();
	JLabel l10 = new JLabel();
	JLabel l11 = new JLabel();
	JLabel l12 = new JLabel();
	JLabel l13 = new JLabel();
	JLabel l14 = new JLabel();
	JLabel l15 = new JLabel();
	JLabel l16 = new JLabel();
	JLabel l17 = new JLabel();
	JLabel l18 = new JLabel();
	JLabel l19 = new JLabel();
	JLabel l20 = new JLabel();
	JLabel l21 = new JLabel();
	JLabel l22 = new JLabel();
	
	
	

	public Verwalten(JFrame owner) throws Exception {
		super(owner);
		setTitle("lalla");
		setModal(true);

		
		
		
		String[] array = new String[12];

		@SuppressWarnings("unused")
		Pattern p = Pattern.compile(",");

		try {
			Class.forName("org.h2.Driver");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		Connection conn = null;
		try {
			conn = DriverManager.getConnection("jdbc:h2:~/test", "sa", "");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		try {
			conn.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		ResultSet rs = Csv.getInstance().read("data/Noten.csv", null, null);
		ResultSetMetaData meta = rs.getMetaData();
		while (rs.next()) {
			for (int i = 0; i < 1; i++) {
				for (int j = 0; j < 1; j++) {

					meta.getColumnLabel(i + 1);
					rs.getString(i + 1);

					@SuppressWarnings("unused")
					BufferedReader reader = new BufferedReader(new FileReader(
							"data/test.csv"));
					@SuppressWarnings("unused")
					String noten = "";
					array[0] = rs.getString(1);
					array[1] = rs.getString(2);
					array[2] = rs.getString(3);
					array[3] = rs.getString(4);
					array[4] = rs.getString(5);
					array[5] = rs.getString(6);
					array[6] = rs.getString(7);
					array[7] = rs.getString(8);
					array[8] = rs.getString(9);
					array[9] = rs.getString(10);
					array[10] = rs.getString(11);
					array[11] = rs.getString(12);

				}

			}
		}
		System.out.println();
		
		BorderLayout bl = new BorderLayout();

		l1.setBounds(32, 32, 91, 16);
		l1.setText("Deutsch - Note:");
		l1.setLayout(bl);
		p1.add(l1);

		l2.setBounds(32, 48, 79, 16);
		l2.setText("Mathe - Note:");
		l1.setLayout(bl);
		p1.add(l2);

		l3.setBounds(32, 64, 93, 16);
		l3.setText("Englisch - Note:");
		l1.setLayout(bl);
		p1.add(l3);

		l4.setBounds(32, 80, 82, 16);
		l4.setText("Physik - Note:");
		l1.setLayout(bl);
		p1.add(l4);

		l5.setBounds(32, 96, 92, 16);
		l5.setText("Biologie - Note:");
		l1.setLayout(bl);
		p1.add(l5);

		l6.setBounds(32, 112, 88, 16);
		l6.setText("Chemie - Note:");
		l1.setLayout(bl);
		p1.add(l6);

		l7.setBounds(32, 128, 90, 16);
		l7.setText("Technik - Note:");
		l1.setLayout(bl);
		p1.add(l7);

		l8.setBounds(240, 32, 99, 16);
		l8.setText("Religions - Note:");
		l1.setLayout(bl);
		p1.add(l8);

		l9.setBounds(240, 48, 74, 16);
		l9.setText("Sport - Note:");
		l1.setLayout(bl);
		p1.add(l9);

		l10.setBounds(240, 64, 77, 16);
		l10.setText("Kunst - Note:");
		l1.setLayout(bl);
		p1.add(l10);

		l11.setBounds(240, 80, 80, 16);
		l11.setText("Musik - Note:");
		l1.setLayout(bl);
		p1.add(l11);

		l12.setBounds(136, 32, 7, 16);
		l12.setText(array[0]);
		l1.setLayout(bl);
		p1.add(l12);

		l13.setBounds(136, 48, 7, 16);
		l13.setText(array[1]);
		l1.setLayout(bl);
		p1.add(l13);

		l14.setBounds(136, 64, 7, 16);
		l14.setText(array[2]);
		l1.setLayout(bl);
		p1.add(l14);

		l15.setBounds(136, 80, 7, 16);
		l15.setText(array[3]);
		l1.setLayout(bl);
		p1.add(l15);

		l16.setBounds(136, 96, 7, 16);
		l16.setText(array[4]);
		l1.setLayout(bl);
		p1.add(l16);

		l17.setBounds(136, 112, 7, 16);
		l17.setText(array[5]);
		l1.setLayout(bl);
		p1.add(l17);

		l18.setBounds(136, 128, 7, 16);
		l18.setText(array[6]);
		l1.setLayout(bl);
		p1.add(l18);

		l19.setBounds(352, 32, 7, 16);
		l19.setText(array[7]);
		l1.setLayout(bl);
		p1.add(l19);

		l20.setBounds(352, 48, 7, 16);
		l20.setText(array[8]);
		l1.setLayout(bl);
		p1.add(l20);

		l21.setBounds(352, 64, 7, 16);
		l21.setText(array[9]);
		l1.setLayout(bl);
		p1.add(l21);

		l22.setBounds(352, 80, 7, 16);
		l22.setText(array[10]);
		l1.setLayout(bl);
		p1.add(l22);

		p1.setPreferredSize(new Dimension(600, 200));
		p1.setLayout(null);

		p1.setName(array[11]);

		
		add(tp0);
		tp0.add(p1);
		
		
		
		rs.close();

		pack();
		setLocationRelativeTo(owner);
	}

	

	public Verwalten() {
		// TODO Auto-generated constructor stub
	}
	
	

}

Hat jemand eine Ideee, wie man dies machen kann
 
Ohne deinen Code genauer studiert zu haben hier das grundsätzliche Vorgehen:
Du musst dir im 2. Dialog einen EventHandler auf das PerformAction-Event des Buttons des 1. Dialogs registrieren und dann dort das Panel erstelle.
 
So, ich habe jetzt leider ein neues Problemchen. Also, ich habe ein JFrame mit einen Button. Wenn ich auf den Button Drücke, entsteht im selben Fenster ein neues Panel mit einen Label. Aber wenn ich dass Programm schließe, verschwindet auch dass neue Panel. Aber dies möchte ich nicht, ich möchte, wenn ich das Programm wieder starte, dass das Panel immer noch da ist.
Kann mir vielleicht irgendjemand helfen? :)

Hier mein Code:

Code:
public class Passwort extends JFrame {
	
	public static void main(String[] args) {
		
				final JFrame frame = new JFrame("Passwortmanager");
				frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				frame.setPreferredSize(new Dimension(300,120));
				frame.setLayout(null);

                                JPanel p1 = new JPanel();
                                JButton b1 = new JButton("Hinzufügen");
                                b1.addActionListener(new ActionListener(){
                              
                                       @Override
					public void actionPerformed(ActionEvent arg0) {
						
                                        JPanel pNeu = new JPanel();
                                        JLabel l1 = new JLabel("Label");
                                        pNeu.add(l1);

					}

                                      }); 
                               
                                p1.add(b1);

                                frame.add(p1);
                                frame.pack();
				frame.setLocationRelativeTo(label);
				frame.setVisible(true);
			
	}

}

Der Code ist schnell hingeschrieben, also bitte überseht die kleinen Fehlerchen... :D
 
Wenn du das so gestalten willst, dass die geschaffenen Panel nach dem Beenden des Programms und einem späteren Neustart wieder da sind, dann musst du dir deine aktuelle GUI Konfiguration in einer Datei speichern. Da gibt es verschiedene Möglichkeiten um das zu machen.
In deinem Fall könnte man zum Beispiel sich die Informationen merken, die in den Panels sichtbar sein sollten, und die in irgendeiner Weise in eine Datei schreiben ... vielleicht als comma seperated values (.cvs) Datei oder als XML Datei ... beim Neustart des Programms guckst du dann ob eine entsprechende Datei vorhanden ist, liest sie gegebenenfalls ein und baust für die Informationen in der Datei wieder Label in deinem Frame auf.

Gruß
Der Wolf
 
Also das verstehe ich jetzt nicht so ganz. Also ich mach eine Datei wo dann die die Panels oder so drinnstehen****? Verstehe ich nicht :D
 
Nee ... ich meine in deinen Panels soll ja irgendeine Info angezeigt werden ... sagen wir der einfachheit halber ...

Name: Müller Beruf: Dachdecker

:D

Dann speicherst du dir diese Informationen zum Beispiel in einer Datei Tmp.txt in der dann steht

Müller, Dachdecker

Wenn du das Programm wieder startest, guckst du ob es eine Datei names Tmp.txt gibt, liest sie Zeilenweise ein und für jede Zeile mit Informationen baust du wieder ein Panel in deiner GUI auf.
 
Falls du lust hast könntest du mir ja vielleicht ein klitze kleines Beispiel schreiben, dann wäre mir viel geholfen. Aber du musst es nicht. Wäre nur hilfreich, denn ich habe nur eine sehr kleine Vorstellung wie das geht. :)
 

Neue Beiträge

Zurück