How to pin a JTable column so that it won't be reordered?
Hi,
I know you could enable or disable the table column reordering through JTableHeader.getReorderingAllowed()/setReorderingAllowed(boolean) method. But does anyone know how to disable only one column to be reordered but leave all the other columns reordering enabled.
Thanks!
Hi sheilaxw,
Assuming you haven't already seen it, does this help you:
http://www.codeguru.com/java/articles/128.shtml
Good Luck,
Avi.
Similar Messages
-
How to dimension the JTable columns?
Hello All,
I would like to Know how to choose the horizontal size
of the each JTable columns , I did not find anywhere?
Thanks in advanceYou can try this:
TableColumn column = table.getColumnModel().getColumn( columnIndex );
column.setPreferredWidth( newPreferredWidth );
torsten -
Good day,
I searched through the forum and cant find anything.
I have around 300 published reports on SSRS and we are busy migrating to a new system.
They have already setup their tables on the new system and I need to provide them with a list of table names and column names that are being used currently to generate the 300 reports on SSRS.
We use various tables and databases to generate these reports, and will take me forever to go through each query to get this info.
Is it at all possible to write a query in SQL 2008 that will give me all the table names and columns being used?
Your assistance is greatly appreciated.
I thank you.
Andre.There's no straightforward method for that I guess. There are couple of things you can use to get these details
1. query the ReportServer.dbo.Catalog table
for getting details
you may use script below for that
http://gallery.technet.microsoft.com/scriptcenter/42440a6b-c5b1-4acc-9632-d608d1c40a5c
2. Another method is to run the reports and run sql profiler trace on background to retrieve queries used.
But in some of these cases the report might be using a procedure and you will get only procedure. Then its upto you to get the other details from procedure like tables used, columns etc
Please Mark This As Answer if it helps to solve the issue Visakh ---------------------------- http://visakhm.blogspot.com/ https://www.facebook.com/VmBlogs -
How to edit the JTable columns
Hi all,
please help me on this..
I created one Jtable with 0-9 columns(10 columns)and
I put only the 9th(last column) column is editable.
the problem is if I enter any text message in 9th column
and press another column then immediatly dissapears the
9th column text...
please tell me how to solve this problem .. because I want to take the
9th column text to another Object....
please send the solution anyone knows..
public boolean isCellEditable(int row, int col){
if(col == 9){
return true;
}else{
return false;
}If things go wrong while trying to edit table cells there is a good chance that you hit one of the many well known or even a new bug. These bugs are highly version dependent. So in any question please include the jdk version you are using and a very exact description of what you are seeing.
Here I assume that by "press another column" you mean "click the mouse in the header region"?
If so that's one of the well known, long-standing and not yet solved problems: jTable does cancel any edit on any notification from the columnModel - and due to suboptimal implementation of the tableHeaderUI even a single click does fire such a notification.
There is some debate about how to handle the situation but no easy or totally satisfying approach - your best bet is to search the bug parade (and google) for partial solutions and their pros and cons.
Greetings
Jeanette -
How can I save JTable column order and widths?
Hello,
I'm trying to find a way to save the current column order and widths in a JTable, so that the next time the same user runs the app I can use these same settings. Ideally I'd like to save this locally on the user's PC. I think it could probably be done with serialization, but hopefully there's a simple solution. Anyone else already tackled this?The JTableHeader class can give you all the information you through the various TableColumns.
I simply save all this information to a properties file which looks somthing like this
# Column Information
total=3
column0=Names,120
column1=Dates,140
column2=Status,110This can then be read back using a java.util..Properties object. With this information you'll need to manually set the properties of each TableColumn and use the column model to move the columns to the right position ie
cmodel.moveColumn(0,2); // move column 0 to positon 2This requires a little bit more coding to properly do the comparism of the column names with those in the properties object.
Tip: it is always easier to use the above format, ie column0, column1, column2, etc, so that you can easily use a loop to access the information form the properties object ie
int total = Integer.parseInt( prop.getProperty("total") );
for(int i = 0; i < total; i++) {
String cname = prop.getProperty("column" + i);
/// the rest of the TableColumn formatting could go here
}All the best.
ICE -
How can Amazon sell a dell product that dell won't sell - frustrating
I am trying to buy a 27" touch screen monitor. Dell's web site only has 22 and 23" touchscreen monitors. On Amazon they list two 27" touch screen monitors - 2714T and P2714T. Dell India insists they don't exist yet a search on Dell.com shows they have drivers, faqs, manuals, troubleshooting etc. What gives? When I asked to escalate they connected me with technical support. If I cannot find somebody who can help me I am going with Acer
To clarify, there is only the P2714T. There is not a 2714T. So Amazon just has it listed incorrectly. You are correct, I do not see the P2714T on the USA, UK sales sites nor do I see it on the Dell Outlet site. It is possible that Amazon bought several hundred and have them in their warehouses.
-
How to set JTable column's color?
How can I set JTable Columns' color? I only found this class DefaultTableCellRenderer
which can set cell's color.rmalina wrote:
You are going to need to derive a renderer class for your Column from DefaultTableCellRenderer and override the following function with something like this:
@Override
public Component getTableCellRendererComponent(JTable jTable, Object oValue, boolean isSelected, boolean hasFocus, int nRow, int nColumn) {
super.setForeground(Color.GREEN);
super.setBackground(Color.GREEN);
}That would set your column to green.
Edited by: rmalina on Jul 28, 2008 8:47 AMHow can I know I only change the columns' color instead of other cells? -
JTable column header to span multiple columns
Hi people. I've spent the last day trying to do this with no luck. Most of the links in the forum are old and don't exist any more and the ones that lead to some code end up not working on java 5 (I can compile and run but the result is not what I wanted)!
So my question is this, how do I have a column header that spans more than one column, which has individual column headers below it?
Thanks, Paul.
EDIT: I should point out that this is the place I've tried and although the screen shot of the first example looks exactly like what I want to do, it does not work as advertised. [http://www.crionics.com/products/opensource/faq/swing_ex/JTableExamples1.html]
Edited by: Boomah on 05-Nov-2008 15:08Something like this?import java.awt.Dimension;
import java.awt.GridLayout;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.TableColumnModelEvent;
import javax.swing.event.TableColumnModelListener;
import javax.swing.table.*;
public class MultiSpanHeader {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new MultiSpanHeader().makeUI();
public void makeUI() {
final JTable table = new JTable(5, 6);
final JTableHeader header = table.getTableHeader();
header.setReorderingAllowed(false);
final TableColumnModel model = table.getColumnModel();
Enumeration<TableColumn> enumColumns = model.getColumns();
final List<TableColumn> columns = Collections.list(enumColumns);
final JTable dummy = new JTable(0, 3);
final JTableHeader dummyHeader = dummy.getTableHeader();
dummyHeader.setReorderingAllowed(false);
dummyHeader.setResizingAllowed(false);
final TableColumnModel dummyModel = dummy.getColumnModel();
Enumeration<TableColumn> enumDummyColumns = dummyModel.getColumns();
final List<TableColumn> dummyColumns = Collections.list(enumDummyColumns);
model.addColumnModelListener(new TableColumnModelListener() {
@Override
public void columnAdded(TableColumnModelEvent e) {
@Override
public void columnRemoved(TableColumnModelEvent e) {
@Override
public void columnMoved(TableColumnModelEvent e) {
@Override
public void columnMarginChanged(ChangeEvent e) {
dummyColumns.get(0).setWidth(columns.get(0).getWidth());
dummyColumns.get(1).setWidth(columns.get(1).getWidth() +
columns.get(2).getWidth());
dummyColumns.get(2).setWidth(columns.get(3).getWidth() +
columns.get(4).getWidth() + columns.get(5).getWidth());
@Override
public void columnSelectionChanged(ListSelectionEvent e) {
JScrollPane pane = new JScrollPane(table);
pane.setPreferredSize(new Dimension(600, 200));
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(pane);
frame.pack();
JPanel panel = new JPanel(new GridLayout(2, 1));
panel.add(dummyHeader);
panel.add(header);
pane.getColumnHeader().setView(panel);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}Note: this is just presented as an idea, would need a lot of work to make it robust and flexible enough for practical use.
db -
How to catch selected text in JTable Column
Hi there,
I am learning JTable. Need help for How to get the selected text from the JTable Column which is set to be editable.
for example in JTextFiled you have method on getSelectedText(), is there any method for tracking the selected text.
Thanks in advance
MinalHere's an example of the model I used in my JTable. Not the "getValueAt" method & "getRecordAt" method. You will have to have a Record object - but it only contains the attributes of an inserted record (with appropriate getters & setters). Hope this helps.
public class FileModel5 extends AbstractTableModel
public boolean isEditable = false;
protected static int NUM_COLUMNS = 3;
// initialize number of rows to start out with ...
protected static int START_NUM_ROWS = 0;
protected int nextEmptyRow = 0;
protected int numRows = 0;
static final public String file = "File";
static final public String mailName = "Mail Id";
static final public String postName = "Post Office Id";
static final public String columnNames[] = {"File", "Mail Id", "Post Office Id"};
// List of data
protected Vector data = null;
public FileModel5()
data = new Vector();
public boolean isCellEditable(int rowIndex, int columnIndex)
// The 2nd & 3rd column or Value field is editable
if(isEditable)
if(columnIndex > 0)
return true;
return false;
* JTable uses this method to determine the default renderer/
* editor for each cell. If we didn't implement this method,
* then the last column would contain text ("true"/"false"),
* rather than a check box.
public Class getColumnClass(int c)
return getValueAt(0, c).getClass();
* Retrieves number of columns
public synchronized int getColumnCount()
return NUM_COLUMNS;
* Get a column name
public String getColumnName(int col)
return columnNames[col];
* Retrieves number of records
public synchronized int getRowCount()
if (numRows < START_NUM_ROWS)
return START_NUM_ROWS;
else
return numRows;
* Returns cell information of a record at location row,column
public synchronized Object getValueAt(int row, int column)
try
FileRecord5 p = (FileRecord5)data.elementAt(row);
switch (column)
case 0:
return (String)p.file;
case 1:
return (String)p.mailName;
case 2:
return (String)p.postName;
catch (Exception e)
return "";
public void setValueAt(Object aValue, int row, int column)
FileRecord5 arow = (FileRecord5)data.elementAt(row);
arow.setElementAt((String)aValue, column);
fireTableCellUpdated(row, column);
* Returns information of an entire record at location row
public synchronized FileRecord5 getRecordAt(int row) throws Exception
try
return (FileRecord5)data.elementAt(row);
catch (Exception e)
throw new Exception("Record not found");
* Used to add or update a record
* @param tableRecord
public synchronized void updateRecord(FileRecord5 tableRecord)
String file = tableRecord.file;
FileRecord5 p = null;
int index = -1;
boolean found = false;
boolean addedRow = false;
int i = 0;
while (!found && (i < nextEmptyRow))
p = (FileRecord5)data.elementAt(i);
if (p.file.equals(file))
found = true;
index = i;
} else
i++;
if (found)
{ //update
data.setElementAt(tableRecord, index);
else
if (numRows <= nextEmptyRow)
//add a row
numRows++;
addedRow = true;
index = nextEmptyRow;
data.addElement(tableRecord);
//Notify listeners that the data changed.
if (addedRow)
nextEmptyRow++;
fireTableRowsInserted(index, index);
else
fireTableRowsUpdated(index, index);
* Used to delete a record
public synchronized void deleteRecord(String file)
FileRecord5 p = null;
int index = -1;
boolean found = false;
int i = 0;
while (!found && (i < nextEmptyRow))
p = (FileRecord5)data.elementAt(i);
if (p.file.equals(file))
found = true;
index = i;
} else
i++;
if (found)
data.removeElementAt(i);
nextEmptyRow--;
numRows--;
fireTableRowsDeleted(START_NUM_ROWS, numRows);
* Clears all records
public synchronized void clear()
int oldNumRows = numRows;
numRows = START_NUM_ROWS;
data.removeAllElements();
nextEmptyRow = 0;
if (oldNumRows > START_NUM_ROWS)
fireTableRowsDeleted(START_NUM_ROWS, oldNumRows - 1);
fireTableRowsUpdated(0, START_NUM_ROWS - 1);
* Loads the values into the combo box within the table for mail id
public void setUpMailColumn(JTable mapTable, ArrayList mailList)
TableColumn col = mapTable.getColumnModel().getColumn(1);
javax.swing.JComboBox comboMail = new javax.swing.JComboBox();
int s = mailList.size();
for(int i=0; i<s; i++)
comboMail.addItem(mailList.get(i));
col.setCellEditor(new DefaultCellEditor(comboMail));
//Set up tool tips.
DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
renderer.setToolTipText("Click for mail Id list");
col.setCellRenderer(renderer);
//Set up tool tip for the mailName column header.
TableCellRenderer headerRenderer = col.getHeaderRenderer();
if (headerRenderer instanceof DefaultTableCellRenderer)
((DefaultTableCellRenderer)headerRenderer).setToolTipText(
"Click the Mail Id to see a list of choices");
* Loads the values into the combo box within the table for post office id
public void setUpPostColumn(JTable mapTable, ArrayList postList)
TableColumn col = mapTable.getColumnModel().getColumn(2);
javax.swing.JComboBox combo = new javax.swing.JComboBox();
int s = postList.size();
for(int i=0; i<s; i++)
combo.addItem(postList.get(i));
col.setCellEditor(new DefaultCellEditor(combo));
//Set up tool tips.
DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
renderer.setToolTipText("Click for post office Id list");
col.setCellRenderer(renderer);
//Set up tool tip for the mailName column header.
TableCellRenderer headerRenderer = col.getHeaderRenderer();
if (headerRenderer instanceof DefaultTableCellRenderer)
((DefaultTableCellRenderer)headerRenderer).setToolTipText(
"Click the Post Office Id to see a list of choices");
} -
How To Search For a Text In JTable Column?
hi there
i want to search for specific text in a JTable Column
And If The Text Exists Highlits it?
any ideas or useful links or tutorials?Well, then that would be a Swing related question. Did you search the Swing forum to see how rendering works.
-
How to change JTable column header text
How do you set the text in the JTable column headers? I know you can create a JTable specifying the text in an array:
<li>JTable(Object[][] rowData, Object[] columnNames)
But if you create the JTable specifying a TableModel,
<li>JTable(TableModel dm)
the header text defaults to "A", "B", "C", etc. I cannot figure out how to access the text in the header names so it can be changed to something useful. I know how to get the JTableHeader for the table, but it does not seem to have methods for actually setting header values.I'm sure that model allows you to specify header values so you don't have to do so manually. I would be very surprised if it didn't override the default getColumnName() method to provide a reasonable names.She wasn't writing the class, but [url http://forums.oracle.com/forums/thread.jspa?messageID=9200751#9200751]outlining a design for me to implement. And, based on a previous comment I had made, I think she assumed I wanted the new design to look as much like the old as possible. There were no headers in the original design, which wasn't even a table.
Anyway, this works:
final static String statisticsColumnNames[] = {
"Type", "Count",
"Red QE", "Green QE", "Blue QE", "Average QE",
"Distance"
qErrors = new QEBeanTableModel();
JTable errorTable = new JTable(qErrors);
TableColumnModel tcm = errorTable.getColumnModel();
for (int col = 0; col < statisticsColumnNames.length; col++)
tcm.getColumn(col).setHeaderValue(statisticsColumnNames[col]);
It looks like setHeaderValue() on the TableColumn is what I was looking for.Again, only used if you are dynamically changing the values at run time or you don't like the defaults provided by the Bean-aware model.I coded the above before I read your last post. The QEBeanTableModel is extremely specific to my program. I.e. I cannot imagine it being used anywhere else. Would it still be better to implement a getColumnName() within the table model? Looking at your [url http://www.camick.com/java/source/RowTableModel.java]RowTableModel.java source, I can see that it would not be difficult to do so.
Just decided to add the getColumnName() method. This whole sub-project is based on implementing a clean modern design (and learning about Java Beans). You've clearly stated twice that the method I have implemented is for dynamic header values only, which has already answered what I asked last paragraph. -
How to create a dynamic table were the JTable columns keep varying
How to create a dynamic table were the JTable columns keep varying based on the input to the jtable
Oooh, I lied. DefaultTableModel has an API for adding and
removing columns. I didn't know that. You should have read
the API.
As for preferring to extend AbstractTableModel rather than
DefaultTableModel, I think it's more correct. DefaultTableModel
is a simple implementation of Abstract for basic cases. It isn't
intended to be extended. I figure most people extending
DefaultTableModel are also extending JFrame, JPanel, and Thread
instead of encapsulating the first two and implementing
Runnable for the third. -
How to resizea JTable column to fit to text programatically?
hi evreyone,
i'm trying to resize a JTable column width to fit to the contained text programatically.my approach was that i made a comparison between the length of String objects contained in my column and got the biggest String length value but i want to know how can i resize the column to fit to this biggest String objectYou're going the wrong way about it - don't go calculating string lengths. Get the TableCellRenderer, query it for the renderer component for each cell in the column, obtain its preferred size and keep a record of the greatest width value.
-
How can i make hidden column in JTable
hi, how can i make hidden column in JTable,
basically i have a ID field in JTable, i have to use this ID , but i also dont want to show this ID in JTable.
any idea how ??staiji its not working
i did this :
first :
TableColumnModel columnModel =
usersTable.getColumnModel();TableColumn column =
columnModel.getColumn(1);
usersTable.removeColumn(column);
then when i trying to get this :
Integer userId =
(Integer)usersTable.getValueAt(UserBrowser.this.usersTa
le.getSelectedRow(), 0);
it not give me ID column's value .
i have a column in JTable like :
ID | Username | First name | Last name
i want to hide ID column , but get this ID's value
when user clicks on JTable row.Hi, if you would read the documentation about JTable.getValueAt(...) you will find, that there is a significant difference between this method and the datamodels getValueAt(...) method. JTables getValueAt(...) method interprets column-index as index in its TableColumnModel - in your TableColumnModel there is no column any longer that holds ID values, therefore you were not able to get it by JTable.getValueAt(...). Do not use these methods for the purpose you want it for - you will also get the wrong values, if the user has repositioned columns - the column index is always interpreted as index in the currently used TableColumnModel and IS NOT A MODELINDEX.
greetings Marsian -
Multi-colored JTable column heading? How?
Hi,
I'm looking for a way to have JTable column heading text
that can be displayed in multiple colors, so one string
in one column header, might have each letter a different
color.
My application requires highlighting some of the letters
of a word as red, while others are normal text (black).
I've been using multi-line strings to simulate vertical
naming for my column header, for example:
PPP
I I I
N N N
1 2 3
for PIN1, PIN2, PIN3. The column data has a binary
one or zero for each pin, grouped together in one JTable
column. In my application, if there is an error, I want to
color just the text representing, say PIN2 red and leave
the surrounding PIN1 and PIN3 black.
What approach should I take for doing this with JTable?
Thanks!
John Roberts
[email protected]You should override the default cell renderer used by Java
- JTable.getTableHeader().setDefaultRenderer(yourRenderer)
Extend yourRenderer from JLabel and use HTML tags to change the color.
- setText on JLabel with the HTML code like "<HTML> <BODY> <FONT COLOR="red"> A </FONT> <FONT COLOR="green"> B </FONT></BODY> </HTML>"
Maybe you are looking for
-
I had a single laptop and several email accounts - a personal gmail account, a work gmail account (freelance writing) and a non-gmail account for my day-job. Until recently, my two gmail accounts were under a single profile and the job email in anoth
-
What kind of turn around time can I expect for getting my Dreamweaver extension (free version) approved? I originally submitted my ext on 2007-10-08. I received a message to fix a problem and resubmitted on 2007-10-23. That was the last I heard. Chec
-
Hi All, Currently i have a requirement for the RFC where i need to create vendor. Currently iam using a BDC recording inside the RFC to create a vendor. But there are 5 account groups for my business where the vendor customizations are done. So the
-
Browser changed colors - theme/persona change doesn't make it go away
The top and bottom of my browser has changed from solid gray to pink tinted transparent. I've checked the add ons and there is no theme/persona installed. I've restarted in safe mode and it's still there. I've installed different themes/personas and
-
When I launch Bootcamp Assistant it keeps telling me that it can't start because I need to update my system software but I already just did, and restarted! Suggestions please?!