Hinweis um JTable in JDialog zu aktualisieren

axelf76

Grünschnabel
Hallo zusammen,

Ich möchte in einem Java-Applet einen Jdialog einblenden der einen dynamischen Jtable beinhaltet.
Der Jtable soll seine dynamischen Daten von einem Array aus einem Menuevent erhalten.

Leider schaffe ich es nicht die JTable im Dialog entsprechend zu updaten...
Der JDialog wird nur beim laden des applets initialisiert und dann passiert nix mehr..
Die Daten aus dem Array sind im Dialog vorhanden aber nicht im Jtable anzeigbar.
Mit dem DefaultTableModel komm ich irgendwie nicht weiter ...

Kann mir jemand eine Hilfestellung geben wie ich das bewerkstelligen muss ?


Danke !

Gruß
Axel

hier der Code :

Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.table.*;
import java.awt.Graphics;
import javax.swing.border.*;
import javax.swing.event.*;
import javax.swing.table.TableModel;
import java.awt.image.*;
import java.io.*;
import java.util.*;



public class test extends JApplet  {
 
	JFrame fFrame;
	
	JMenuItem fMenuExtras;
	JMenu  submenu;
	JMenuItem menuItem1,menuItem2,menuItem3;
	String[][] list;//=new String[2][6];
	String[] columnNames;

	JDialog view = new tableview(new JFrame(), "view", true);


	public void init () 
	{
		JMenuBar mb = new JMenuBar ();
		JMenu x = new JMenu ("Menu");
		mb.add (x);
		submenu = new JMenu("submenu");
		menuItem3 = new JMenuItem("table");
		submenu.add(menuItem3);
		menuItem3.addActionListener (new eventhandler());
		x.add(submenu);
		setJMenuBar (mb);
	} // init


	class eventhandler implements ActionListener
	{ 
		public void actionPerformed (ActionEvent e)
		{
			String command = e.getActionCommand ();
				if (command.equals ("table")) 
				{	
				    String[] columnNames =  { "col1", "col2", "col3","col4" , "col5" ,"col6"  }; 
				    System.out.println("table");
				    String[][] list= { {"1","test","1","1","1","3"},{"2","test2","2","2","2","6"}  };
				    				  
				     view.setVisible(true); 

				}
		} // actionPerformed
	}// class eventhandler

      public class TabModel extends DefaultTableModel{
						 
						 TabModel(Object[][]list, Object[] colnames){
							 
							 super(list, colnames);
						 }
      }// class Tabmodel


	public class tableview extends JDialog implements ActionListener
	{
	      JButton OKButton;
		tableview(JFrame hostframe, String Titel, boolean dModal)
		{
			super(hostframe, Titel, dModal);
			Dimension screenSize = getToolkit ().getScreenSize ();
			setLocation (screenSize.width/2-100,screenSize.height/2-200);
			java.util.Calendar today = new java.util.GregorianCalendar();
			int day = today.get(Calendar.DATE);
			int month = today.get(Calendar.MONTH)+1;
			int year = today.get(Calendar.YEAR);

			System.out.println("test");


			DefaultTableModel TabModel = new DefaultTableModel();

			JTable medtable = new JTable(TabModel); 
		    
			System.out.println("Date="+day+"."+month+"."+year);    

			medtable.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() 
			{
				@Override
				public Component getTableCellRendererComponent(JTable table,
						Object value, boolean isSelected, boolean hasFocus,
						int row, int column) 
				{
					
					Component c = super.getTableCellRendererComponent(table, value,
							isSelected, hasFocus, row, column);
					
					int x = row % 2;
					if(x == 0 )
					{
					 setBackground(Color.white);
					 setFont(new java.awt.Font("Arial", Font.BOLD, 12));
					  
					}
					else
					{
					 setBackground(Color.lightGray);
					 setFont(new java.awt.Font("Arial", Font.BOLD, 12));
					 
					}

					setHorizontalAlignment (JLabel.CENTER);  
					Color Farbe6 = new Color(254, 242, 229); 
					Color Farbe7 = new Color(102, 0, 102); 

					return this;
				}
			});

			JTextField dialogtext= new JTextField("tableview from "+ day +"."+ month +"."+ year);
			dialogtext.setEditable(false);
 
			GridBagLayout gbl = new GridBagLayout();
			this.setLayout(gbl);
				      
			GridBagConstraints c = new GridBagConstraints();
		
			c.gridx = 0;
			c.gridy = 0;
			c.ipady = 10;
			c.weightx = 0;
			c.weighty = .1;
			c.fill = GridBagConstraints.BOTH;
			add(dialogtext,c);	

			c.gridx = 0;
			c.gridy = 1;
			c.ipady = 10;
			c.weightx = 0;
			c.weighty = 0.7;
			c.fill = GridBagConstraints.BOTH;
			add( new JScrollPane( medtable ),c ); 

			JButton OKButton = new JButton("Back");
			OKButton.setSize(20,30);
			c.gridx = 0;
			c.gridy = 2;
			c.ipady = 10;
			c.weightx = 0.5;
			c.weighty = 0.1;
			add(OKButton,c);
			OKButton.addActionListener(this);
			pack(); 
		}
	    
