How to add column name to my java table? (from database) - java

Hi so i was wondering why my the Jtable didnt have any column title however it does have the data from my postgres db
I want to be able to choose a column title for each data
public class aaaaa extends JFrame {
private JPanel contentPane;
private static JTable table;
/**
* Launch the application.
*/
public static void main(String[] args) {
Connection c = null;
Statement stmt = null;
try{
Class.forName("org.postgresql.Driver");
c = DriverManager
.getConnection("jdbc:postgresql://localhost:5432/MovieDatabase",
"postgres", "password");
c.setAutoCommit(false);
System.out.println("Opened database successfully");
stmt = c.createStatement();
ResultSet rs = stmt.executeQuery( "SELECT * FROM film" );
table = new JTable(buildTableModel(rs));
while ( rs.next() ) {
int filmid = rs.getInt("filmid");
String filmtitle = rs.getString("filmtitle");
int filmyear = rs.getInt("filmyear");
String filmgenre = rs.getString("filmgenre");
System.out.println( "ID = " + filmid );
System.out.println( "TITLE = " + filmtitle );
System.out.println( "YEAR = " + filmyear );
System.out.println( "GENRE = " + filmgenre );
System.out.println();
}
rs.close();
stmt.close();
c.close();
}catch ( Exception e ) {
System.err.println( e.getClass().getName()+": "+ e.getMessage() );
System.exit(0);
}
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
aaaaa frame = new aaaaa();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public aaaaa() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 411);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
table.setBounds(10, 11, 414, 350);
contentPane.add(table);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(10, 11, 414, 350);
contentPane.add(scrollPane);
}
public static DefaultTableModel buildTableModel(ResultSet rs)
throws SQLException {
ResultSetMetaData metaData = rs.getMetaData();
// names of columns
Vector<String> columnNames = new Vector<String>();
int columnCount = metaData.getColumnCount();
for (int column = 1; column <= columnCount; column++) {
columnNames.add(metaData.getColumnName(column));
}
// data of the table
Vector<Vector<Object>> data = new Vector<Vector<Object>>();
while (rs.next()) {
Vector<Object> vector = new Vector<Object>();
for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) {
vector.add(rs.getObject(columnIndex));
}
data.add(vector);
}
return new DefaultTableModel(data, columnNames);
}
}
Thanks for ur help.

You are using your table outside of a scrollpane. If you really wish to use the JTable in a standalone view, you can get the headers using getTableHeader():
JTableHeader header = table.getTableHeader();
And then add the header to where you want it to be.
The other, more prefered, way would be to simply add the table to a scrollpane:
contentPane.add(new JScrollPane(table));
See here:
https://docs.oracle.com/javase/7/docs/api/javax/swing/JTable.html
Note that if you wish to use a JTable in a standalone view (outside of a JScrollPane) and want the header displayed, you can get it using getTableHeader() and display it separately.

Related

Refresh JScrollPane JTable Data on JPanel in JFrame

