JTable column selection
Hi,
I need to select a particular column in a jtable by right clicking the mouse.Any help ?
play with these methods
Table.setColumnSelectionAllowed(true);
Table.setRowSelectionAllowed(true);
Similar Messages
-
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");
} -
Custom JTable column (JCheckBox) not included in row selection.
I am trying to use JCheckBox (for display only data) as one of my JTable columns. I have written custom cell renderer for the same. Every thing is working fine except that when I select a row, the new custom JCheckBox column is not included in selection. Here is the code that I am using.
protected class CheckBoxColumnRenderer extends DefaultTableCellRenderer {
JCheckBox ckb = new JCheckBox();
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if (value instanceof Boolean) { // Boolean
ckb.setSelected(((Boolean) value));
ckb.setHorizontalAlignment(JLabel.CENTER);
ckb.setBackground(super.getBackground());
if (isSelected || hasFocus) {
ckb.setBackground(table.getSelectionBackground());
return ckb;
}How can I include the custom cell in the row selection.
regards,
nirvan.they have lots of dependencies and it is not always easy to strip out an SSCCE without a considerable effort.Exactly. And is the cause of the problem the dependencies or something else. The only way to know for sure is to strip out the code and simplify the problem, that way you truly understand what the problem is.
The majority of time this can be done with minimal effort as in this case.
Some times we are sure that the problem is with certain part of the code Is the problem the code or the way the code is invoked? How do we know the TableModel is created properly or that the column class is overwritten correctly when we can't see it?
someone having a third look at it may actually find the enhancement required with ease.Exactly, but we need to see the big picture.
So are you sure that I should post an SSCCE with every possible question where coding is involved ?In the majority of cases a SSCCE is easily created in 5-10 minutes, so if you want the fastest help then yes.
Just twice this past week I was ready to ask a question on the forum and was preparing a SSCCE to post and sure enough both times the creation of the SSCCE caused me to look at the problem differently and I solved it. I would much rather solve a problem on my own then post a question and wait for hours (days) hoping someone else knows the answer. -
Set background color to selected jtable columns cell
I am clicking on jtables column.I want to select any column and that column (only selected cell of column)should get displayed with specific background color.
plz helpYou can write your own tablemodel,
i.e. use DefaultTableModel or implement AbstractTableModel.
Good luck! -
F2 key not working with custom JTable Column
I have a custom JTable Column (which is a JPanel with a JTextfield and JButton). Everything works as expected, except when the user presses "F2" to start editing the custom column cell. When the user presses F2, the custom cell goes into editing mode, but I am unable to type anything in it.
Below is the SSCCE.
Steps to Reproduce problem:
1) Run the Program
2) Select any cell in first Column.
3) Press "F2" and try to type into the cell. Can't type anything.
package com.ns;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.util.EventObject;
import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
public class TextButtonCellFrame extends javax.swing.JFrame {
// Variables declaration - do not modify
private JTextField inputText;
private JScrollPane jScrollPane1;
private JPanel testPanel;
private JTable testTable;
// End of variables declaration
public TextButtonCellFrame() {
initComponents();
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
testPanel = new JPanel();
jScrollPane1 = new JScrollPane();
testTable = new JTable();
inputText = new JTextField();
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
testTable.setModel(new DefaultTableModel(
new Object [][] {
{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"
testTable.setCellSelectionEnabled(true);
testTable.setRowHeight(52);
testTable.setSurrendersFocusOnKeystroke(true);
testTable.getColumnModel().getColumn(0).setCellRenderer(new MyTableCellRenderer());
testTable.getColumnModel().getColumn(0).setCellEditor(new MyTableCellEditor(new JTextField()));
testTable.getColumnModel().getColumn(0).setPreferredWidth(200);
jScrollPane1.setViewportView(testTable);
testPanel.add(jScrollPane1);
inputText.setPreferredSize(new Dimension(50, 20));
testPanel.add(inputText);
getContentPane().add(testPanel, BorderLayout.CENTER);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-576)/2, (screenSize.height-417)/2, 576, 417);
}// </editor-fold>
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new TextButtonCellFrame().setVisible(true);
public class MyTableCellRenderer extends JPanel implements TableCellRenderer {
Point point;
JButton button1 = new JButton("Test 1");
JTextField txtField = new JTextField();
public MyTableCellRenderer() {
setLayout(new BorderLayout());
this.add(button1, BorderLayout.EAST);
this.add(txtField,BorderLayout.CENTER);
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int rowIndex, int vColIndex) {
if (isSelected) {
txtField.setBackground(testTable.getSelectionBackground());
txtField.setBorder(UIManager.getBorder("Table.focusCellHighlightBorder"));
else {
txtField.setBackground(testTable.getBackground());
txtField.setBorder(null);
return this;
public class MyTableCellEditor extends DefaultCellEditor {
JPanel panel = new JPanel();
JButton button1 = new JButton ("Test 1");
JTextField txtField;
MyTableCellEditor(JTextField txtField) {
super (txtField);
this.txtField = txtField;
panel.setLayout(new BorderLayout());
panel.add(button1, BorderLayout.EAST);
panel.add(txtField,BorderLayout.CENTER);
public void actionPerformed(ActionEvent e) {
if (e.getSource() == button1)
JOptionPane.showMessageDialog(null, "Action One Successful");
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int row, int column) {
return panel;
public boolean isCellEditable(final EventObject anEvent) {
if (anEvent instanceof KeyEvent) {
final KeyEvent keyEvent = (KeyEvent) anEvent;
SwingUtilities.invokeLater(new Runnable() {
public void run() {
if (!Character.isIdentifierIgnorable(keyEvent.getKeyChar())) {
txtField.setText(txtField.getText() + keyEvent.getKeyChar());
txtField.setCaretPosition(txtField.getText().length());
txtField.requestFocusInWindow();
return super.isCellEditable(anEvent);
}The code for isCellEditable(final EventObject anEvent) which is needed to edit the cell using keyboard was provided by DarrylBurke here
regards,
nirvan.The F2 key when pressed generates an action event (either JTable generates it or some other component). I am not sure how to handle the action event in the isCellEditable() method. Also, F(X) range of keys other than F2 dump some junk character in the JTextfield when pressed. I am now stuck at this point and don't know how handle F(X) range of keys.
regards,
nirvan. -
How to set special rows in jtable not selectable
Hello programmers,
anybody knows how to set special rows(p.E. row 0) in jtable not selectable.
in advance thanks for your answerstable = new JTable(...)
public void changeSelection(int row, int column, boolean toggle, boolean extend)
if (row == 0)
return;
else
super.changeSelection(row, column, toggle, extend);
}; -
Change of Jtable feature select in 1.5?
I have a JTable Object, with 12 columns and 32 rows.
when the user want to populate the first eight rows there is no problem, they begin ant the rown 0 column 0, But when the user want to capture only from the 9 to 16 row, they select those range, but until the version 1.4.2, the cursos was positioned in the first row&colum selected.
But after jdk 1.5.x, the cursor focus focus is in the last row&column selected..
How can I make that the first position select get the focus in the JTable?
In other worksheet have this feature, fouc son the first colun&row selected.
why Java change it?
Please help me out.The problem is not how to select an interval.
The problem is the position of the cursor when finalizing the selection of an interval.
In the versions prior at the 1.5 was positioned at the beginning of the selection and not to end.
But since version 1.5, the focus on the table have the last position selected.
Look the excel feature or another worksheet, and the focus always is the first cell selected.
Thnaks -
Hi,
I'm trying to resize my JTable columns with this code, but it's not working. What I am doing wrong?
for (int i = 0; i < table.getColumnModel().getColumnCount(); i++) {
TableColumn tc = table.getColumnModel().getColumn(i);
int width = (i == 0)? 10 : table.getWidth()/2 - 10; // three columns
tc.setPreferredWidth(width);
Thanks,
Andr�Now my problem is that using either of these methods
is they don't carry the user's selected column width
through updates.It sounds like the change event your table model is firing is causing the entire table to be rebuilt. I would guess that you are firing fireTableStructureChanged() which would cause the entire table to be rebuilt (columns, cell values, etc.) Just fire a change event for the minimum necessary. If you can't identify what data in your table has changed (to fire cell or row change events), but the structure (columns) of the table hasn't changed, just fire fireTableDataChanged(). This will cause the cells to be redrawn with the new values, but shouldn't cause the columns to be rebuilt and resized. -
Table Sorting based on Column Selection
Dear All,
I am using an AbstractTableModel. I would like to implement the sorting based on Column selection. Could anyone help me in this please.
Thanks in advance,
Regards
Irfaancheck this
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumnModel;
import java.awt.Component;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Hashtable;
public class TableSorter extends JPanel
private boolean DEBUG = false;
private Object[] columnNames = { "First Name", "Last Name", "Sport", "# of Years",
"Vegetarian"};
private Object[][] data = { { "Mary", "Campione", "Snowboarding", 1, 2 },
{ "Alison", "Huml", "Rowing", 3, 4 }, { "Kathy", "Walrath", "Knitting", 5, 9 },
{ "Sharon", "Zakhour", "Speed reading", 6, 10 }, { "Philip", "Milne", "Pool", 7, 11 },
{ "Isaac", "Rabinovitch", "Nitpicking", 8, 12 }, };
private SortFilterModel m_modSortFilterModel;
private TableColumnModel m_modColumnModel;
private TableHeaderRenderer m_btnSorterRenderer;
protected boolean m_bAbCOC = true;
JTable table = new JTable();
public TableSorter()
super(new GridLayout(1, 0));
m_modSortFilterModel = new SortFilterModel();
m_modSortFilterModel.addMouseListener(table);
table.setModel(m_modSortFilterModel);
m_btnSorterRenderer = new TableHeaderRenderer();
m_modColumnModel = table.getColumnModel();
for (int i = 0; i < columnNames.length; i++)
m_modColumnModel.getColumn(i).setHeaderRenderer(m_btnSorterRenderer);
JScrollPane scrollPane = new JScrollPane(table);
add(scrollPane);
private class SortFilterModel extends AbstractTableModel
int[] indexes;
ATSTableSorter sorter;
public String[] tableHeadersArray;
boolean isAscent = true;
public void addMouseListener(final JTable table)
table.getTableHeader().addMouseListener(new MouseAdapter()
public void mouseClicked(MouseEvent event)
int tableColumn = table.columnAtPoint(event.getPoint());
m_btnSorterRenderer.setPressedColumn(tableColumn);
m_btnSorterRenderer.setSelectedColumn(tableColumn);
if (TableHeaderRenderer.DOWN == m_btnSorterRenderer.getState(tableColumn))
isAscent = true;
else
isAscent = false;
// translate to table model index and sort
int modelColumn = table.convertColumnIndexToModel(tableColumn);
sortByColumn(modelColumn, isAscent);
public Object getValueAt(int row, int col)
int rowIndex = row;
if (indexes != null)
rowIndex = indexes[row];
return data[rowIndex][col];
public void setValueAt(Object value, int row, int col)
int rowIndex = row;
if (indexes != null)
rowIndex = indexes[row];
super.setValueAt(value, rowIndex, col);
public void sortByColumn(int column, boolean isAscent)
if (sorter == null)
sorter = new ATSTableSorter(this);
sorter.sort(column, isAscent);
fireTableDataChanged();
public int[] getIndexes()
int n = getRowCount();
if (indexes != null)
if (indexes.length == n)
return indexes;
indexes = new int[n];
for (int i = 0; i < n; i++)
indexes[i] = i;
return indexes;
public int getRowCount()
return data.length;
public String getColumnName(int c)
return columnNames[c].toString();
public int getColumnCount()
return columnNames.length;
public Class getColumnClass(int col)
switch (col)
case 0:
return String.class;
case 1:
return String.class;
case 2:
return String.class;
case 3:
return Integer.class;
case 4:
return Integer.class;
default:
return Object.class;
class ATSTableSorter
SortFilterModel model;
public ATSTableSorter(SortFilterModel model)
this.model = model;
public void sort(int column, boolean isAscent)
int n = model.getRowCount();
int[] indexes = model.getIndexes();
for (int i = 0; i < n - 1; i++)
int k = i;
for (int j = i + 1; j < n; j++)
if (isAscent)
if (compare(column, j, k) < 0)
k = j;
else
if (compare(column, j, k) > 0)
k = j;
int tmp = indexes;
indexes[i] = indexes[k];
indexes[k] = tmp;
public int compare(int column, int row1, int row2)
Object o1 = model.getValueAt(row1, column);
Object o2 = model.getValueAt(row2, column);
if (o1 == null && o2 == null)
return 0;
else if (o1 == null)
return -1;
else if (o2 == null)
return 1;
else
Class type = model.getColumnClass(column);
if (type.getSuperclass() == Number.class)
return compare((Number) o1, (Number) o2);
else if (type == String.class)
return ((String) o1).compareTo((String) o2);
else
return ((String) o1).compareTo((String) o2);
public int compare(Number o1, Number o2)
double n1 = o1.doubleValue();
double n2 = o2.doubleValue();
if (n1 < n2)
return -1;
else if (n1 > n2)
return 1;
else
return 0;
class TableHeaderRenderer extends JButton implements TableCellRenderer
public static final int NONE = 0;
public static final int DOWN = 1;
public static final int UP = 2;
int pushedColumn;
Hashtable state;
public TableHeaderRenderer()
pushedColumn = -1;
state = new Hashtable();
setMargin(new Insets(0, 0, 0, 0));
setHorizontalTextPosition(LEFT);
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus,
int row, int column)
setText((value == null) ? "" : value.toString());
setBorder(UIManager.getBorder("TableHeader.cellBorder"));
boolean isPressed = (column == pushedColumn);
getModel().setPressed(isPressed);
getModel().setArmed(isPressed);
return this;
public void setPressedColumn(int col)
pushedColumn = col;
public void setSelectedColumn(int col)
if (col < 0)
return;
Integer value = null;
Object obj = state.get(new Integer(col));
if (obj == null)
value = new Integer(DOWN);
else
if (((Integer) obj).intValue() == DOWN)
value = new Integer(UP);
else
value = new Integer(DOWN);
state.clear();
state.put(new Integer(col), value);
public int getState(int col)
int retValue;
Object obj = state.get(new Integer(col));
if (obj == null)
retValue = NONE;
else
if (((Integer) obj).intValue() == DOWN)
retValue = DOWN;
else
retValue = UP;
return retValue;
private static void createAndShowGUI()
JFrame frame = new JFrame("TableDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
TableSorter newContentPane = new TableSorter();
newContentPane.setOpaque(true); // content panes must be opaque
frame.setContentPane(newContentPane);
frame.pack();
frame.setVisible(true);
public static void main(String[] args)
javax.swing.SwingUtilities.invokeLater(new Runnable()
public void run()
createAndShowGUI(); -
Hi All,
Suppose I have table, whose structure changes frequently on daily basis.
For eg. desc my_table gives you following column name on Day 1
SQL > desc my_table;
Output
Name
Age
Phone
On Day 2, two more columns are added, viz, Address and Salary.
SQL > desc my_table;
Output
Name
Age
Phone
Address
Salary
Now I want to create an Dynnamic RTF report which would fetch data from ALL columns from my_table on daily basis. For that I have defined a concurrent program with XML as output type and have attached a data template/data definition to it which takes in XML as input and gives final output of conc program in EXCEL layout. I am able to do this for constant number of columns, but dont know how to do it when the number of columns to be displayed changes dynamically.
For Day 1 my XML file should be like this.
<?xml version="1.0" encoding="UTF-8"?>
<dataTemplate name="XYZ" description="iExpenses Report" Version="1.0">
<dataQuery>
<sqlStatement name="Q2">
<![CDATA[
SELECT Name
,Age
,Phone
FROM my_table
]]>
</sqlStatement>
</dataQuery>
<dataStructure>
<group name="G_my_table" source="Q2">
<element name="Name" value="Name" />
<element name="Age" value="Age" />
<element name="Phone" value="Phone" />
</group>
</dataStructure>
</dataTemplate>
And my Day 1, EXCEL output from RTF template should be like this.
Name Age Phone
Swapnill 23 12345
For Day 2 my XML file should be like this. With 2 new columns selected in SELECT clause.
<?xml version="1.0" encoding="UTF-8"?>
<dataTemplate name="XYZ" description="iExpenses Report" Version="1.0">
<dataQuery>
<sqlStatement name="Q2">
<![CDATA[
SELECT Name
,Age
,Phone
,Address
,Salary
FROM my_table
]]>
</sqlStatement>
</dataQuery>
<dataStructure>
<group name="G_my_table" source="Q2">
<element name="Name" value="Name" />
<element name="Age" value="Age" />
<element name="Phone" value="Phone" />
<element name="Address" value="Address" />
<element name="Salary" value="Salary" />
</group>
</dataStructure>
</dataTemplate>
And my Day 2, EXCEL output from RTF template should be like this.
Name Age Phone Address Salary
Swapnill 23 12345 Madrid 100000
Now, I dont know below things.
Make the XML dynamic as in on Day 1 there must be 3 columns in the SELECT statement and on Day 2, 5 columns. I want to create one dynamic XML which should not be required to be changed if new columns are added in my_table. I dont know how to create this query and also create their corresponding elements below.
Make the RTF template dyanamic as in Day1 there must 3 columns in EXCEL output and on Day 2, 5 columns. I want to create a Dynamic RTF template which would show all the columns selected in Dynamic XML.I dont know how the RTF will create new XML tags and how it will know where to place it in the report. Means, I can create RTF template on Day 1, by loading XML data for 3 columns and placing 3 XML tags in template. But how will it create and place tags for new columns on Day 2?
Hope, you got my requirement, its a challenging one. Please let me know how I can implement the required solution using RTF dynamically without any manual intervention.
Regards,
Swapnil K.
Message was edited by: SwapnilKHi All,
I am able to fulfil above requirement. Now I am stuck at below point. Need your help!
Is there any way to UPDATE the XML file attached to a Data Definition (XML Publisher > Data Definition) using a standard package or procedure call or may be an API from backend? I am creating an XML dynamically and I want to attach it to its Data Definition programmatically using SQL.
Please let me know if there is any oracle functionality to do this.
If not, please let me know the standard directories on application/database server where the XML files attached to Data Definitions are stored.
For eg, /$APPL_TOP/ar/1.0/sql or something.
Regards,
Swapnil K. -
How Can I set up a JTable columns?
Dear All,
How can I set up my JTable columns to have the amount the user specifies?
for example when the user types in 50 in JTextField 1 I want the JTables columns to then set to 50.
How can this be done?
Thanks
lol
import javax.swing.*;
import javax.swing.table.TableModel;
import java.io.*;
import java.util.*;
import java.lang.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class si1 extends javax.swing.JFrame implements ActionListener {
JTextField name = new JTextField(15);
JTextField name1 = new JTextField(15);
public si1() {
super("DataBase Loader");
setSize(1025,740);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel pane = new JPanel();
JPanel pane1 = new JPanel();
JPanel pane2 = new JPanel();
JPanel pane3 = new JPanel();
JPanel pane4 = new JPanel();
pane.setLayout(new GridLayout(20,1));
pane1.setLayout(new BorderLayout());
int j=10;
String[][] data = new String[j][2];
for (int k=0; k<j; k++){
String[] row = {"",""};
data[k] = row;
String[] columnNames = {"First Name", "Last Name"};
JTable perstab = new JTable(data, columnNames);
perstab.setGridColor(Color.yellow);
perstab.setPreferredScrollableViewportSize(new Dimension(500,500));
JScrollPane scrollPane = new JScrollPane(perstab);
pane1.add(new JPanel(), BorderLayout.EAST);
JButton btn = new JButton("What are the names?");
btn.addActionListener(this);
btn.putClientProperty("DATABASE", perstab);
pane1.add(new JPanel().add(btn), BorderLayout.SOUTH);
pane2.add(name);
pane3.add(name1);
pane.add(pane2);
pane.add(pane3);
pane1.add(pane, BorderLayout.WEST);
pane4.add(scrollPane);
pane1.add(pane4, BorderLayout.CENTER);
setContentPane(pane1);
show();
public static void main(String[] args) {
si1 frame = new si1();
frame.setVisible(true);
public void actionPerformed(ActionEvent e) {
JTable table = (JTable)((JButton)e.getSource()).getClientProperty("DATABASE");
TableModel model = table.getModel();
int count = model.getRowCount();
String[] firstnames = new String[count];
String[] lastnames = new String[count];
for (int i=0; i < count; i++) {
firstnames[i] = (String)model.getValueAt(i, 0);
System.out.println("first name at row " + i + ": " + firstnames);
lastnames[i] = (String)model.getValueAt(i, 1);
System.out.println("lastname name at row " + i + ": " + lastnames[i]);As you can see I have tried this, but no success.
If I am doing something wrong please accept my apology, and address me in the right direction.
Thanks
Lol
import javax.swing.*;
import javax.swing.table.TableModel;
import java.io.*;
import java.util.*;
import java.lang.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class si1 extends javax.swing.JFrame implements ActionListener {
JTextField name = new JTextField(15);
JTextField name1 = new JTextField(15);
public si1() {
super("DataBase Loader");
setSize(1025,740);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel pane = new JPanel();
JPanel pane1 = new JPanel();
JPanel pane2 = new JPanel();
JPanel pane3 = new JPanel();
JPanel pane4 = new JPanel();
pane.setLayout(new GridLayout(20,1));
pane1.setLayout(new BorderLayout());
int j=10;
String[][] data = new String[j][2];
for (int k=0; k<j; k++){
String[] row = {"",""};
data[k] = row;
String[] columnNames = {"First Name", "Last Name"};
JTable perstab = new JTable(data, columnNames);
((DefaultTableModel)perstab.getModel()).setColumnCount(Integer.parseInt(name.getText()));
perstab.setGridColor(Color.yellow);
perstab.setPreferredScrollableViewportSize(new Dimension(500,500));
JScrollPane scrollPane = new JScrollPane(perstab);
pane1.add(new JPanel(), BorderLayout.EAST);
JButton btn = new JButton("What are the names?");
btn.addActionListener(this);
btn.putClientProperty("DATABASE", perstab);
pane1.add(new JPanel().add(btn), BorderLayout.SOUTH);
pane2.add(name);
pane3.add(name1);
pane.add(pane2);
pane.add(pane3);
pane1.add(pane, BorderLayout.WEST);
pane4.add(scrollPane);
pane1.add(pane4, BorderLayout.CENTER);
setContentPane(pane1);
show();
public static void main(String[] args) {
si1 frame = new si1();
frame.setVisible(true);
public void actionPerformed(ActionEvent e) {
JTable table = (JTable)((JButton)e.getSource()).getClientProperty("DATABASE");
TableModel model = table.getModel();
int count = model.getRowCount();
String[] firstnames = new String[count];
String[] lastnames = new String[count];
for (int i=0; i < count; i++) {
firstnames[i] = (String)model.getValueAt(i, 0);
System.out.println("first name at row " + i + ": " + firstnames);
lastnames[i] = (String)model.getValueAt(i, 1);
System.out.println("lastname name at row " + i + ": " + lastnames[i]); -
How to generate a second csv file with different report columns selected?
Hi. Everybody:
How to generate a second csv file with different report columns selected?
The first csv file is easy (report attributes -> report export -> enable CSV output Yes). However, our users demand 2 csv files with different report columns selected to meet their different needs.
(The users don't want to have one csv file with all report columns included. They just want to get whatever they need directly, no extra columns)
Thank you for any help!
MZHello,
I'm doing it usually. Typically example would be in the report only the column "FIRST_NAME" and "LAST_NAME" displayed whereas
in the csv exported with the UTL_FILE the complete address (street, housenumber, additions, zip, town, state ... ) is written, these things are needed e.g. the form letters.
You do not need another page, just an additional button named e.g. "export_to_csv" on your report page.
The csv export itself is handled from a plsql procedure "stored procedure" ( I like to have business logic outside of apex) which is invoked by pressing the button "export_to_csv". Of course the stored procedure can handle also parameters
An example code would be something like
PROCEDURE srn_brief_mitglieder (
p_start_mg_nr IN NUMBER,
p_ende_mg_nr IN NUMBER
AS
export_file UTL_FILE.FILE_TYPE;
l_line VARCHAR2(20000);
l_lfd NUMBER;
l_dateiname VARCHAR2(100);
l_datum VARCHAR2(20);
l_hilfe VARCHAR2(20);
CURSOR c1 IS
SELECT
MG_NR
,TO_CHAR(MG_BEITRITT,'dd.mm.yyyy') AS MG_BEITRITT ,TO_CHAR(MG_AUFNAHME,'dd.mm.yyyy') AS MG_AUFNAHME
,MG_ANREDE ,MG_TITEL ,MG_NACHNAME ,MG_VORNAME
,MG_STRASSE ,MG_HNR ,MG_ZUSATZ ,MG_PLZ ,MG_ORT
FROM MITGLIEDER
WHERE MG_NR >= p_start_mg_nr
AND MG_NR <= p_ende_mg_nr
--WHERE ROWNUM < 10
ORDER BY MG_NR;
BEGIN
SELECT TO_CHAR(SYSDATE, 'yyyy_mm_dd' ) INTO l_datum FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'hh24miss' ) INTO l_hilfe FROM DUAL;
l_datum := l_datum||'_'||l_hilfe;
--DBMS_OUTPUT.PUT_LINE ( l_datum);
l_dateiname := 'SRNBRIEF_MITGLIEDER_'||l_datum||'.CSV';
--DBMS_OUTPUT.PUT_LINE ( l_dateiname);
export_file := UTL_FILE.FOPEN('EXPORTDIR', l_dateiname, 'W');
l_line := '';
--HEADER
l_line := '"NR"|"BEITRITT"|"AUFNAHME"|"ANREDE"|"TITEL"|"NACHNAME"|"VORNAME"';
l_line := l_line||'|"STRASSE"|"HNR"|"ZUSATZ"|"PLZ"|"ORT"';
UTL_FILE.PUT_LINE(export_file, l_line);
FOR rec IN c1
LOOP
l_line := '"'||rec.MG_NR||'"';
l_line := l_line||'|"'||rec.MG_BEITRITT||'"|"' ||rec.MG_AUFNAHME||'"';
l_line := l_line||'|"'||rec.MG_ANREDE||'"|"'||rec.MG_TITEL||'"|"'||rec.MG_NACHNAME||'"|"'||rec.MG_VORNAME||'"';
l_line := l_line||'|"'||rec.MG_STRASSE||'"|"'||rec.MG_HNR||'"|"'||rec.MG_ZUSATZ||'"|"'||rec.MG_PLZ||'"|"'||rec.MG_ORT||'"';
-- DBMS_OUTPUT.PUT_LINE (l_line);
-- in datei schreiben
UTL_FILE.PUT_LINE(export_file, l_line);
END LOOP;
UTL_FILE.FCLOSE(export_file);
END srn_brief_mitglieder;Edited by: wucis on Nov 6, 2011 9:09 AM -
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 can I get two column selection list in my html form
I required to have two column selection list in my jsp page to show name and description of a product. How can i achieve this functionality or is there any other alternative to do so.
If i understand correctly: you can't actually create two columns in a list because it can only hold one value. The only way to achieve what you want is by concatenating the two values you want to display and put this as the value of the listbox.
-
Webdynpro ABAP ALV in SAP ECC6 - EHP4: To disable Column Selection
Hi All,
We are using SAP ECC6 EHP4 and for Webdynpro ABAP application, after each column a vertical white line is appearing, and I need to hide this..
SAP suggested us to disable COLUMN SELECTION I have tried the below code but still I am not able to get this done..
Can you please suggest the appropriate method to achieve the same.
Code:
* show tab COLUMN SELECTION in Settings page
CALL METHOD wd_this->alv_conf_table->if_salv_wd_std_functions~set_column_selection_allowed
EXPORTING value = ABAP_false..
here alv_conf_table refers to CL_SALV_WD_CONFIG_TABLE.
Thanks in advance.
Thanks
Srinivas
Edited by: Srinivas Manchi on Apr 22, 2010 11:35 AM
Edited by: Srinivas Manchi on Apr 22, 2010 1:06 PMYou have to disable the DDic binding on the column before your override text will show up:
data: l_ref_cmp_usage type ref to if_wd_component_usage.
l_ref_cmp_usage = wd_this->wd_cpuse_alv( ).
if l_ref_cmp_usage->has_active_component( ) is initial.
l_ref_cmp_usage->create_component( ).
endif.
data l_salv_wd_table type ref to iwci_salv_wd_table.
l_salv_wd_table = wd_this->wd_cpifc_alv( ).
data l_table type ref to cl_salv_wd_config_table.
l_table = l_salv_wd_table->get_model( ).
data l_column type ref to cl_salv_wd_column.
l_column = l_table->if_salv_wd_column_settings~get_column( 'POSTING_DATE' ).
data l_header type ref to cl_salv_wd_column_header.
l_header = l_column->get_header( ).
l_header->set_prop_ddic_binding_field(
property = if_salv_wd_c_ddic_binding=>bind_prop_text
value = if_salv_wd_c_ddic_binding=>ddic_bind_none ).
l_header->set_text( `Posting Date` ).
Maybe you are looking for
-
How do I transfer all information from an old ipod to a new ipod
I need to transfer all my data from an old ipod to a new ipod. How do I do that?
-
I have transferred my purchased apps to my computer, then updated my IPAD operating system as directed. This erased all my apps from my IPAD. How do I get my apps from my computer back onto the IPAD. Simple syncing does not seem to work. I also h
-
Running FCP HD 4 on Intel Mac?
Hello Not sure where I should post this.... I recently acquired FCP HD 4 (retail) for a screamin' deal. I was hoping it would run on my Mac Pro. It installed fine but when I try to open it, I get configuration error with hardware/software is missing
-
Itunes 11.1.5.5 can not add files or folders with accents?
Hello, I'm using Itunes 11.1.5.5 and when I use the add folder to my library all the files with no accents are added propperly but all those folders or files with an accent (á é í ó ú) that are commonly used in spanish are not well recognized and wil
-
Hi BB Unboxed, Me and my son picked up our copies of Dying Light yesterday and both bought the season pass. The receipt says the code for the season pass will be emailed to you. Well neither one of us have received the email for the season pass code