Swing/AWT/SWT :: How To Change Color Of Column Header When Cell Is Clicked In JTable
Jan 20, 2015
I'm working on a spreadsheet-like table and I was able to set it so that it would highlight the first cell in the relevant row(titled 1,2,3.. etc) when a cell is clicked. (Just like in MS Excel - preview attached) Now I want to do the same to the column header(i.e. A,B,C,D....etc) . How can I do it?
private void formWindowOpened(java.awt.event.WindowEvent evt) {
setLocationRelativeTo(null);
int rowNum = sheet.getRowCount();
for(int i=0; i<rowNum; i++){
sheet.setValueAt(i+1, i, 0);
I'm working on a spreadsheet-like table and I was able to set it so that it would highlight the first cell in the relevant row(titled 1,2,3.. etc) when a cell is clicked. (Just like in MS Excel - preview attached) Now I want to do the same to the column header(i.e. A,B,C,D....etc) . How can I do it?
private void formWindowOpened(java.awt.event.WindowEvent evt) { setLocationRelativeTo(null); int rowNum = sheet.getRowCount(); for(int i=0; i<rowNum; i++){ sheet.setValueAt(i+1, i, 0);
I have a ComboBox I'm using for a cellEditor. The list of items in the comboBox might have colors behind them, which I've managed to render. What I haven't figured out is a good way to keep the color in the cell after the item is selected.I don't' want to have a persistent comboBox in the cell, i only want to see it when editing that cell.
public TableCellEditor getCellEditor(int row, int col) { if (row==theRow && col==theCol) { JComboBox<?> combo = new JComboBox<Object>(getPickListEntries()); combo.setRenderer(new PickListRenderer(combo)); combo.setBorder(BorderFactory.createEmptyBorder()); }
I am making a gui in which i read values from text file to JTable. But i want to define the column header as A,B,C,D,E,F,G,H,I. Now when i read, the values from text file are getting displayed in Jtable headers. How can i achieve the column header as A,B,C,D,E,F,G,H,I.
import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.*; import javax.swing.*; import javax.swing.table.*; public class Bb extends JFrame {
is possibile to change the color of the sorting arrow that appears in the columns of the Table View by css? My attempts have failed and I have not found any documentation, nor is there any reference in the Modena css.
I want to create a JTable which "Analysis","Date" and "Price" the names of columns in header. Here's a piece of my code :
String sql = "Select name, Price from analysis_tab where name ='" + idclicked + "'"; DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd"); Date date = new Date(); PreparedStatement preparestate = database.con.prepareStatement(sql); ResultSet rs = preparestate.executeQuery();
So, the value of Analysis and Price were stored in my Data Base, and the Date get the value of the current day. How can i create this JTable and how can i set the value into it ?
Is it possible to allow users to resize columns in a JTable that has no header? I'd like the user to be able to grab the column lines on any of the data rows and be able to resize just like they can in the header.
My latest issue was that I wanted to only get a double value into a JTable Cell.
So first I Overrode the getCellEditor(int row,int col) method of my JTable, so if I was in a cell i knew I needed a double value I returned my Editor.
My editor filters out anything but numbers. I also check to make sure we get one and only one decimal point.
Other solutions Ive seen use keyboard Listeners, but to me that doesn't work. What if the user cuts and pastes data? My solution handles that as well.
It doesn't handle if they try to cut and paste something like 1234abcd.bob.123.23 , this would result in 1234..123.23 pasted in. I'll handle faulty values on the getValue method of my AbstractTable, but as long as the user is using mostly valid data this works well.
public TableCellEditor getCellEditor(int row, int col) { if (row==TheRowWant && col==TheColumnI want) { return (new DefaultCellEditor(createDoubleTextField())); } } private JTextField createDoubleTextField() { final JTextField field = new JTextField();
Change value of a cell, without clicking on anywhere else, directly click on column (or) try to expand column size, value you entered in that cell vanishes. But if you click on any other cell instead of expanding column size, value will remain in cell. Not really sure how to fix this issue.
class SimpleTableExample extends JFrame { // Instance attributes used in this example privateJPaneltopPanel; privateJTabletable; privateJScrollPane scrollPane;
What I'm trying to do is make an inventory type program that includes a jtable. In the Jtable in the last column there will be 2 buttons and a textfield to register the value of additions or subtractions to the overal stock amount. (See screenshot in attachment).
As of now I am able to increment or decrement the numbers when the buttons are clicked on however the problem is that if I add 2 to the first row, and then go to add 2 to the next row or any other row for that matter, the value of the previous row is added to the next row, and the previous row reverts back to a value of 0. So basically its like there is only one editor that keeps track of one value no matter what row you are editing.
I need getting it so that I can add different values to each different row depending on the stock being used or received. The following is my code:
Main class
JScrollPane scrollPane = new JScrollPane(); scrollPane.setBounds(10, 155, 643, 233); IMG.add(scrollPane); center = new centerJustify(); ts = new tableCellRenderer(); tm = new DefaultTableModel(){
I've been creating a jTable where I can add / edit /delete new entries. Now i have 2 Questions :
1) My column 0 is filled with the row-number. I created a variable and with each "add" it adds +1 to the variable. That works, but as soon as i delete 1 row there is a gap ( 1..2..4..5..).
My question: Is there another way then mine to handle this?
2) The table is/should be working as some kind of database. The user is able to add Information (height, width,...). Now I want to sum the entries of 1 column (length,...). But as they´re objects I didn´t find a way.
My question: How can I sum the entries of 1 column of a table?
Now my issue is I have a JTable. The first column will contain Date objects all the way to the bottom. I want the JTable to display only the month and year. I created a custom cell renderer, but it appears the cell renderer method "getTableCellRendererComponent" is never called. (I tested it using System.out.println();) Here is my code for setting the cell renderer and the contents of the first column:
MonthYearTableCellRenderer renderer = new MonthYearTableCellRenderer(); tblView.setDefaultRenderer(Date.class, renderer); for(int i = 0; i < 60; i++){ Calendar cal = Calendar.getInstance(); cal.set(Calendar.DAY_OF_MONTH, 1); cal.add(Calendar.MONTH, i); tableModel.setValueAt(cal.getTime(), i, 0); }
The Date objects are set into the cells of column 0 correctly. The table shows the result of the "toString()" method for each cell in that column.
I have used netbeans to build my app. So there creating jTable is out of my control as that part was inside auto-generated code. I have just used the jTable.setValue().
My problem is, above method is inside a button click event. Updated values not displaying until the loops ends.
I have a JTable with the model " Names " , " Quantity " and " Unit " .
I'm coding a program where you get the ingredients names.
So i need to get the whole row of one column and String it all up together,because i need to store it in mySql and i have already set it all as String.
how i can do this ?
My code are as follows :
JTable Code:
DefaultTableModel model = (DefaultTableModel)table.getModel(); if(!txtQty.getText().trim().equals("")){ model.addRow(new Object[]{ingCB.getSelectedItem().toString(),txtQty.getText(),unitCB.getSelectedItem().toString()}); }else{ JOptionPane.showMessageDialog(null,"*Quantity field left blank"); }
Getting the values and for storing :
for(int i = 1; i<= i ; i++){ ingredients = table.getName(); }
This is for loop is wrong and it does not work because i have a constructor to take in Ingredients but because it is inside the loop, it cannot take it in.
I'm making a program that selects classes from a database via a jcombo box and then populates a time table with the class times.
I've used a custom cellrenderer that extends DefaultTableCellRenderer to text wrap the information and change the background of the cells.
It works but when i minimize the program it goes all black and if I double click I get a new JTextArea opening up on the timetable and when I minimize the program and go to open it again i get an "Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException" and the cell render seems to be called again even though i haven't rerun the program.
This is the cell renderer that I built
public class TimesTableCellRenderer extends DefaultTableCellRenderer { private int minHeight = -1; private final JLabel label = new JLabel(); private final JTextArea textArea = new JTextArea(); public TimesTableCellRenderer(){ super(); textArea.setLineWrap(true);
When editing a cell, the existing code would use the right/left cursor keys to move from cell to cell as opposed to from character to character when editing a cell. I planned to override the functionality by tossing in the above code as a test to see if it stops the functionality before I override it.
After placing in the above code, the above functionality no longer occurs, but now the cursor moves within the cell as I wanted which is to move from character to character instead of cell to cell. Its great it works, but it really shouldn't. Essentially the default behavior has been restored when it should have really disabled the left/right keys.
I assume there is some underlying class someplace that is doing something to affect the behavior. Since a sample can't be provided I am wondering in what scenarios would the e.consume() restore default functionality?
I have a Jtable which shows contents on each row. but the row contents which are bigger than the width of the column gets shown as "BlahBlah.." (basically getting showed up as .. in the end)
User has to manually increase the width of the column to see those extra contents.For e.g if the row contents are ABCDEFGHI and the widht of the column for that row is sufficient enough to show only ABCDEF of that, then it will show up as something like "ABCD.."Now my requirement is to show the complete contents over to next column on the same row.
Note: I could simply add the code to show the widht of the column to adjust according to largest row content for that column . But unfortunately this is not what is required.
When i run my program i see a JTable with data in it. The first 3 columns are filled with data, the next one is empty. Other columns that come afther the empty one are also filled.
So my 4th column is empty. But it only apears empty, cause when i move the 4th column to the left. The same column that was at 4th place is now at 3th place and filled up with data.
So the 4th column apears empty but it contains data when i move it to the left or the right.
Why does it show an empty column at the 4th place?
Some printscreens to get it clear:
In attachment:
attachment1 = 4th Column is empty attachement2 = 4th column is moved to 3th place and is filled with data.
I am trying to sort a JTable on an all numeric (integer) column. From what I read, if the sorter knows the type is integer it should sort correctly. This is my code:
public class ActorTableModel extends DefaultTableModel { private static final long serialVersionUID = 1005352603826663105L; public ActorTableModel (Object data[][],Object columnNames[]) { super(data,columnNames); } public Class<?> getColumnClass (int column) { if (column==0) { return(Integer.class); } return(String.class); } }
The result is when I sort on that column (0), it sorts alphabetically not numerically.