JTable within JTable

I want to view additional table below the selected row on my table. This additional table will display more additional data for the selected row.
My question is how to display/put this additional table just below the selected table? so that if I expand the current selected row it will display this additional table.

Create a JPopop (or maybe even a JPopupMenu). Add your table to it and then position it below the selected row. of the table.

Similar Messages

  • Drag the component from one cell to another cell within JTable

    Hi All,
    I have one requirement to drag the component from JList to JTable cell. I am able to do it but once if i drag the component from list to table cell, table accepting the drop after this i am unable to move the same component from one cell to another cell within the table.
    Any advice.
    I have used the following logic for JTable and JList is drag enabled.
    DefaultTableModel tableModel=new DefaultTableModel(
                new Object [][] {
                    {null, null, null, null,null,null,null},
                    {null, null, null, null,null,null,null},
                    {null, null, null, null,null,null,null},
                    {null, null, null, null,null,null,null}
                new String [] {
                    "Title 1", "Title 2", "Title 3", "Title 4","Title 5","Title 6","Title 7"
            JTable table = new javax.swing.JTable(){
                public boolean isCellEditable(int row, int column)
                    return false;
            table.setModel(tableModel);
            table.setDragEnabled(true);
            table.setDropMode(DropMode.INSERT);
            table.setTransferHandler(new TransferHandler(){
                public boolean canImport(TransferHandler.TransferSupport info){
                    if (!info.isDataFlavorSupported(DataFlavor.stringFlavor)){
                        return false;
                    return true;
                public boolean importData(TransferSupport support) {
                    if (!support.isDrop()) {
                        return false;
                    if (!canImport(support)) {
                        return false;
                    JTable table=(JTable)support.getComponent();
                    DefaultTableModel tableModel=(DefaultTableModel)table.getModel();
                    // fetch the drop location
                    JTable.DropLocation dl = (JTable.DropLocation)support.getDropLocation();
                    int row = dl.getRow();
                    int col=dl.getColumn();
                    // fetch the data and bail if this fails
                    String data;
                    try {
                        data = (String)support.getTransferable().getTransferData(DataFlavor.stringFlavor);
                    } catch (UnsupportedFlavorException e) {
                        return false;
                    } catch (IOException e) {
                        return false;
                    calendarTableModel.setValueAt(data, row, col);
                    return true;
            });Thanks & Regards,
    Maadhav.
    Edited by: maadhav on Jun 23, 2009 12:29 AM

    Hi All,
    I fixed this issue with some additional logic which allow me to drag and drop the string component from one cell to another cell within in the JTable.
    I am attaching the new logic here, if any one needs use it.
    DefaultTableModel tableModel=new DefaultTableModel(
                new Object [][] {
                    {null, null, null, null,null,null,null},
                    {null, null, null, null,null,null,null},
                    {null, null, null, null,null,null,null},
                    {null, null, null, null,null,null,null}
                new String [] {
                    "Title 1", "Title 2", "Title 3", "Title 4","Title 5","Title 6","Title 7"
            JTable table = new javax.swing.JTable(){
                public boolean isCellEditable(int row, int column)
                    return false;
            table.setModel(tableModel);
            table.setDragEnabled(true);
            table.setDropMode(DropMode.USE_SELECTION);
            table.setTransferHandler(new TransferHandler(){
              public int getSourceActions(JComponent c) {
                    return DnDConstants.ACTION_COPY_OR_MOVE;
                public Transferable createTransferable(JComponent comp)
                    JTable table=(JTable)comp;
                    int row=table.getSelectedRow();
                    int col=table.getSelectedColumn();
                    String value = (String)table.getModel().getValueAt(row,col);
                    StringSelection transferable = new StringSelection(value);
                    table.getModel().setValueAt(null,row,col);
                    return transferable;
                public boolean canImport(TransferHandler.TransferSupport info){
                    if (!info.isDataFlavorSupported(DataFlavor.stringFlavor)){
                        return false;
                    return true;
                public boolean importData(TransferSupport support) {
                    if (!support.isDrop()) {
                        return false;
                    if (!canImport(support)) {
                        return false;
                    JTable table=(JTable)support.getComponent();
                    DefaultTableModel tableModel=(DefaultTableModel)table.getModel();
                   JTable.DropLocation dl = (JTable.DropLocation)support.getDropLocation();
                    int row = dl.getRow();
                    int col=dl.getColumn();
                    String data;
                    try {
                        data = (String)support.getTransferable().getTransferData(DataFlavor.stringFlavor);
                    } catch (UnsupportedFlavorException e) {
                        return false;
                    } catch (IOException e) {
                        return false;
                    tableModel.setValueAt(data, row, col);
                    return true;
            });Thanks & Regards,
    Maadhav..
    Edited by: maadhav on Jun 23, 2009 5:26 AM
    Edited by: maadhav on Jun 23, 2009 5:28 AM

  • Using two editor instances within JTable

    Hello,
    I'm struggling around using component editors within JTable. E.g. selectAll text on entering a JTextField cell or immediately raising the popup while entering a JComboBox cell.
    In my analysis most of these problems arises due the re-use of the cell editor.
    The event sequence is doing things in the context of the old cell while preparing the editor for the new cell has already been started.
    Because it is the same component and some things are bound deep inside the L&F it seems not easy to handle them properly.
    Just an idea from me is to avoid such problems by working with two instances for the editors in general. This should avoid all problems coming out of overlapping event processing. (To provide each cell with an own component is of course no solution)
    Any comment on such an approach?
    Thanks in advance
    Wolfgang R.

    No, it wasn't the custom JTable extension.
    By entering a cell a popup will be shown for a short moment. This is only by using Windows L&F (not Metal). Within the L&F a togglePopup() is called which may cause this problem.
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Component;
    import java.util.EventObject;
    import javax.swing.DefaultCellEditor;
    import javax.swing.JComboBox;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.UIManager;
    import javax.swing.WindowConstants;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableCellRenderer;
    public class JTableExt extends JTable {
         public static class ComboBoxEnumRenderer extends JComboBox implements
                   TableCellRenderer {
              public ComboBoxEnumRenderer() {
                   setEditable(false);
                   setBackground(Color.WHITE);
              public Component getTableCellRendererComponent(JTable table, Object value,
                        boolean isSelected, boolean hasFocus, int row, int column) {
                   this.removeAllItems();
                   this.addItem(value);
                   return this;
         public static class ComboBoxEnumEditor extends DefaultCellEditor {
              private static String[] values = null;
              public ComboBoxEnumEditor() {
                   super(new JComboBox());
                   values = new String[50000];
                   for (int i = 0; i < values.length; i++) {
                        values[i] = "row_" + i;
              public Component getTableCellEditorComponent(JTable table, Object value,
                        boolean isSelected, int row, int column) {
                   JComboBox combo = (JComboBox) getComponent();
                   combo.removeAllItems();
                   for (int i = 0; i < values.length; i++) {
                        combo.addItem(values);
                   combo.setSelectedIndex(0);
                   return super.getTableCellEditorComponent(table, value, isSelected, row,
                             column);
         public JTableExt() {
              super();
              init();
         // invoke editor on cell entry
         public void changeSelection(final int row, final int column, boolean toggle,
                   boolean extend) {
              super.changeSelection(row, column, toggle, extend);
              if (editCellAt(row, column))
                   getEditorComponent().requestFocusInWindow();
         private void init() {
              setDefaultEditor(Object.class, new ComboBoxEnumEditor());
              setDefaultRenderer(Object.class, new ComboBoxEnumRenderer());
         private static void setUI() {
              String lnfName = "";
              //lnfName = "com.jgoodies.plaf.plastic.Plastic3DLookAndFeel";
              lnfName = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
              try {
                   UIManager.setLookAndFeel(lnfName);
              } catch (Exception exc) {
         public static void main(String args[]) {
              try {
                   setUI();
                   javax.swing.JFrame frame = new javax.swing.JFrame();
                   frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
                   frame.getContentPane().setLayout(new BorderLayout());
                   final JTableExt demo = new JTableExt();
                   Object[][] data = new Object[30][1];
                   demo.setModel(new DefaultTableModel(data, new String[] { "first column" }));
                   frame.getContentPane().add("Center", new JScrollPane(demo));
                   frame.setSize(600, 600);
                   frame.setVisible(true);
              } catch (Throwable t) {
                   System.exit(0);
    //end

  • Rendering a JTable within a JTable Cell

    How can one render a JTable within another JTable cell?

    You could return JTable in your TableCellRenderer.
    Denis Krukovsky
    http://sourceforge.net/projects/dotuseful/

  • JComboBox within JTable

    Hi,
    I've got the following problem with my JComboBox:
    The JComboBox zcb is filled out of a database (this works!). This JComboBox is a column of the JTable jtbDauerlaeufe (this works, too!).
    Now the strange behaviour:
    1.) In the application I open for the first time the JDialog which the JTable is part of.
    2.) Then the correct value in the JTable column is displayed.
    3.) I click with the mouse in the column with my JComboBox => the ComboBox opens, but not with the selected (or displayed) value of my column, but with the first value of available JComboBox-values :-(
    4.) When I leave the JComboBox and open it again, then the selected/displayed value of my column is also selected within my JComboBox.
    Now my question:
    Why is this behaviour not available when I open my JComboBox the first time? And what have I to do for getting the selected value of my jtable-column when I open the JComboBox the first time???
    JComboBox zcb = new JComboBox();
    // gets the JTable-column for the JComboBox
    tc = jtbDauerlaeufe.getColumn(model.getZETColName());
    // fill the values in the JComboBox
    broker.getZaehlereinheitenBroker().fillComboBox(zcb);
    tc.setCellEditor(new DefaultCellEditor(zcb));
    Any help & hint is very welcome,
    Fe

    Hi
    The problem is not with ur JComboBox.. It lies where u set the datavector of the JTable..
    1. What type of objects does the ComboBox hold. Simple String or other Objects??
    2. How do u set the JTable data the first time??
    First time I think u wuld be explicitly setting the table data with different kind of objects , say string value for the column holding the combobox. Thats y the first time while loading it works properly.
    Try changing the combobox values with strings instead of other Objects.. tell me if it works :)
    Nisha

  • Cell Editor for a JTable within A JTable Cell

    My individual cells each contain a seperate JTable and I need to write a cell editor for it. I'm not really sure how to write one so if someone show me where I can find some useful examples of such a cell editor I would greatly appreciate it. Thank you for your time. :-)

    So, you have a big table whose cells each contain a little table. I assume you already have the little tables working correctly with cell editors and so on, and you want to write a cell editor for the big table. Correct?
    My problem with this is that I can't imagine how this would actually work in practice. Suppose I click on a cell in the big table; then the cell renderer displays the appropriate little table. At this point should I see one of the cells in that little table selected, and should I be able to use the Tab key to move around the little table? And if so, then I can't use the Tab key to move around the big table. Next, suppose I press F2 indicating that I want to edit the little table. What should change? Should I now be able to tab around the little table, whereas I couldn't before? And if so, how do I indicate that I have stopped editing the little table? Pressing Enter indicates to the little table's cell editor that its editing is finished, but how should I tell the big table's cell editor that its editing is finished?
    Perhaps if you can answer this, you may have a better idea of how to solve your problem. Sorry I only have questions and not answers.

  • Resize small jtable within jframe

    Hi, I have a small jtable in a jframe and would like to enable the user to resize this table by dragging its edges via mouse? How can I do this?
    thx
    D.

    Try adding the JScrollPane onto a JPanel with GridLayout and add the JPanel to the north of the content pane of the JFrame using BorderLayout.
    Is this what you intended to do?

  • Unable to grow and shrink a JTable within a JScrollPane

    I need help with the following: I want to display a JTable component with a calendar like design. Dragging the size of the parent component (having a border to drag) should dynamically adapt the JTable' size and its cells. Since the JTable has a minimum size shrinking the parent component should show scrollbars if the minimum size is reached horizontal or vertical respectively.
    I have the JTable put ijnto the viewport of a scrollpane and the scrollpane is the child component of a JPanel. So dragging appears with the panel.
    The JTable cells do nicely but from a specific size on there is a grey area on the lower part of the JPanel which is not repainted. What is causing this? What do I have to do? I'm lost in the jungle of invalidate(), repaint(), update(), doLayout() etc.
    Here is my SSCCE (at least I hope it is one):
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.event.ComponentAdapter;
    import java.awt.event.ComponentEvent;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.ListSelectionModel;
    import javax.swing.UIManager;
    import javax.swing.table.AbstractTableModel;
    import javax.swing.table.TableColumn;
    import javax.swing.table.TableModel;
    //public class MyComponent extends JScrollPane
    public class MyComponent extends JPanel
    ///   class data
         static public final long serialVersionUID = -1L;
         static public final int c_ColWidth = 29;
         static public final int c_RowHeight = 18;
         static public final int c_TableWidth = 930;
         static public final int c_TableHeight = 234;
    ///   instance data
         private String[] m_strColHeader = {
              "01", "02", "03", "04", "05", "06", "07", "08", "09", "10",
              "11", "12", "13", "14", "15", "16", "17", "18", "19", "20",
              "21", "22", "23", "24", "25", "26", "27", "28", "29", "30",
              "31",
         private Object[][] m_Data = new Object[12][33];// data array
         private TableModel m_DataModel = new AbstractTableModel() {
              static public final long serialVersionUID = -1L;
              public int getColumnCount() { return m_strColHeader.length; }
              public int getRowCount() { return m_Data != null ? m_Data.length : 0; }
              public Object getValueAt(int row, int col) { return m_Data[row][col]; }
              public String getColumnName(int col) { return m_strColHeader[col]; }
              public Class getColumnClass(int col) { return String.class; }
              public boolean isCellEditable(int row, int col) { return false; }
              public void setValueAt(Object aValue, int row, int col) {
                   m_Data[row][col] = aValue;
         protected BorderLayout myLayout = new BorderLayout();
         protected JTable tableView = new JTable(m_DataModel);
         protected JScrollPane scrollPane = new JScrollPane(tableView);
    ///   public class methods
         static public void main(String[] args)
              try
                   UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
              catch(Exception e)
                   e.printStackTrace();
              MyComponent comp1 = new MyComponent();
              JFrame frame = new JFrame("MyComponent");
              frame.addWindowListener(new WindowAdapter() {
                   public void windowClosing(WindowEvent e) {
                        System.exit(0);
              frame.getContentPane().add(comp1);
              frame.pack();
              frame.setVisible(true);
    ///   constructors
         public MyComponent()
              try
                   jbInit();
                   initTable();
              catch(Exception ex)
                   ex.printStackTrace();
    ///   protected instance methods
         protected void initTable()
              // do nor allow user interaction with calendar view
              tableView.getTableHeader().setReorderingAllowed(false);
              tableView.getTableHeader().setResizingAllowed(false);
              //tableView.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
              tableView.setRowHeight(c_RowHeight);
              // adapt all CellRenderers
              for (int i = 0; i < m_DataModel.getColumnCount(); i++)
                   TableColumn column = tableView.getColumn(tableView.getColumnName(i));
                   column.setMinWidth(c_ColWidth);
                   column.setPreferredWidth(c_ColWidth);
    ///   private instance methods
         private void jbInit() throws Exception
              this.setLayout(myLayout);
              this.add(scrollPane, BorderLayout.CENTER);
              scrollPane.getViewport().setMinimumSize(new Dimension(c_TableWidth, c_TableHeight));
              scrollPane.getViewport().setPreferredSize(new Dimension(c_TableWidth, c_TableHeight));
              tableView.setPreferredSize(new Dimension(c_TableWidth, c_TableHeight));
              addComponentListener(new MyComponent_componentAdapter(this));
    ///   event handling
         public void componentBoundsChanged(ComponentEvent e)
              scrollPane.setBounds(0, 0, getWidth(), getHeight());
              scrollPane.getViewport().setBounds(0, 0, getWidth(), getHeight());
              //tableView.setBounds(0, 0, getWidth(), getHeight());
              tableView.setSize(scrollPane.getViewport().getWidth(), scrollPane.getViewport().getHeight());
              tableView.setRowHeight(getBounds().height / 13 < c_RowHeight ?
                        c_RowHeight : getBounds().height / 13);
              System.out.println("componentBoundsChanged: getBounds() = " + getBounds());
              System.out.println("componentBoundsChanged: getSize() = " + getSize());
              System.out.println("componentBoundsChanged: getViewport().getBounds() = " + scrollPane.getViewport().getBounds());
              System.out.println("componentBoundsChanged: getViewport().getSize() = " + scrollPane.getViewport().getSize());
              System.out.println("componentBoundsChanged: tableView.getBounds() = " + tableView.getBounds());
              System.out.println("componentBoundsChanged: tableView.getSize() = " + tableView.getSize());
    ///   event adapters
    class MyComponent_componentAdapter extends ComponentAdapter
         protected MyComponent adaptee;
         MyComponent_componentAdapter(MyComponent adaptee)
              this.adaptee = adaptee;
         public void componentMoved(ComponentEvent e)
              adaptee.componentBoundsChanged(e);
         public void componentResized(ComponentEvent e)
              adaptee.componentBoundsChanged(e);
    }

    I guess i am facing exactly opposite problem.
    What i want to do is, I have nested tables in a scroll pane. So I don't want a scroll pane to show exactly whatever visible rows are there in Table (No extra space). If i expand any row, i want scroll pane to be able to show expanded.

  • JTable within JScrollPane (setting BGColor)

    Hello,
    if the JScrollPane is larger than the contained JTable. How can I set the background-color of the arised gap?
    Neither JTable.setBackground(...) nor JScrollPane.setBackground(...) show any effect, i.e. the background-color doesn't change.
    Is there a proper way to avoid this gap, without scrollbars or knowning the exact size of the JTable?
    Yours truly, Raffael Vogler

    http://search.java.sun.com/search/java/index.jsp?qt=%2Btitle%3Ajscrollpane+%2Btitle%3Abackground&nh=10&qp=&rf=1&since=&country=&language=&charset=&variant=&col=javaforums

  • OnMouseDown buttons within JTable Cells?

    I have written an app that uses a custom renderer to enable me to put an image in a cell and attach a custom editor to that image so that when it is clicked it pops up a JPanel. Trouble is, once the user clicks the button and the JPanel appears the image that was within the cell disappears and the cell is empty. How do I switch the image once clicked and display it in the clicked cell.
    Thanks

    When you click on the cell the editor is invoked and will display the data based on the editor, not the renderer.
    So, I'm guessing that in addition to displaying the popup, your editor must be responsible for displaying the original image.

  • Forms configuration : JTable within Forms

    in 10g form with jre6 ver 1.6.0_33 I'm not able to figure out what creates the error while Implementation Class property
    Importing Class oracle.forms.fd.FJTable...
    Exception occurred: java.lang.ClassNotFoundException: oracle.forms.fd.FJTable
    the step that I've done is :
    Copy the fjtable16.jar file in the /forms/java directory
    Edit the /forms/server/formsweb.cfg file to add the jar file to the archive and archive_jini tags

    actually I've both the file there fjtable16.jar & fjtable.jar in
    \DevSuiteHome_1\forms\java\fjtable.jar
    shall I remove fjtable.jar

  • JTable containing JTable

    I am handeling with a special Jtable containing cells with other Jtables and also buttons which use values from the table. The problem is, when i am changing a cell and without losing the focus i am clicking in another place, the value being used for the cell i am currenty editting, is the old value, instead of the new one. Sorry, but it is a little bit difficult to explain here. I have tried to use the "fireTableDataChanged()" event, but then i lose the selected row which is a crucial value for the application.

    Maybe you could save the current row, then fire the fireTableDataChanged() then reselect the current row.
    What do you think about that? That's the only way I know how to do it unless you wrote your own fireTableDataChanged() which would essentially do what I just suggested.

  • JTable inside JTable cell

    Hello. I'm trying to see if it's at all possible to have a JTable inside a JTable cell. I tried modifying those 'JButton inside JCell' examples, to no avail - it seems I didn't actually grasp the idea.
    so anyway - did anyone ever do that? have a table inside a table? anyone can point me in the right direction?
    thanks.

    Hello. I'm trying to see if it's at all possible to
    have a JTable inside a JTable cell. I tried modifying
    those 'JButton inside JCell' examples, to no avail -
    it seems I didn't actually grasp the idea.It is possible, but I think it would make things confusing for the user. What exactly are you wanting to display?
    >
    so anyway - did anyone ever do that? have a table
    inside a table? anyone can point me in the right
    direction?You need a custom renderer and custom editor and most likely custom TableModels for each table. There are row height issues as well, especially if the rows/columns of the inner tables are variable. The getValueAt() method will require some thought. What is the value associated with all the cells in the inner table?
    All in all, this is doable, but may not be desirable.
    >
    thanks.

  • JTable inside JTable

    Hello!
    I have a JTable with 3 rows... I want to do something like this:
    In the last column of each row, there is a button... When I click this button, a table should appear above the current row...
    Is there any way to do it?
    Thanks

    I read the Java tutorial about the GlassPane. If I let it visible, it will block all mouse events, which is not what I want I think. Assume I use the GlassPane, I will store the inner JTable as the value in the outer JTable cells, and I use a customized cell renderer to draw the JTable. When mouse clicks on one of the inner JTable cells, the editor takes over, and draws the inner JTable again. Am I on the right track here?
    Thanks for refering me to the GlassPane!

  • JTable inside JTable cell: drag and drop

    Hello. I've table (let's call it ParentTable), which cells contain other table (NestedTable). NestedTable recieves all events (I can move cursor, select cells by mouse, scroll table). ParentTable have enabled Drag nad Drop (D'n'D). When no cells in NestedTable are selected D'n'D works fine. When I select some cell in NestedTable, D'n'D does't work � it forbids the operation. I think this is because NestedTable recieves D'n'D events, but D'n'D is disabled for it. How can I work around this? I don't want to enable D'n'D for each NestedTable (there are several reasons for this).
    The question is � can I pass to NestedTable all events, except of D'n'D ones?

    Yes, I use custom cell renderer and cell editor for ParentTable, which returns NestedTable.
    DnD turned on for the ParentTable, so when the NestedTable is active (some cells selected in it) it receives DnD events, which are turned off for it, and DnD doesn't work.
    Possible solution is to turn DnD for NestedTable (not for ParentTable), and i'll do this if it is impossible to make it work in current configuration.
    So the question is � is this possible do not pass DnD event to NestedTable ?

Maybe you are looking for