I wnat to fill my Table with new Datas which i get by my DataBase(MySQL). I get all datas and create a new Model with them, but if i want to refresh the specific panel, then it wont be repainted.
public class PanelWest extends JPanel implements ActionListener {
private JButton but_selectBP;
private JButton but_selectBPAdr;
private JButton but_selectGerichte;
private GroupLayout layoutGroup;
private Connector stmtExecuter = new Connector();
// private PanelCenter tableViewer = new PanelCenter();
public PanelWest() {
layoutGroup = createLayout();
this.setLayout(layoutGroup);
createButtons();
}
private GroupLayout createLayout() {
GroupLayout layout = new GroupLayout(this);
layout.setAutoCreateGaps(true);
layout.setAutoCreateContainerGaps(true);
return layout;
}
void createButtons() {
this.but_selectBP = new JButton("Kunden anzeigen");
this.but_selectBP.addActionListener(this);
this.but_selectBPAdr = new JButton("Gerichte anzeigen");
this.but_selectBPAdr.addActionListener(this);
this.but_selectGerichte = new JButton("Lieferanten anzeigen");
this.but_selectGerichte.addActionListener(this);
this.layoutGroup.setHorizontalGroup(layoutGroup.createParallelGroup().addComponent(but_selectBP).addComponent(but_selectBPAdr).addComponent(but_selectGerichte));
this.layoutGroup.setVerticalGroup(layoutGroup.createSequentialGroup().addComponent(but_selectBP).addComponent(but_selectBPAdr).addComponent(but_selectGerichte));
}
#Override
public void actionPerformed(ActionEvent e) {
Object src = e.getSource();
if (src.equals(this.but_selectBP)) {
String query = "SELECT * FROM Kunde";
ResultSet rst = this.stmtExecuter.getResultDBData(query);
// this.tableViewer.setTableName("Kunde");
new PanelCenter().createTable(fillHeader(rst), fillData(rst));
}
if (src.equals(this.but_selectBPAdr)) {
String query = "SELECT * FROM Gericht";
ResultSet rst = this.stmtExecuter.getResultDBData(query);
// this.tableViewer.createTable(fillHeader(rst), fillData(rst));
}
if (src.equals(this.but_selectGerichte)) {
String query = "SELECT * FROM Lieferant";
ResultSet rst = this.stmtExecuter.getResultDBData(query);
// this.tableViewer.createTable(fillHeader(rst), fillData(rst));
}
}
private String[] fillHeader(ResultSet rst) {
try {
ResultSetMetaData rstMetaData = rst.getMetaData();
String[] header = new String[rstMetaData.getColumnCount()];
ArrayList<String> headerDetails = new ArrayList<>();
for (int i = 1; i <= rstMetaData.getColumnCount(); i++) {
headerDetails.add(rstMetaData.getColumnName(i));
}
int j = 0;
for(String head : headerDetails){
header[j] = head;
j++;
}
return header;
} catch (SQLException se) {
se.printStackTrace();
}
return null;
}
private Object[][] fillData(ResultSet rst) {
try {
ResultSetMetaData rstMetaData = rst.getMetaData();
int rowCount = 0;
rst.last();
rowCount = rst.getRow();
System.out.println(rowCount + " Rows");
rst.beforeFirst();
Object[][] data = new Object[rowCount][rstMetaData.getColumnCount()];
int row = 0;
while (rst.next()) {
for (int i = 0; i < rstMetaData.getColumnCount(); i++) {
data[row][i] = rst.getObject(i + 1);
}
row++;
}
return data;
} catch (SQLException se) {
System.out.println("Hier bei Fill");
}
return null;
}
}
I use remove, add revalidate and repaint on my jpanel.
void createTable(String[] header, Object[][] data) {
this.tableData = new JTable();
this.tableData.setModel(new MyTableModel(header, data));
this.tableData.setFillsViewportHeight(true);
this.tableData.addKeyListener(this);
this.scrollPaneTable = new JScrollPane(tableData);
this.scrollPaneTable.setSize(500, 500);
this.remove(this.scrollPaneTable);
this.add(this.scrollPaneTable);
this.revalidate();
this.repaint();
}
You don't need to reinitialize the table, table model.
Put some global variables on the top
private MyTableModel tableModel; //Your own table model
private JTable table;
Initialize them on init
public PanelWest() {
layoutGroup = createLayout();
this.setLayout(layoutGroup);
createButtons();
tableModel = new MyTableModel(header, data); //Your own tablemodel
table = new JTable(tableModel); //Hook the model to your table
this.add(table)
//...Do other things else to your table
}
Once you want to update the table, simply clear the rows from the table model and fill with new rows.
And ask JTable to update its data by calling
void createTable(String[] header, Object[][] data){
int cols = header.length;
int rows = data.length;
//Remove all rows from model
tableModel.setRowCount(0); //(As said by HovercraftFullOfEels)
Object[] row = new Object[cols];
for (int j = 0; j < data.length; j++){
for (int i = 0; i < cols; i++){
row[i] = data[j][i];
}
tableModel.addRow(row);
}
tableModel.fireTableDataChanged();
}
Hope it will help.
Thanks for your help.
I add a small test to my createTable method. I create a new window to show the new table datas and it works. i think my jpanel doesn't repaint correctly cause my grouplayout.
this.tableData = new JTable();
this.tableData.setModel(new MyTableModel(header, data));
this.tableData.setFillsViewportHeight(true);
this.tableData.addKeyListener(this);
this.scrollPaneTable = new JScrollPane(tableData);
this.scrollPaneTable.setSize(500, 500);
this.layoutGroup.setVerticalGroup(layoutGroup.createSequentialGroup().addComponent(this.scrollPaneTable, 400, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(this.scrollPaneChanges).addComponent(this.but_user).addComponent(this.but_dataChange));
// JFrame fr = new JFrame("Hello");
// fr.setLayout(null);
// fr.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
// fr.setVisible(true);
// fr.add(this.scrollPaneTable);

How do I refresh a JTabbedPane tab when the item tab has been clicked?

I'm currently working on a Java application that uses JTabbedPane.
I would like to refresh a tab in JTabbedPane, but when I click on the "tab" item the tab does not refresh.
What could be the problem?
public class MainClass
extends JFrame
{
private JTabbedPane tabbedPane;
private JPanel panel1;
private JPanel panel2;
private JPanel panel3;
public JPanel panel4;
private JPanel panel5;
public MainClass()
{
setTitle( "Demandes d'autorisation d'absence" );
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize( 800 ,400 );
setBackground( Color.gray );
JPanel topPanel = new JPanel();
topPanel.setLayout( new BorderLayout() );
getContentPane().add( topPanel );
// Create the tab pages
createPage1();
createPage2();
createPage3();
createPage4();
createPage5();
// Create a tabbed pane
tabbedPane = new JTabbedPane();
tabbedPane.addTab( "Mise à jour", panel1 );
tabbedPane.addTab( "Demandes en cours", panel2 );
tabbedPane.addTab( "Demandes autorisées", panel3 );
tabbedPane.addTab( "Demandes autorisées mise à jour", panel4 );
tabbedPane.addTab( "A propos", panel5 );
topPanel.add( tabbedPane, BorderLayout.CENTER );
}
public void createPage1()
{
panel1 = new JPanel();
panel1.setLayout( null );
JLabel label1 = new JLabel( "Mise à jour des autorisations :" );
label1.setBounds( 10, 15, 300, 20 );
panel1.add( label1 );
JButton b = new JButton("Actualiser");
b.setBounds( 10, 55, 150, 20 );
b.addActionListener(new miseajour());
panel1.add( b );
}
public void createPage2()
{
panel2 = new JPanel();
panel2.setLayout( null );
ArrayList columnNames = new ArrayList();
ArrayList data = new ArrayList();
// Connect to an MySQL Database, run query, get result set
Connection con = null;
Statement st = null;
ResultSet rs = null;
String url = "jdbc:mysql://localhost:3306/Autorisations";
String user = "root";
String password = "root";
try {
con = DriverManager.getConnection(url, user, password);
st = con.createStatement();
rs = st.executeQuery("SELECT * FROM Autorisations where etat='en cours'");
{
ResultSetMetaData md = rs.getMetaData();
int columns = md.getColumnCount();
// Get column names
for (int i = 1; i <= columns; i++)
{
columnNames.add( md.getColumnName(i) );
}
// Get row data
while (rs.next())
{
ArrayList row = new ArrayList(columns);
for (int i = 1; i <= columns; i++)
{
row.add( rs.getObject(i) );
}
data.add( row );
}
}}
catch (SQLException e)
{
System.out.println( e.getMessage() );
}
// Create Vectors and copy over elements from ArrayLists to them
// Vector is deprecated but I am using them in this example to keep
// things simple - the best practice would be to create a custom defined
// class which inherits from the AbstractTableModel class
Vector columnNamesVector = new Vector();
Vector dataVector = new Vector();
for (int i = 0; i < data.size(); i++)
{
ArrayList subArray = (ArrayList)data.get(i);
Vector subVector = new Vector();
for (int j = 0; j < subArray.size(); j++)
{
subVector.add(subArray.get(j));
}
dataVector.add(subVector);
}
for (int i = 0; i < columnNames.size(); i++ )
columnNamesVector.add(columnNames.get(i));
// Create table with database data
JTable table = new JTable(dataVector, columnNamesVector)
{
public Class getColumnClass(int column)
{
for (int row = 0; row < getRowCount(); row++)
{
Object o = getValueAt(row, column);
if (o != null)
{
return o.getClass();
}
}
return Object.class;
}
};
JScrollPane sp = new JScrollPane( table );
sp.setBounds(10,25, 800, 1000);
panel2.add(sp);
}
public void createPage3()
{
....
}
public void createPage4()
{
....
}
public void createPage5()
{
...
}
// Main method to get things started
public static void main( String args[] )
{
// Create an instance of the test application
MainClass mainFrame = new MainClass();
mainFrame.setVisible( true );
}
If you want to know when a tab has been selected then you can use a ChangeListener.
tabbedPane.addChangeListener(...);
Then when the event fires you can get the selected index of the tabbed pane and do your processing.

Why does this JTable not update/refresh when I click button?

I'm trying to allow the user to delete a record/edit a record and then once they've done that they can click refresh and the JTable should update but it doesn't want to! Any ideas?
I have tried repaint, revalidate, validate and none of these work regardless of if i call them on the table, panel or the frame itself.
Thanks in advance :)
public class Test extends JPanel {
public Test(CardLayout card, JPanel panelCont) {
init();
}
public void init() {
System.out.println("this");
Connection c = null;
Statement stmt = null;
try {
Class.forName("org.sqlite.JDBC");
c = DriverManager.getConnection("jdbc:sqlite:test.db"); //In this case it connects to the test.db
stmt = c.createStatement();
ResultSet rs = stmt.executeQuery("SELECT COL1, COL2, COL3, COL4, COL5, COL6"
+ ", COL7, COL8, COL9 FROM DBTEST;");
JFrame frame = new JFrame("TESTDB");
JPanel panel = new JPanel();
JPanel subpan = new JPanel();
JButton delete = new JButton("Delete");
JButton refresh = new JButton("Refresh");
subpan.add(refresh);
subpan.add(delete);
panel.setLayout(new BorderLayout());
JTable table = new JTable(buildTableModel(rs));
table.getTableHeader().setReorderingAllowed(false);
panel.add(new JScrollPane(table), BorderLayout.CENTER);
panel.add(subpan, BorderLayout.SOUTH);
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
frame.setSize(1000, 500);
stmt.close();
rs.close();
c.close();
refresh.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
System.out.println("refreshed");
}
});
delete.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
int selected = table.getSelectedRow();
if (selected == -1) {
JOptionPane.showMessageDialog(null, "No row selected. Please select a row.");
} else {
int reply = JOptionPane.showConfirmDialog(null, "Are you sure you wish to delete "
+ "the selected record? This cannot be undone.", "Delete Confirmation",
JOptionPane.YES_NO_OPTION);
if (reply == JOptionPane.YES_OPTION) {
Connection c = null;
Statement stmt = null;
try {
Class.forName("org.sqlite.JDBC");
c = DriverManager.getConnection("jdbc:sqlite:test.db");
c.setAutoCommit(false);
System.out.println("Opened database successfully");
stmt = c.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM VEHICLETEST;");
int y = 0;
int id = 60;
while (rs.next()) {
if (y == selected) {
id = rs.getInt("id");
}
y++;
}
String sql = "DELETE from DBTEST where COL9=" + id + ";";
stmt.executeUpdate(sql);
c.commit();
rs.close();
stmt.close();
c.close();
frame.dispose();
} catch (Exception e) {
System.err.println(e.getClass().getName() + ": " + e.getMessage());
System.exit(0);
}
}
}
}
});
} catch (Exception e) {
System.err.println(e.getClass().getName() + ": " + e.getMessage());
System.exit(0);
}
}
public static DefaultTableModel buildTableModel(ResultSet rs)
throws SQLException {
ResultSetMetaData metaData = rs.getMetaData();
// names of columns
Vector<String> columnNames = new Vector<String>();
int columnCount = metaData.getColumnCount();
for (int column = 1; column <= columnCount; column++) {
columnNames.add(metaData.getColumnName(column));
}
// data of the table
Vector<Vector<Object>> data = new Vector<Vector<Object>>();
while (rs.next()) {
Vector<Object> vector = new Vector<Object>();
for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) {
vector.add(rs.getObject(columnIndex));
}
data.add(vector);
}
return new DefaultTableModel(data, columnNames);
}
}

