hi As per Michael Dunn i am sending an example of dynamic generation of tables from our oracle database. please go through the code and tell me where i am wrong.
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
import javax.swing.table.*;
import javax.swing.*;
import javax.swing.border.*;
import java.sql.*;
public class ContentPanelDemo extends JPanel implements ActionListener{
private JPanel reportsPanel;
private static JMenuBar menuBar;
private String submenu;
private static JMenu tables,objects,users;
private static JMenuItem m,menuItem,ex1;
JTabbedPane tabPane;
JTextArea jtAreaOutput,textArea;
JTable jtable;
Vector v=new Vector();
ResultSet rs;
Statement stmt;
Connection con;
public ContentPanelDemo()
{
initFields();
setReportsPanel();
setTabbedPanels();
}
public void initFields() {
try {
menuBar = new JMenuBar();
menuBar.setBorder(new BevelBorder(BevelBorder.RAISED));
objects = new JMenu("Objects");
objects.setMnemonic(KeyEvent.VK_O);
menuBar.add(objects);
tables = new JMenu("tab");
objects.add(tables);
getQuery(tables);
users = new JMenu("Users");
users.setMnemonic(KeyEvent.VK_U);
ex1 = new JMenuItem("Example1");
ex1.addActionListener(this);
users.add(ex1);
menuBar.add(users);
}
catch(Exception e){}
}
public void getQuery(JMenu menu)
{ try {
Class.forName("oracle.jdbc.driver.OracleDriver");
con=DriverManager.getConnection("jdbc
racle:thin:@localhost:1521
rcl","scott","tiger");
Statement stmt=con.createStatement();
System.out.println("connected "+con.getClass());
ResultSet rs=stmt.executeQuery("select * from "+menu.getText());
while(rs.next()){
String name = rs.getString("tname");
m = new JMenuItem(name);
menu.add(m);
m.addActionListener(this);
}
}catch(Exception e){}
}
public void actionPerformed(ActionEvent event){
JMenuItem source=(JMenuItem)event.getSource();
submenu=source.getText();
JScrollPane jp=null;;
JTextArea area=new JTextArea(5,40);
if(submenu.equalsIgnoreCase("Example1")){
area.setVisible(true);
area.setLineWrap(true);
area.setText("hello");
jp=new JScrollPane(area);
JPanel p=new JPanel();
p.add(jp);
reportsPanel.add(p);
repaint();
}
else
{
PopulationRunnable populationRunnable = new PopulationRunnable();
Thread populationThread = new Thread(populationRunnable);
populationThread.start();
}
}
public void setReportsPanel()
{
reportsPanel = new JPanel();
reportsPanel.setBackground(Color.WHITE);
reportsPanel.setLayout(new BorderLayout());
reportsPanel.add(menuBar,BorderLayout.NORTH);
}
private void setTabbedPanels()
{
tabPane=new JTabbedPane();
tabPane.setBackground(Color.LIGHT_GRAY);
tabPane.setFont(new Font("Arial",Font.PLAIN,18));
tabPane.addTab("Reports",reportsPanel);
add(tabPane);
}
public static void main(String[] args)
{ SwingUtilities.invokeLater(new Runnable(){
public void run(){
System.out.println("Building the frame");
JFrame frmFrame = new JFrame();
ContentPanelDemo cPanel = new ContentPanelDemo();
frmFrame.setContentPane(cPanel);
frmFrame.setSize(new Dimension(650, 400));
frmFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frmFrame.setVisible(true);
frmFrame.show();
}
});
}
private static void setJMenuBar(JMenuBar menuBar2) {
// TODO Auto-generated method stub
}
private class PopulationRunnable implements Runnable {
public void run() {
JPanel totalGUI = new JPanel();
Vector data=new Vector();
JTable table=null;
String[] title = {"Object Id", "Object Name"};
Vector vtitle=new Vector();
vtitle.addElement("Object Id");
vtitle.addElement("Object Name");
try{
String queryString="select * from "+submenu;
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery(queryString);
Vector vdata;
Vector cdata=new Vector();
String id=null;
String name=null,type=null;
while(rs.next()){
id=rs.getString(1);
name=rs.getString(2);
vdata=new Vector();
vdata.addElement(id);
vdata.addElement(name);
data.addElement(vdata);
}
DefaultTableModel model = new DefaultTableModel(data,vtitle);
table=new JTable(model){
public boolean isCellEditable(int rowIndex, int colIndex) {
return false; //Disallow the editing of any cell
}
};
table.setModel(model);
table.setPreferredScrollableViewportSize(new Dimension(500, 70));
System.out.println("size of data vector"+data.size());
JScrollPane scrollPane = JTable.createScrollPaneForTable(table);
scrollPane.setPreferredSize(new Dimension(600,400));
reportsPanel.add(scrollPane,BorderLayout.CENTER);
reportsPanel.repaint();
reportsPanel.revalidate();
}
catch(Exception e){e.printStackTrace();}
}
}
}
please provide the oracle class,username and password as per your system settings and run the code. in this code if i get the contents of emp table first then click on dept table then i am able to get the contents of dept table but when i click or scroll the table i am getting the contents of emp table only. this happens if i minimize or shuffle the windows. another thing i would like to know that when i click on Example1 menuitem i should get another panel where i can add some components as per my requirements. hope you understand......