Swing/AWT/SWT :: Using Same Cell Renderer Object For A Number Of Cells?
May 28, 2014
I have a number of cells which are Dates and need to have them appear in the same format. The samples I have seen usually create a new cell renderer object for each cell, even if its the same type. Since I have a number of Date cells I thought it best to use a single object for each of the date cells, but after seeing the different samples I am wondering if there is something I may be missing where using the same cell renderer object could potentially be an issue.
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(){
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'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);
I would like to ask about JTree custom renderer. What could be wrong with this. Here's the deal:
I have a Jtree which suppose to view the structure of given folder, so far so good its working. But my problem is that i dont want it to show the full path as name, only folder name and file name. I wrote a custom JTree renderer in hope that this will solve my problem but it didn't.
Here is my custom Jtree renderer:
private static class MyTreeCellRenderer extends DefaultTreeCellRenderer { @Override public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); if( value instanceof DefaultMutableTreeNode){
How can I add values from a JComboBox to a JTable ? I've created a drop down list and a button and I want the values to be added to a table whenever i click on the button (add).
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;
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 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'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);
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?
What I want to do is have a label that is updated whenever an object gets some new, relevant data.The way you do it in Java looks different from the way we do it in Objective-C. In Objective-C, we have what's known as a protocol. An Objective-C protocol is almost exactly like a Java "implementation." In Obj-C, if I want the user to see the address of where he is, I can have an object that gets the information and invokes a view controller's method; at that point, the view controller would then take the data passed to it and display the data in a label. However, the view controller is an instance of a subclass of the bundled view controller class.
I am trying to find either some references to point me on the right track with passing an object with all of it's properties still in tact after it's been created. Currently I am trying to do this through an interface but it seems to just create a new object everytime without the properties. Example below :
import java.util.ArrayList; import java.util.List; public interface TPerson{ //public Person p = null; } class Thrower { Person p;
[code]....
When I implement the interface on the other objects as soon as I call the setP method shown above it seems to just create a new one even though I pass the object to the method I want to use.
I have a student class with fields names and Gender. Now, I have a students' array. such that I can create multiple students' classes: student a, student b, student c e.t.c and store them into the students' array. Now, I store this students' array in a JComboBox and want to only display the names of these students in the array. Such that the JComboBox lists only the names of student a, student b and student c. . When a user clicks on a selected Item on the JComboBox, even though, it was a student's name that was selected, I want the selectedItem to be a object of the Student class. This, I have learnt works with JList by writing your own custom JList models and then DefaultListCellRenderer. Is there anyway, one could also do this with JComboBox?
//Main Method import StudentList; import Student; import ViewGui; import Controller; public class SwingMainMethod {
How can I add values from a JComboBox to a JTable ? I've created a drop down list and a button and I want the values to be added to a table whenever i click on the button (add).
In other words in a table view with several editable columns, when a new row is added this row does not contain any column cells yet. Cells are added on demand once a column gains focus and starts editing. Is this the case? Is there any way to force the row to construct all cells eagerly?
Release 8u40 introduces the TextFormatter concept in the text input field area. It is currently a new property of the TextInputControl class. This is definitely a more elegant way to deal with validation than overriding "replaceText(...)".
Shouldn't this property also be available in list, table and tree cells? Are there plans to do this (before we make our own implementation) ?
I am having trouble with a jTable that I am using. I have set the listeners of the cells to save the information of the entire table every time they are modified, but run into the problem that the last modified cell does will not reflect its most recent value. The value will display visually, but not show up when I try to read from the cell. I have tried wrapping the saveProcGuide() call in swing's invokelater, but to no avail. I have marked the area where the problem becomes evident (values returned do not match those present in the visible table object). Below is the offending code:
// This is where I set up the listeners private void addProcGuideWithValues() { procTableModel.addRow(new Object[]{"", ""}); // document listener to be fed into editor/renderers for cells... DocumentListener docuListener = new DocumentListener() { public void changedUpdate(DocumentEvent e) { saveProcGuide();
I'm using the tableview-component. The size of font of header is greater then that of cells. The problem is: the width of the column bases on the cell with the longest string and if the header-string is longer then the header gets truncated (it shows ellipsis) and I have to change the width of column manually. How could I solve this problem? The easiest way would be to compute the column-width on myself. I can't find any method in javafx, that would allow to compute the width of string in pixels. In Swing there is the FontMetrics class and Graphics class, so it is easy to get the width in pixels. Are there any pendants to this classes in JavaFX?
java.awt.Component is an abstract class, and it's direct Sub-classes are Button, Canvas, Checkbox, Choice, Container, Label, List, Scrollbar, Text Component
So, when I use addXListener(mylistenerclass m);//which is a method of Component class which object is holding the list of all listeners, for a particular Event Source?
I am under the assumption that - there is an Event Source Object(possibly static) for every Event Source type(mouse, keyboard etc) that holds a list of destinations(classes that implements their listener interface) - added to the the object via addXListener method. When an event happens(mouse click, drag etc) the Event Source Object creates an Event Object and send it to all the destinations. Is my assumption correct? I can't seem to find the location or declaration of Event Source Object and the list where it stores it's registered destinations.