how to refresh JTable

I'm making a simple program that show the teams, the matches and racking goal of Euro2016 in France.
I have some problem with JTable when changing query.
Here is what happens:
when I change from a Table of (for example) 10 rows to another one that contains only 5 rows it works. But if I change from a table that contains 5 rows to another of 10, the table doesn't change, it displays only 5 rows.
Here the code:
public class Euro2016GUI extends JFrame {
private Container container;
private Sfondo pnlSfondo;
JTable table;
JPanel panel;
static Vector<Vector<String>> data = new Vector<Vector<String>>();
static Vector<String> headers = new Vector<String>();
public Euro2016GUI() {
data.removeAll(data);
headers.removeAll(headers);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(600, 400);
this.setTitle("Euro2016");
this.setLocationRelativeTo(null);
pnlSfondo = new Sfondo();
container = this.getContentPane();
container.add(pnlSfondo);
}
public void createTable(String pQuery) {
data.removeAll(data);
headers.removeAll(headers);
Control control = new Control();
panel = new JPanel(new BorderLayout());
panel.setSize(300, 300);
panel.setBackground(Color.red);
control.getData(pQuery);
data = control.getData();
headers = control.getHeaders();
//this is the model which contain actual body of JTable
DefaultTableModel model = new DefaultTableModel(data, headers);
table = new JTable(model);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.setEnabled(false);
table.setMaximumSize(new Dimension(100, 300));
header_size();
JScrollPane scroll = new JScrollPane(table);
//scroll.setSize(600, 400);
scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
this.getContentPane().add(panel);
panel.add(scroll, BorderLayout.CENTER);
}
public void header_size() {
int colonne = table.getColumnModel().getColumnCount();
TableColumn column;
for (int i = 0; i < colonne; i++) {
column = table.getColumnModel().getColumn(i);
column.setPreferredWidth(200);
}
}
public void cleanData() {
if (table != null) {
DefaultTableModel dm = (DefaultTableModel) table.getModel();
dm.setRowCount(0);
table.revalidate();
}
data.removeAll(data);
headers.removeAll(headers);
}
}
CLASS CONTROL
public class Control {
private static Vector<Vector<String>> data = new Vector<Vector<String>>();
private static Vector<String> headers = new Vector<String>();
public void getData(String pQuery) {
// Enter Your MySQL Database Table name in below Select Query.
String query = pQuery;
Connection con = null;
ResultSet rs;
Statement st = null;
int colonne = 0;
data.removeAll(data);
headers.removeAll(headers);
try {
con = DBConnectionPool.getConnection();
st = con.createStatement();
rs = st.executeQuery(query);
ResultSetMetaData rsmd = rs.getMetaData();
colonne = rsmd.getColumnCount();
for (int i = 1; i <= colonne; i++) {
headers.add(rsmd.getColumnName(i));
}
while (rs.next()) {
Vector<String> d = new Vector<String>();
for (int i = 1; i <= colonne; i++) {
d.add(rs.getString(i));
}
data.add(d);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (st != null) {
try {
st.close();
} catch (SQLException ex) {
Logger.getLogger(DataInJTable.class.getName()).log(Level.SEVERE, null, ex);
}
}
if (con != null) {
DBConnectionPool.releaseConnection(con);
}
}
}
public Vector<Vector<String>> getData() {
return this.data;
}
public Vector<String> getHeaders() {
return this.headers;
}
}
HERE THE ACTION LISTENER IN THE MENU:
...
//----ROSE---//
private class OnClickRose implements ActionListener {
Sfondo sfondo;
#Override
public void actionPerformed(ActionEvent e) {
String str = e.getActionCommand();
str = str.replace("[", "");
str = str.replace("]", "");
String sx = "'";
String dx = "'";
String query = query2.concat(sx.concat(str.concat(dx)));
//frame.cleanData();
sfondo = frame.getPnlSfondo();
if (sfondo.isVisible() && sfondo.getParent().isVisible()) {
sfondo.setVisible(false);
}
frame.createTable(query);
}
}
//----CALENDARIO----//
private class OnClickCalendario implements ActionListener {
Sfondo sfondo;
#Override
public void actionPerformed(ActionEvent e) {
frame.cleanData();
sfondo = frame.getPnlSfondo();
if (sfondo.isVisible() && sfondo.getParent().isVisible()) {
sfondo.setVisible(false);
}
frame.createTable(query4);
}
}
//----CLASSIFICA MARCATORI----//
private class OnClickMarcatori implements ActionListener {
Sfondo sfondo;
#Override
public void actionPerformed(ActionEvent e) {
frame.cleanData();
sfondo = frame.getPnlSfondo();
if (sfondo.isVisible() && sfondo.getParent().isVisible()) {
sfondo.setVisible(false);
}
frame.createTable(query3);
}
}
...
Could anybody tell me where I wrong?
Basically to tell the table to refresh itself, you just call the method fireTableDataChanged() of it's table model.
So in your example, after you run the query, you could just call:
((DefaultTableModel)yourTable.getModel()).fireTableDataChanged();
But I suggest you to stop using default table model, and implement your own table model. It's a lot easier to work.

How keep ResultSet open in java?

I'm passing values for a java file which creates a JTable.
ResultSet res = np.InvestmentByInvestType(IType);
String tablename = "Investment By Invest Type";
int customAmt = np.showCustomizeInvestAmount1(IType);
CommonTable ct = new CommonTable();
ct.CommonSearchTable(res, customAmt,tablename);
I created a button in CommonSearchTable to export the JTable data using the ResultSet. But it showing error "Operation not allowed after ResultSet closed". A method in CommonSearchTable.java is as below:
public void CommonSearchTable( final ResultSet res, int totally, final String tablename) throws SQLException
{
JButton exportTable= new JButton ("Export");
ResultSetMetaData metaData = res.getMetaData();
// names of columns
Vector<String> columnNames = new Vector<String>();
int columnCount = metaData.getColumnCount();
for (int column = 1; column <= columnCount; column++)
{
columnNames.add(metaData.getColumnName(column));
}
// data of the table
Vector<Vector<String>> data = new Vector<Vector<String>>();
while (res.next())
{
Vector<String> vector = new Vector<String>();
for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++)
{
vector.add(res.getString(columnIndex));
}
data.add(vector);
}
model1 = new DefaultTableModel(data, columnNames);
JTable table = new JTable(model1);
int rows = table.getRowCount();
Sorter = new TableRowSorter<DefaultTableModel> (model1);
table.setRowSorter(Sorter);
showSearchPages(30, 1);
table.setModel(model1);
String showTotal = "Total Amount : Rs."+totally+"/-";
JPanel footer = new JPanel();
JLabel show = new JLabel(showTotal);
box1.setBounds(10,30,800,30);
show.setBounds(10, 60, 100, 30);
show.setFont(new Font("Tahoma",Font.BOLD,16));
footer.add(box1);
footer.add(show);
footer.setPreferredSize(new Dimension(800,100));
JPanel holdingPanel = new JPanel(null);
JScrollPane sp = new JScrollPane(table);
JButton print = new JButton ("Print");
print.setBounds(10,10,100,30);
exportTable.setBounds(120,10,100,30);
sp.setBounds(10,50,780,580);
holdingPanel.add(print);
holdingPanel.add(exportTable);
holdingPanel.add(sp);
JFrame f = new JFrame("Search Results");
f.getContentPane().add(holdingPanel,BorderLayout.CENTER);
f.getContentPane().add(sp.getVerticalScrollBar(),BorderLayout.EAST);
f.getContentPane().add(footer,BorderLayout.SOUTH);
f.setPreferredSize(new Dimension(850,680));
f.pack();
f.setLocationRelativeTo(null);
f.dispose();
f.setResizable(false);
f.setIconImage(img.getImage());
f.setVisible(true);
exportTable.addActionListener(new ActionListener()
{
#Override
public void actionPerformed(ActionEvent aev)
{
try
{
ExportFile ef = new ExportFile();
ef.WriteFile(res, tablename);
}
catch (SQLException | IOException ex)
{
Logger.getLogger(CommonTable.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
print.addActionListener(new ActionListener()
{
#Override
public void actionPerformed(ActionEvent e)
{
PrinterJob printJob = PrinterJob.getPrinterJob();
if (printJob.printDialog())
try
{
printJob.print();
}
catch(PrinterException pe)
{
}
}
});
}
Please show me the way.
As you can read in the docs for Resultset:
A ResultSet object is automatically closed when the Statement object
that generated it is closed, re-executed, or used to retrieve the next
result from a sequence of multiple results.
This means you have to copy the result data into another data structure (like a list, map, whatever suits your needs) before closing the database connection.
Look at this example this will help you. In this example we fetch all data from database on jcombobox actionlistener. Change this according to your need.
class Credit extends JFrame implements ActionListener{
private String value4="0";
private String val="0";
private String val1="0";
private String jama="0",baki="0";
private String nettdate="0",nettb="0",nettbal="0";
private int row=0,count=0,aa=0,bb=0,t1=0;
private String tj1="0",tb1="0",gt1="0";
String h[]={"TID","Date","Jama","Baki","Nett"};
private TableModel buildTableModel(ResultSet rs) throws SQLException {
ResultSetMetaData metaData = rs.getMetaData();
// names of columns
Vector<String> columnNames = new Vector<String>();
int columnCount = metaData.getColumnCount();
for (int column = 0; column < columnCount; column++) {
//columnNames.add(metaData.getColumnName(column));
columnNames.add(h[column]);
}
// data of the table
//Vector<Object> vector = new Vector<Object>();
//Vector<Object> vector1 = new Vector<Object>();
Vector<String> vector1 = new Vector<String>();
Vector<String> vector2 = new Vector<String>();
Vector<Vector<String>> data = new Vector<Vector<String>>();
//Vector<Vector<Object>> data = new Vector<Vector<Object>>();
while (rs.next()) {
//for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) {
Vector<String> vector = new Vector<String>();
//vector.add(rs.getString(columnIndex));
vector.add(rs.getString(1));
vector.add(rs.getString(2));
vector.add(rs.getString(3));
vector.add(rs.getString(4));
vector.add(rs.getString(5));
// System.out.println(vector);
//}
count++;
data.add(vector);
//System.out.println(data.get(0).get(0));
}
for(int i=0;i<count;i++){
//aa=aa+Integer.parseInt(data.get(i).get(2));
aa=aa+Integer.parseInt(table.getValueAt(i, 2).toString());
System.out.println(table.getValueAt(i, 2).toString());
System.out.println("A:"+aa);
//bb=bb+Integer.parseInt(data.get(i).get(3));
bb=bb+Integer.parseInt(table.getValueAt(i, 3).toString());
System.out.println(table.getValueAt(i, 3).toString());
System.out.println("B:"+bb);
}
tj1=Integer.toString(aa);
System.out.println("TJ:"+tj1);
//header1 = new Vector<String>();
vector1.add("");
vector1.add("Total");
vector1.add(tj1);
tb1=Integer.toString(bb);
//header1 = new Vector<String>();
//header3.add("Total");
vector1.add(tb1);
vector1.add("");
//data1.setSize(table1.getRowCount()+1);
//data1.set(table1.getRowCount()-1, header3);
//data.setSize(count++);
//data.setSize(table.getRowCount()+1);
//data.set(count, header2);
System.out.println("h2:"+vector1);
data.add(vector1);
System.out.println("data:"+data);
//data.set(table.getRowCount()-1, header2);
t1=Integer.parseInt(tb1)-Integer.parseInt(tj1);
gt1=Integer.toString(t1);
System.out.println("GT:"+gt1);
vector2.add("");
vector2.add("Nett Balance");
//header4.add("");
vector2.add("");
vector2.add(gt1);
vector2.add("");
//data.setSize(table.getRowCount()+1);
//data.setSize(count++);
data.add(vector2);
System.out.println("data1:"+data);
//data.set(count, header3);
//data.set(table.getRowCount()-1, header3);
//header2.add("");
count=0;
aa=0;
bb=0;
t1=0;
tj1="0";
tb1="0";
gt1="0";
return new DefaultTableModel(data, columnNames);
}
private static final int GAP = 5;
private static final Font BTN_FONT = new Font(Font.DIALOG, Font.PLAIN, 15);
private JPanel mainPanel = new JPanel();
JButton add,cancel,show,search,print,update,delete,net;
JTextField jTextField,jTextField1,jTextField2,jTextField3,jTextField4,jTextField5;
JComboBox jComboBox;
String Select[]={"Select"};
Object name,s1;
String an="0",nam="0",mono="0",cit="0";
int token=0,tid=1,a,stid=0;
JFrame f;
AbstractAction action;
private String id;
Connection con=null;
Statement st=null;
ResultSet rs=null;
//private String stid;
JPanel tablePanel;
DefaultTableModel model;
DefaultTableModel model1;
JTable table,table3;
private Vector<Vector<String>> data; //used for data from database
private Vector<Vector<String>> data1; //used for data from database
private Vector<String> header; //used to store data header
private Vector<String> header2; //used to store data header
private Vector<String> header3;
private Vector<String> header4;
private JLabel jlab4,jlab5,jlab6,jlab7;
Credit(JFrame frm){
Toolkit tk=Toolkit.getDefaultToolkit();
Image img=tk.getImage("1.jpg");
setIconImage(img);
JPanel creditPanel = createPanel1("Customer Credit & Debit Amount");
tablePanel = createPanel2("Customer Credit & Debit Table");
creditPanel.setBackground(Color.WHITE);
tablePanel.setBackground(Color.WHITE);
mainPanel.setLayout(new BorderLayout());
mainPanel.setBorder(BorderFactory.createEmptyBorder(GAP, GAP, GAP, GAP));
mainPanel.add(creditPanel, BorderLayout.PAGE_START);
mainPanel.add(tablePanel, BorderLayout.CENTER);
creditPanel.setVisible(true);
mainPanel.setBackground(Color.BLACK);
frm.add(mainPanel);
}
private JPanel createPanel2(String title){
tablePanel=new JPanel();
tablePanel.setLayout(new BoxLayout(tablePanel,BoxLayout.Y_AXIS));
header = new Vector<String>();
header.add("TID");
header.add("Date");
header.add("Jama");
header.add("Baki");
header.add("Nett");
header4 = new Vector<String>();
header4.add("A/C No.");
header4.add("Name");
//header4.add("Date");
header4.add("Mobile");
header4.add("City");
model=new DefaultTableModel(data,header);
model1=new DefaultTableModel(data1,header4);
table = new JTable(model);
table3 = new JTable(model1);
table.setRowSorter(new TableRowSorter(model));
table.setRowHeight(30);
table3.setRowHeight(30);
table.setFont(new Font("Times New Roman",Font.BOLD,15));
table3.setFont(new Font("Times New Roman",Font.BOLD,15));
table.getTableHeader().setFont( new Font( "Times New Roman" , Font.BOLD, 15 ));
table3.getTableHeader().setFont( new Font( "Times New Roman" , Font.BOLD, 15 ));
table.setDefaultRenderer(Object.class, new TableCellRenderer(){
table3.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table3.getColumnModel().getColumn(0).setPreferredWidth(123);
table3.getColumnModel().getColumn(1).setPreferredWidth(250);
table3.getColumnModel().getColumn(2).setPreferredWidth(123);
table3.getColumnModel().getColumn(3).setPreferredWidth(125);
JScrollPane scroll=new JScrollPane(table);
JScrollPane scroll1=new JScrollPane(table3);
scroll1.setPreferredSize(new Dimension(50,63));
JPanel p=new JPanel();
JButton btn=new JButton("Print");
JButton btn1=new JButton("Export");
p.add(btn);
p.add(btn1);
tablePanel.add(p);
tablePanel.add(scroll1);
tablePanel.add(scroll);
tablePanel.setBorder(BorderFactory.createTitledBorder(title));
return tablePanel;
}
private JPanel createPanel1(String title) {
JPanel addUnitPanel = new JPanel();
addUnitPanel.setLayout(new GridLayout(4,1, GAP, GAP));
JLabel jlab=new JLabel("Name:");
jComboBox=new JComboBox(Select);//Select
jlab.setPreferredSize(new Dimension(100,10));
jComboBox.setPreferredSize(new Dimension(150,30));
jComboBox.addActionListener(new ActionListener(){
private int b=0,a=0;
private String tj="0";
private String tb="0";
private int t=0;
private String gt="0";
public void actionPerformed(ActionEvent ae){
try
{
Connection con=null;
Statement st=null;
ResultSet rs=null;
// ResultSet rs1=null;
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url=null,userID=null,password=null;
String dbFileName=null;
String sql=null;
dbFileName = "C:/Program Files/Shop/shop.accdb";
//userID = "Admin";
password = "3064101991";
url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};"+
"DBQ="+dbFileName+";"+
"Pwd="+password+";";
//sql = "SELECT * FROM tblUserProfile";
Object name=jComboBox.getSelectedItem();
con=DriverManager.getConnection(url);//,"system","manager"
st=con.createStatement();
model.setRowCount(0);
model1.setRowCount(0);
b=0;
a=0;
tj="0";
tb="0";
t=0;
gt="0";
an="0";nam="0";mono="0";cit="0";
DBEngine dbengine = new DBEngine();
data = dbengine.getJamaCustomer(name);
data1 = dbengine.getIdName(name);
System.out.println("data:"+data1);
Object[] d3={data1.get(0).get(0),data1.get(0).
get(1),data1.get(0).get(3),data1.get(0).get(4)};
model1.addRow(d3);
JTable table1=new JTable(data,header);
for(int i=0;i<table1.getRowCount();i++){
Object[] d={data.get(i).get(0),data.get(i).get(1),
data.get(i).get(2),data.get(i).get(3),data.get(i).get(4)};
model.addRow(d);
}
for(int i=0;i<table1.getRowCount();i++){
a=a+Integer.parseInt(data.get(i).get(2));
b=b+Integer.parseInt(data.get(i).get(3));
}
tj=Integer.toString(a);
tb=Integer.toString(b);
Object[] d1={"","Total",tj,tb,""};
model.addRow(d1);
t=Integer.parseInt(tb)-Integer.parseInt(tj);
gt=Integer.toString(t);
Object[] d2={"","Nett Balance","",gt,""};
model.addRow(d2);
table = new JTable(model);
table3 = new JTable(model1);
table.setRowHeight(30);
table3.setRowHeight(30);
JScrollPane scroll=new JScrollPane(table);
JScrollPane scroll1=new JScrollPane(table3);
//scroll.setBackground(Color.red);
tablePanel.add(scroll1);
tablePanel.add(scroll);
rs.close();
// rs1.close();
st.close();
con.close();
}
catch(Exception e)
{
System.out.println("GG"+e);
}
}
});
JPanel p1=new JPanel();
p1.add(jlab);
p1.add(jComboBox);
addUnitPanel.add(p1);
loadcombo2();
addUnitPanel.setBorder(BorderFactory.createTitledBorder(title));
return addUnitPanel;
}
void loadcombo2()
{
try
{
Connection con=null;
Statement st=null;
ResultSet rs=null;
// ResultSet rs1=null;
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url=null,userID=null,password=null;
String dbFileName=null;
String sql=null;
dbFileName = "C:/Program Files/Shop/shop.accdb";
//userID = "Admin";
password = "3064101991";
url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};"+
"DBQ="+dbFileName+";"+
"Pwd="+password+";";
//sql = "SELECT * FROM tblUserProfile";
con=DriverManager.getConnection(url);//,"system","manager"
st=con.createStatement();
rs= st.executeQuery("select distinct(Name) from ManageCustomer");
//rs1=st.executeQuery("select Unit from AddUnit");
while(rs.next())
{
jComboBox.addItem(rs.getString(1));
//jComboBox1.addItem(rs1.getString(1));
}
rs.close();
// rs1.close();
st.close();
con.close();
}
catch(Exception e)
{
System.out.println("GG"+e);
}
}
#Override
public void actionPerformed(ActionEvent ae){
if(ae.getSource()==print){
//Your print code
}
if(ae.getSource()==Export){
//Add jComboBox.addActionListener code here
}
}
public static void main(String args[]){
JFrame frm=new JFrame("Title");
Credit b=new Credit(frm);
//frm.setSize(650, 236);
frm.setSize(650, 700);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setResizable(false);
frm.setLocationRelativeTo(null);
frm.show();
}
}

Categories