		public void actionPerformed(ActionEvent e)
		{ 
		    	

		    view.setVisible(false); 
		}
	} 


}// class testApplet
 
Hallo,

ist schon länger her, dass ich das gemacht habe, aber ich glaube ich habe das gelöst, indem ich immer wenn neue Daten kamen damit ein neues TabelModel erstellt habe und meiner JTabel dann dieses neue TableModel gegeben habe.
 
Danke für die schnelle Antwort !

Kannst du mir evtl noch kurz zeigen wo und wie ich das anstellen muss in meinem Code (Pseudocodemässig) ?

Genau an diesem Punkt scheiterts nämlich bei mir ;-)

Danke !

Gruß
Axel
 
Bingo !

Nach einigen Versuchen hab ich nun den Stein der Weisen gefunden ...

Entscheiden war das das DefaultTableModel im JDialog tableview mit übergeben wird

Wen es interessiert :

Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.table.*;
import java.awt.Graphics;
import javax.swing.border.*;
import javax.swing.event.*;
import javax.swing.table.TableModel;
import java.awt.image.*;
import java.io.*;
import java.util.*;



public class test extends JApplet  {
 
	JFrame fFrame;
	
	JMenuItem fMenuExtras;
	JMenu  submenu;
	JMenuItem menuItem1,menuItem2,menuItem3;
	public static String[][] list ;//=new String[2][6];
	public static String[] columnNames;
	DefaultTableModel model=new DefaultTableModel(list,columnNames);


	JDialog view = new tableview(new JFrame(), "view", true, model);
	JTable medtable;

	

	public void init () 
	{
		JMenuBar mb = new JMenuBar ();
		JMenu x = new JMenu ("Menu");
		mb.add (x);
		submenu = new JMenu("submenu");
		menuItem3 = new JMenuItem("table");
		submenu.add(menuItem3);
		menuItem3.addActionListener (new eventhandler());
		x.add(submenu);
		setJMenuBar (mb);
	} // init


	class eventhandler implements ActionListener
	{ 
		public void actionPerformed (ActionEvent e)
		{
			String command = e.getActionCommand ();
				if (command.equals ("table")) 
				{	
				    String[] columnNames =  { "col1", "col2", "col3","col4" , "col5" ,"col6"  }; 
				    
				    String[][] list= { {"1","test","1","1","1","3"},{"2","test2","2","2","2","6"}  };


				    model.setDataVector(list, columnNames);


				    view.setVisible(true); 

				}
		} // actionPerformed
	}// class eventhandler



	public class tableview extends JDialog implements ActionListener {
	      JButton OKButton;
	      
	      
		tableview(JFrame hostframe, String Titel, boolean dModal,DefaultTableModel model)
		{
			super(hostframe, Titel, dModal);
			Dimension screenSize = getToolkit ().getScreenSize ();
			setLocation (screenSize.width/2-100,screenSize.height/2-200);
			java.util.Calendar today = new java.util.GregorianCalendar();
			int day = today.get(Calendar.DATE);
			int month = today.get(Calendar.MONTH)+1;
			int year = today.get(Calendar.YEAR);

			System.out.println("test");

			medtable = new JTable(model);


			System.out.println("Date="+day+"."+month+"."+year);    

			medtable.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() 
			{
				@Override
				public Component getTableCellRendererComponent(JTable table,
						Object value, boolean isSelected, boolean hasFocus,
						int row, int column) 
				{
					
					Component c = super.getTableCellRendererComponent(table, value,
							isSelected, hasFocus, row, column);
					
					int x = row % 2;
					if(x == 0 )
					{
					 setBackground(Color.white);
					 setFont(new java.awt.Font("Arial", Font.BOLD, 12));
					  
					}
					else
					{
					 setBackground(Color.lightGray);
					 setFont(new java.awt.Font("Arial", Font.BOLD, 12));
					 
					}

					setHorizontalAlignment (JLabel.CENTER);  
					Color Farbe6 = new Color(254, 242, 229); 
					Color Farbe7 = new Color(102, 0, 102); 

					return this;
				}
			});

			JTextField dialogtext= new JTextField("tableview from "+ day +"."+ month +"."+ year);
			dialogtext.setEditable(false);
 
			GridBagLayout gbl = new GridBagLayout();
			this.setLayout(gbl);
				      
			GridBagConstraints c = new GridBagConstraints();
		
			c.gridx = 0;
			c.gridy = 0;
			c.ipady = 10;
			c.weightx = 0;
			c.weighty = .1;
			c.fill = GridBagConstraints.BOTH;
			add(dialogtext,c);	

			c.gridx = 0;
			c.gridy = 1;
			c.ipady = 10;
			c.weightx = 0;
			c.weighty = 0.7;
			c.fill = GridBagConstraints.BOTH;
			add( new JScrollPane( medtable ),c ); 

			JButton OKButton = new JButton("Back");
			OKButton.setSize(20,30);
			c.gridx = 0;
			c.gridy = 2;
			c.ipady = 10;
			c.weightx = 0.5;
			c.weighty = 0.1;
			add(OKButton,c);
			OKButton.addActionListener(this);
			pack(); 
		}
	    
		public void actionPerformed(ActionEvent e)
		{ 

		    view.setVisible(false); 
		}




	} 


}// class testApplet
 

Neue Beiträge

Zurück