We help IT Professionals succeed at work.

Check out our new AWS podcast with Certified Expert, Phil Phillips! Listen to "How to Execute a Seamless AWS Migration" on EE or on your favorite podcast platform. Listen Now

x

How to show resize indicator when user want to resize Jtable header.

hello_kets
hello_kets asked
on
Medium Priority
1,128 Views
Last Modified: 2008-01-16
Hi,
  I am using the swing to draw Jtable. But i am not able to get the resize poniter indicator when user put the mouse between edges of the two column header. I want to show a pointer so that user can understand that he can resize the column size.

regards

Ketan
Comment
Watch Question

Pass your TableColumn to the JTableHeader,

setResizingColumn(TableColumn aColumn)  all the columns that you need to resize.

This way, java by default takes care of showing that cursor.


Regards,
Muruga

Author

Commented:
Please can you send the code for this.
thanx in advance.

ketan

Author

Commented:
I used
*****************************
JTableHeader header = table.getTableHeader();
header.setResizingAllowed(true);

for(int i = 0; i < table.getColumnCount() ; i++)
{
     header.setResizingColumn(table.getColumnModel().getColumn(i));
}

******************************
but still it is not working.

Ketan
Mayank SPrincipal Technologist
CERTIFIED EXPERT

Commented:
As far as I know, you don't need to set it at all, because it is resizable by default. I guess you must be setting it to non-resizable or something. Have you set your JTable to enabled ( false ) or something like that? Can you post your updated code?
Mayank SPrincipal Technologist
CERTIFIED EXPERT

Commented:
I tested some sample code for a JTable.... even if you set table.setEnabled ( false ), the columns are still resizable.
Mayank SPrincipal Technologist
CERTIFIED EXPERT

Commented:
Have you used table.setAutoResizeMode () anywhere?
Mayank SPrincipal Technologist
CERTIFIED EXPERT

Commented:
Try: table.setAutoResizeMode ( JTable.AUTO_RESIZE_ALL_COLUMNS ) ;

(I hope you are not doing table.setAutoResizeMode ( JTable.AUTO_RESIZE_OFF ) ; anywhere).
Mayank SPrincipal Technologist
CERTIFIED EXPERT

Commented:
See the JTable examples from the Java developer's almanac:

http://www.javaalmanac.com/cgi-bin/search/find.pl?words=JTable

Author

Commented:
Hi all,
  I think our subject is diverting. I am able to resize the columns but i want so show '<-->' between header edge. I have set the parameters like.

********
table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
table.setAutoCreateColumnsFromModel(false);
table.getTableHeader().setReorderingAllowed(false);
JTableHeader header = table.getTableHeader();
header.setResizingAllowed(true);
for(int i = 0; i < table.getColumnCount() ; i++)
{
     header.setResizingColumn(table.getColumnModel().getColumn(i));
}
********************************

Ketan

Mayank SPrincipal Technologist
CERTIFIED EXPERT

Commented:
I guess that if the columns are resizable then the user will be able to see the '<-->' between the header-edges of the columns. Try this sample code and tell me if it shows it to you the way you want:

import javax.swing.* ;
import java.awt.* ;
import java.awt.event.* ;

class JTableTest extends JPanel
{
      JTableTest () // constructor ()
      {
            JPanel jTablePanel = new JPanel ( new BorderLayout () ) ;
            String columnNames[] = {"Title","Author","Issued","Shelf No."};
            Object objArray[][] = new Object[1][4] ;

            objArray[0][0] = "A" ;
            objArray[0][1] = "B" ;
            objArray[0][2] = "C" ;
            objArray[0][3] = "D" ;

            final JTable jTabBook = new JTable ( objArray, columnNames ) ;
            jTabBook.setEnabled ( false ) ;
            jTabBook.setSelectionMode ( ListSelectionModel.SINGLE_SELECTION ) ;
            // jTabBook.setEnabled ( false ) ;
            JScrollPane scrollPane = new JScrollPane ( jTabBook ) ;
            jTablePanel.add ( scrollPane ) ;
            jTablePanel.setBackground ( Color.white ) ;
            add ( jTablePanel ) ;
            // show () ;

      } // end of constructor ()

      public static void main(String[] args)
      {
            JFrame jfMyFrame = new JFrame () ;
            jfMyFrame.getContentPane ().add ( new JTableTest () ) ;
            jfMyFrame.setSize ( 800, 600 ) ;
            jfMyFrame.show () ;

      } // end of main ()

} // class definition over

Author

Commented:
yes your code is working fine...
I have removed all the setting of the jtable but even then it is not showing the '<-->'.
Mayank SPrincipal Technologist
CERTIFIED EXPERT

Commented:
Post your code.

Author

Commented:
Hi sorry...
i Got the answer. Actually i was setting

JScrollPane scrollPane = new JScrollPane ( jtesttable ) ;
jTablePanel.add ( scrollPane ) ;
jTablePanel.setEnabled(false);   /// Here was the problem.

when i removed the line 'jTablePanel.setEnabled(false);' its astred working.

thanx for the help.

Regards

Ketan
Mayank SPrincipal Technologist
CERTIFIED EXPERT

Commented:
That is why I posted that code ;-) so that you can see where you went wrong.
Mayank SPrincipal Technologist
CERTIFIED EXPERT

Commented:
That is also why I asked: >> Have you set your JTable to enabled ( false ) or something like that?

Because setting your table's containing Panel to disabled would automatically mean that all things inside the panel (including the JTable) would be disabled.
Principal Technologist
CERTIFIED EXPERT
Commented:
Unlock this solution and get a sample of our free trial.
(No credit card required)
UNLOCK SOLUTION
Mayank SPrincipal Technologist
CERTIFIED EXPERT

Commented:
Thanks, AI.
Unlock the solution to this question.
Thanks for using Experts Exchange.

Please provide your email to receive a sample view!

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.