Swing/AWT/SWT :: How To Bind A Filtered Table Using JGoodies Library
Apr 22, 2014
I am working for my customer in a Java EE project, where we use JGoodies for binding JTable rows to text fields below the table. This works fine, but in one dialog, there are filtering check boxes. When all the check boxes - three in number - are clicked, all items become visible. If non are checked, the table remains empty. It is possible to filter out some rows, but JGoodies, which uses the table model, is not aware of this filtering. When clicking the first row in the filtered table, the first row elements of the unfiltered table are displayed in the text fields below. Is there a way to circumvent this problem?
To my opinion, the problem is not a JGoodies problem, but binding a text field with JGoodies using the table model of a table that has been filtered.
I attached an example, where I couldn't manage to bind the text field with the Bindings.bind method, but it shows the problem. I adopted some code found on the Internet for my purposes.
The table is filtered according to the combo box contents. If the GENERAL type of eating is selected, the binding of the text field below is fine. If, however, the combo box selects parts of the table contents, the text field below still gets the information from the (unfiltered) table model. Here, I need information how can I do this in the proper way.
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
/**
* A simplified mouse listener that reacts when the mouse has been clicked or pressed.
*/
public abstract class ASimpleMouseListener implements MouseListener {
/**
* Event method that is called when the mouse has been clicked or pressed.
Is there any alternative on executing request.getParameter on the id's of input text in order to set it on the Transaction bean so that the values will display on the user when the page reloads?
Is there an existing way to bind the content of a ListProperty? Consider the following:
private final ListProperty<Worker<?>> workers = new SimpleListProperty<>(FXCollections.observableArrayList()); public ListProperty<Worker<?>> workersProperty() {return workers;} public ObservableList<Worker<?>> getWorkers() {return workers.get();} public void setWorkers(ObservableList<Worker<?>> workers) {this.workers.set(workers);}
[Code]...
What I want to do is bind the content of the stateWatchedWorkers list to workers. If the entire workers list is replaced, I want stateWatchedWorkers to be updated to match the content of the new list. Put another way, I want the stateWatchedWorkers list to be mapped to the current list being held by the workers property.
I try to bind the text-property of a selected cell of a TreeView to a label. So if the user click on a cell in the treeview the label should show the cell text. Now I am quite confused about the options I got to do so. Should I use label.textProperty().bind( ... ??? ... ) The treeview.onMouseClicked()property? or something different?
I am attempting to show a GUI that will show records from a SQL Server table. That part I have done. However, I need to allow the user to be able to edit the Approval field of the table when he/she views it. Following is my code:
I'm writing my first bigger program (mysql connection and the first thing bigger than 300 lines ). What I'd like to do is to render data from MySQL using JTable - I managed to handle all the queries but I don't know how to update the table on screen. I've tried to use repaint() but nothing happened. I'm not posting whole code because you'll probably not interested, below are the most important things. I thought about using TableModel but how.
public class Main implements ActionListener{ JTable table;
public Main() { JFrame frame = new JFrame("Frame"); frame.setLayout(new FlowLayout()); frame.add(table);
I get the value from database and display in table , price value will show 6 decimal and date value will show date and time.What to do to show only 2 decimal places and only date e.g. 1/1/2014 in the table ?
When one is needed I simply add it to the table. In this case however whilst updating the model via table update in tableChanged method I have the impression of 2 identical models because the update happens twice (use of audio).
Is it not true that adding a new model cancels out the other ? I test for which model is attached to table and add the correct one depending on the data required.
From what I can determine check boxes are applied in SWT to the first column only of a table.
final Table table_project = new Table(g3_tabfolder_projects, SWT.BORDER | SWT.CHECK);
However I require check boxes on all cells. I tried creating a table for each column (which gives me my check boxes) but as the number of enries are often numerous and thus require vertical scroll the tables become out of sync (and to the user that sync is important).
Before I knock up some code to try and synchronise the tables I just wanted to check any alternative approaches. The project is SWT based.
i am relatively new to Swing. learning swing concepts for my new project. how can we construct a Hierarchical JTable structure using Swing. Something like a Master-Child table structure with a drill down from Master table to Child Table. Something similar to the image Telerik.
I have seen some examples like TreeTable. But that is not what i am looking for. The Column headings for Master table and child table might differ.
it may reflect some of those changes that happened after you created the iterator but there is no guarantee. I think the state changes that take place after you start iterating are never reflected. But these are implementation details. As such we know that iterating through a ConcurrentHashMap may not give us the most recent updates that happened to the Map ( the ones that happened after we created the iterator ). We would use it if we either don't care about missing some of the updates or if we know that such updates are not likely and we want maximum concurrency in that kind of a setting.
This isn't the case with the iterator returned by a LinkedHashMap or a synchronized view of a LinkedHashMap.There are some small but significant incorrect things I have said in my response. Here is a better response.It may reflect some of those structural changes that happened after you created the iterator but there is no guarantee. I think the state changes that take place after you start iterating are never reflected. But these are implementation details. (This is an just an untested observation. Not even an implementation detail. As such we know that iterating through a ConcurrentHashMap may not give us the most recent structural updates that happened to the Map ( the ones that happened after we created the iterator ). We would use it if we either don't care about missing some of the structural updates or if we know that such updates are not likely and we want maximum concurrency in that kind of a setting.
I've since been looking at the new TableView class made available via JavaFX from this Oracle tutorial here. It looks like I can do the following:
1) Create a POJO class that contains the columns as properties of the class. Each object of the class represents a row. 2) Create a TableView class that contains a list of the new POJO class from 1) above. Any insertion of additional POJO class from 1) represents a new row inserted into the TableView class and this gets reflected immediately and automagically on the JavaFX GUI.
This is all great! But how do I do the following:
1) Access a specific cell in the table via a row name and col name? 2) Return all cells in a column as an array, by specifying the col name? 3) Have more than one GUI data binded to this TableView? 4) Specify the POJO class dynamically at run time? If I want to create an interface (say a web service) that allows someone to add columns, remove columns, etc at run time and this needs to be reflected both internally in memory and externally on all the connected GUIs?
I have an application that displays a GUI and this GUI displays a table with several columns and rows. I have a class that extends DefaultTableModel. I wrote the code that displays the GUI. When the database table changes, how would I updated the GUI dynamically? Do you have any sample code that does that?
I'm trying to create a table where the Header is a custom object.
The custom object would be something along the lines of
public MyColumnObject { String myLabel; ArrayList dataForDropdowns; int defaultColumnIndex; int modifiedColumnIndex; String tooltip; }
This is simpler then what I want to do, but it's the basic concept. I want the column header to render the myLabel for the visual (at least at first). I want this render to be applied to however many columns I have, which will differ from table to table, but I always want the column header of each column to be of type myColumnObject.
I thought somethinglike this would work, but I'm getting java.lang.ClassCastException: java.lang.String cannot be cast to myColumnObject which makes sense, but I thought that I would be getting back my object.
p.s. I re-labeled all my code from my actual project, so if something looks off, it was probably just the re labeling.
public NewTestTable(MyColumnObjects[] fields) { setModel(new TestObjectTableModel( new Object [][] { }, fields ) { private static final long serialVersionUID = 1L; public boolean isCellEditable(int rowIndex, int columnIndex) {
I would like to get a checkbox within a table to fire an event when it's clicked rather. I gave tried putting in a TableModelListener but the the event only seems to trigger when I click on another column (as if the table is waiting to see if I will change my mind) before moving on.
I have also looked at the setValue of the TableModel itself.
Do I need to put an ActionListener on each checkbox or have I missed something ?
I am building a little application for personal use where I can track my finance. Now, what I would like to get is an always visible JTable "footer" OR horizontal space field attached to the bottom of the window. The idea is that scrolling down/up wouldn't affect it's visibility(like JTable header). Might a picture tell a thousand words: see attachment.
I am wondering, maybe JTable OR TableModel class has a property to solve this problem(I haven't found any)? Or shall I make another ScrollPane/JPanel? Which path of search shall I pursue?
I have created a DefaultTableModel tablel as a Global variable. The table is then created and attached to a Grid bag layout. Then I want to call the table again in another method to add rows of data into it. Hopefully that makes sense.
So the addrow for the table is located in the final method private class CalcButtonListener implements ActionListener
When I debug the code, deftablemodel variable is carrying NULL data.
Also to make things even more complicated, The actual headers for the table aren't showing up,... not entirely sure why though.
I am trying to export data from a jtable to a pdf report but every time i try running the code it gives me this exception:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at GUI.QC_receiving_book.printButtonActionPerformed(QC_receiving_book.java:309) at GUI.QC_receiving_book.access$600(QC_receiving_book.java:26) at GUI.QC_receiving_book$7.actionPerformed(QC_receiving_book.java:165) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
[Code] ....
I tried avoiding the null exception by using the if statement but it didn't work. The row I choose from the table is full meaning there are no empty attributes. and all the data are imported from a mysql database to the table as String so there can't be any casting errors.
This is the part of the source code with the problem and i will also post the printing method. I tried debugging the class and when stepping into the first if statement it opened the jTable.java file and pointed at the getSelectedRow() method and this sentence "variable information not available.source compiled without -g option"
private void printButtonActionPerformed(java.awt.event.ActionEvent evt) { if(samplesTable.getSelectedRow() >= 0){ int row = samplesTable.getSelectedRow(); System.out.println(row); for(int x=0;x<samplesTable.getColumnCount();x++){ String value = samplesTable.getModel().getValueAt(row, x).toString();
The problem is that I populate the table with autoincrement primary key. I don't want it to be visible. I have been googling for hours to find no solution. It seems that sql/mysql provides no solution by selecting all table columns except one. So I wonder, how I could overcome this problem. Here is some of my code:
public void tableChanged(TableModelEvent e) { int row = e.getFirstRow(); int col = e.getColumn(); model = (MyTableModel) e.getSource(); String stulpPav = model.getColumnName(col); Object data = model.getValueAt(row, col);
[Code] .....
The ID is used in
stmt.addBatch("update finance.fin set " + stulpPav + " = " + duom + " where ID = " + studId + ";");
I tried to omit ID from my SELECT statement, I tried to put Date as a first element in data[iEil][0] but neither options were successful. Data hasn't been changed in database. NOW, everything works fine, except I don't want ID column to be visible in my table.
I need to process one component drag to the table. I misunderstand, how I can see to which Cell fall the component. I tried to use Event and Mouse event handlers in my custom Cell, but they do not work. I can copy the drag event to the table and table handles it, but how to get needed Cell I cant understand.
This is my codes in a button that if I click it . that information will send to Jtable but the problem is the jtable is in another frame so how can i connect this ?
DefaultTableModel model = (DefaultTableModel) new admin().tableBagtags.getModel(); if (txtName.getText().equals("")) { JOptionPane.showMessageDialog(null, "Please fill out all fields.", "Error!", JOptionPane.ERROR_MESSAGE);