Column as header in a row
Oracle 10g
Data in table:
type_code code_desc group_id
577 TTW 1
325 RTT 1
562 URT 1
536 GEE 1
475 FDD 1
577 TTW 1
644 PST 2
I want the output in this manner. tried with 'connnect by prior'.
OUTPUT:
577 325 562 536 475
TTW RTT URT GEE FDD
Basically column becomes the header.
Thanks.
Edited by: user545846 on May 13, 2009 8:51 PM
user545846 wrote:
suppose i just want the column as rows and the corresponding data below it.
header is not an issue.Can you clarify what you mean with some example data and expected output.
As for your original question you can dynamically assign column headings if you interface into the Oracle ODCI..
SQL> create or replace type NColPipe as object
2 (
3 l_parm varchar2(10), -- The parameter given to the table function
4 rows_requested number, -- The parameter given to the table function
5 ret_type anytype, -- The return type of the table function
6 rows_returned number, -- The number of rows currently returned by the table function
7 static function ODCITableDescribe( rtype out anytype, p_parm in varchar2, p_rows_req in number := 1 )
8 return number,
9 static function ODCITablePrepare( sctx out NColPipe, ti in sys.ODCITabFuncInfo, p_parm in varchar2, p_rows_req in number := 1 )
10 return number,
11 static function ODCITableStart( sctx in out NColPipe, p_parm in varchar2, p_rows_req in number := 1 )
12 return number,
13 member function ODCITableFetch( self in out NColPipe, nrows in number, outset out anydataset )
14 return number,
15 member function ODCITableClose( self in NColPipe )
16 return number,
17 static function show( p_parm in varchar2, p_rows_req in number := 1 )
18 return anydataset pipelined using NColPipe
19 );
20 /
Type created.
SQL>
SQL> create or replace type body NColPipe as
2 static function ODCITableDescribe( rtype out anytype, p_parm in varchar2, p_rows_req in number := 1 )
3 return number
4 is
5 atyp anytype;
6 begin
7 anytype.begincreate( dbms_types.typecode_object, atyp );
8 atyp.addattr( to_char(to_date(p_parm,'MONYYYY'),'MONYY')
9 , dbms_types.typecode_varchar2
10 , null
11 , null
12 , 10
13 , null
14 , null
15 );
16 atyp.endcreate;
17 anytype.begincreate( dbms_types.typecode_table, rtype );
18 rtype.SetInfo( null, null, null, null, null, atyp, dbms_types.typecode_object, 0 );
19 rtype.endcreate();
20 return odciconst.success;
21 exception
22 when others then
23 return odciconst.error;
24 end;
25 --
26 static function ODCITablePrepare( sctx out NColPipe, ti in sys.ODCITabFuncInfo, p_parm in varchar2, p_rows_req in number := 1 )
27 return number
28 is
29 elem_typ sys.anytype;
30 prec pls_integer;
31 scale pls_integer;
32 len pls_integer;
33 csid pls_integer;
34 csfrm pls_integer;
35 tc pls_integer;
36 aname varchar2(30);
37 begin
38 tc := ti.RetType.GetAttrElemInfo( 1, prec, scale, len, csid, csfrm, elem_typ, aname );
39 sctx := NColPipe( p_parm, p_rows_req, elem_typ, 0 );
40 return odciconst.success;
41 end;
42 --
43 static function ODCITableStart( sctx in out NColPipe, p_parm in varchar2, p_rows_req in number := 1 )
44 return number
45 is
46 begin
47 return odciconst.success;
48 end;
49 --
50 member function ODCITableFetch( self in out NColPipe, nrows in number, outset out anydataset )
51 return number
52 is
53 begin
54 anydataset.begincreate( dbms_types.typecode_object, self.ret_type, outset );
55 for i in self.rows_returned + 1 .. self.rows_requested
56 loop
57 outset.addinstance;
58 outset.piecewise();
59 outset.setvarchar2( self.l_parm );
60 self.rows_returned := self.rows_returned + 1;
61 end loop;
62 outset.endcreate;
63 return odciconst.success;
64 end;
65 --
66 member function ODCITableClose( self in NColPipe )
67 return number
68 is
69 begin
70 return odciconst.success;
71 end;
72 end;
73 /
Type body created.
SQL> select * from table( NColPipe.show( 'JAN2008' ) );
JAN08
JAN2008
SQL> select * from table( NColPipe.show( 'FEB2009' ) );
FEB09
FEB2009
SQL>
Similar Messages
-
Split Column group heading to next row based on row group
Hii all
I am developing a matrix by grouped departments on row and schemes are in columns
but scheme group goes to end .. its not meeting my requirement
as per above image my report should looks like.
but report looks like below ..
Dilip Patil..Hi Dilip Patil,
According to your description, you want to create a matrix which display schemes of departments. Now you can't make the matrix looks like the first image above. Right?
In this scenario, you should have a data field in your dataset which is for the schemes to group on. Otherwise the matrix can't dynamically generate those schemes into on row. If you don't have a column in your database to group the schemes,we suggest you
use table the render your data and put the schemes into detail rows. We have tested in our local environment. Here are steps and screeenshots for your reference:
1. We add a column(named Scheme) in database to define scheme group for schemes.
2. Put Dept into row group and set it group on Govt. The design looks like below:
3. Save and preview. It looks like below:
Reference:
Exporting Reports (Report Builder and SSRS)
Matrices (Report Builder and SSRS)
If you have any question, please feel free to ask.
Simon Hou -
Interactive report – column heading in multiple rows
I am using interactive report. My question to the expert/guru’s is: - How do I change column heading into multiple row with text wrap.
For example:- My column heading is
Is Employee Trained ? -------> (single row display)
I want to make it display like
Is Employee
Trained ? ------> (Multi row display)
SagarHi,
What you could do is, disable the download csv function from IR (Interactive Report Attributes--> Search Bar-- Uncheck Download) and in the region header create a link and redirect it to another page which will have the csv report output.
e.g. <a href="#" onclick="javascript:redirect('f?p=&APP_ID.:3:&SESSION.::&DEBUG.:3::');"" >Download Report </a>
Here I am redirecting the link to Page 3. On Page 3 create a sql report with the same query and make report template to csv. Thanks,
Manish -
How to display the column header in two rows?
Hi Experts,
I am using ALV_LIST_DISPLAY i neeed to display the column header in two rows.. How can i do that?
Ex: purchase order i need to display "purchase" in one row and "order" in second row.
Thanks in advance,
Sarath.jREPORT zpwtest .
TYPE-POOLS slis .
DATA : layout TYPE slis_layout_alv .
CONSTANTS : c_len TYPE i VALUE 20 .
TYPES : BEGIN OF ty_t100 ,
sprsl TYPE t100-sprsl ,
arbgb TYPE t100-arbgb ,
msgnr TYPE t100-msgnr ,
text TYPE t100-text ,
fline TYPE t100-text ,
END OF ty_t100 .
TYPES : BEGIN OF ty_wrd ,
text TYPE char20 ,
END OF ty_wrd .
DATA : it_t100 TYPE TABLE OF ty_t100 ,
it_sentence TYPE TABLE OF ty_wrd ,
wa_t100 TYPE ty_t100 ,
wa_word TYPE ty_wrd ,
v_repid TYPE syst-repid ,
v_tabix TYPE syst-tabix .
DATA : it_fld TYPE slis_t_fieldcat_alv ,
it_evt TYPE slis_t_event ,
wa_fld TYPE slis_fieldcat_alv ,
wa_evt TYPE slis_alv_event .
INITIALIZATION .
v_repid = sy-repid .
START-OF-SELECTION .
* Get data
SELECT *
INTO TABLE it_t100
FROM t100
WHERE sprsl = 'EN'
AND arbgb = '00' .
LOOP AT it_t100 INTO wa_t100 .
v_tabix = sy-tabix .
CLEAR : it_sentence .
CALL FUNCTION 'RKD_WORD_WRAP'
EXPORTING
textline = wa_t100-text
outputlen = c_len
TABLES
out_lines = it_sentence.
IF NOT it_sentence IS INITIAL .
READ TABLE it_sentence INTO wa_word INDEX 1 .
wa_t100-fline = wa_word-text .
MODIFY it_t100 FROM wa_t100 INDEX v_tabix .
ENDIF.
ENDLOOP.
* Prepare fieldcatelog
CLEAR wa_fld .
wa_fld-fieldname = 'SPRSL' .
wa_fld-ref_tabname = 'T100' .
wa_fld-ref_fieldname = 'SPRSL' .
APPEND wa_fld TO it_fld .
CLEAR wa_fld .
wa_fld-fieldname = 'ARBGB' .
wa_fld-ref_tabname = 'T100' .
wa_fld-ref_fieldname = 'ARBGB' .
APPEND wa_fld TO it_fld .
CLEAR wa_fld .
wa_fld-fieldname = 'MSGNR' .
wa_fld-ref_tabname = 'T100' .
wa_fld-ref_fieldname = 'MSGNR' .
APPEND wa_fld TO it_fld .
CLEAR wa_fld .
wa_fld-fieldname = 'FLINE' .
wa_fld-inttype = 'CHAR' .
wa_fld-outputlen = 20 .
wa_fld-intlen = 20.
wa_fld-seltext_l = 'Text' .
wa_fld-ddictxt = 'L' .
APPEND wa_fld TO it_fld .
* Get event.. we will handle BOFORE and AFTER line output
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
IMPORTING
et_events = it_evt.
READ TABLE it_evt INTO wa_evt
WITH KEY name = slis_ev_after_line_output .
wa_evt-form = slis_ev_after_line_output .
MODIFY it_evt FROM wa_evt INDEX sy-tabix .
READ TABLE it_evt INTO wa_evt
WITH KEY name = slis_ev_top_of_page .
wa_evt-form = slis_ev_top_of_page .
MODIFY it_evt FROM wa_evt INDEX sy-tabix .
layout-no_colhead = 'X' .
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = v_repid
it_fieldcat = it_fld
is_layout = layout
it_events = it_evt
TABLES
t_outtab = it_t100.
* FORM top_of_page *
FORM top_of_page .
uline .
WRITE: / sy-vline ,
10 sy-vline ,
11 'line1' ,
31 sy-vline ,
37 sy-vline ,
58 sy-vline .
WRITE: / sy-vline ,
10 sy-vline ,
11 'line2' ,
31 sy-vline ,
37 sy-vline ,
58 sy-vline .
WRITE: / sy-vline ,
10 sy-vline ,
11 'line3' ,
31 sy-vline ,
37 sy-vline ,
58 sy-vline .
ENDFORM.
* FORM AFTER_LINE_OUTPUT *
FORM after_line_output USING rs_lineinfo TYPE slis_lineinfo .
CLEAR : it_sentence ,
wa_t100 .
READ TABLE it_t100 INTO wa_t100 INDEX rs_lineinfo-tabindex .
CHECK sy-subrc = 0 .
CALL FUNCTION 'RKD_WORD_WRAP'
EXPORTING
textline = wa_t100-text
outputlen = c_len
TABLES
out_lines = it_sentence.
DESCRIBE TABLE it_sentence LINES v_tabix .
CHECK v_tabix > 1 .
LOOP AT it_sentence INTO wa_word FROM 2 .
WRITE: / sy-vline ,
10 sy-vline ,
31 sy-vline ,
37 sy-vline ,
38 wa_word-text ,
58 sy-vline .
ENDLOOP.
ENDFORM . -
Repeat header's column in a table with row height that greater then 200px
== Issue
==
I have another kind of problem with Firefox
== Description
==
I develop a website and encounter some problem about web page printing. I try to repeat header's column in a table with row's height that greater than or equal to 198px, but it doesn't work. Another size that lower than 198px works fine. If somebody has seen this issue before and know a solution, please help me. Thanks in advance.
== This happened
==
Every time Firefox opened
== Firefox version
==
3.6.6
== Operating system
==
Windows XP
== User Agent
==
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6
== Plugins installed
==
*-6.0.12.1739
*RealPlayer(tm) LiveConnect-Enabled Plug-In
*PDF-XChange Viewer Netscape Gecko Plugin
*Default Plug-in
*Shockwave Flash 8.0 r22
*Adobe Shockwave for Director Netscape plug-in, version 11.0
*3.0.40624.0
*Office Live Update v1.3
*Windows Presentation Foundation (WPF) plug-in for Mozilla browsers
*Next Generation Java Plug-in 1.6.0_18 for Mozilla browsers
*Npdsplay dll
*DRM Store Netscape Plugin
*DRM Netscape Network ObjectTry posting at the Web Development / Standards Evangelism forum at MozillaZine. The helpers over there are more knowledgeable about web page development issues with Firefox.
[http://forums.mozillazine.org/viewforum.php?f=25]
You'll need to register and login to be able to post in that forum. -
Select row and column from header in jtable
hello i have a problem to select row and column from header in jtable..
can somebody give me an idea on how to write the program on it.Hi Vicky Liu,
Thank you for your reply. I'm sorry for not clear question.
Answer for your question:
1. First value of Open is item fiels in Dataset2 and this value only for first month (january). But for other month Open value get from Close in previous month.
* I have 2 Dataset , Dataset1 is all data for show in my report. Dataset2 is only first Open for first month
2. the picture for detail of my report
Detail for Red number:
1. tb_Open -> tb_Close in previous month but first month from item field in Dataset2
espression =FormatNumber(Code.GetOpening(Fields!month.Value,First(Fields!open.Value, "Dataset2")))
2. tb_TOTAL1 group on item_part = 1
expression =FormatNumber(Sum(CDbl(Fields!budget.Value)))
3. tb_TOTAL2 group on item_part = 3 or item_part = 4
expression =FormatNumber(Sum(CDbl(Fields!budget.Value)) + ReportItems!tb_TOTAL1.Value )
4. tb_TOTAL3 group on item_part = 2
expression =FormatNumber(Sum(CDbl(Fields!budget.Value)) - ReportItems!tb_TOTAL2 .Value)
5. tb_Close -> calculate from tb_TOTAL3 - tb_Open
expression =FormatNumber(Code.GetClosing(ReportItems!tb_TOTAL3.Value,ReportItems!tb_Open.Value))
I want to calculate the value of tb_Open and tb_Close. I try to use custom code for calculate them. tb_close is correct but tb_Open is not correct that show value = 0 .
My custom code:
Dim Shared prev_close As Double
Dim Shared now_close As Double
Dim Shared now_open As Double
Public Function GetClosing(TOTAL3 as Double,NowOpening as Double)
now_close = TOTAL3 + NowOpening
prev_close = now_close
Return now_close
End Function
Public Function GetOpening(Month as String,NowOpen as Double)
If Month = "1" Then
now_open = NowOpen
Else
now_open = prev_close
End If
Return now_open
End Function
Thanks alot for your help!
Regards
Panda A -
How to resize the column header according to row data
Hi,
How can i resize the column header according to row date .. means if data is small header should be small and vice versa ,...
Any help is appreciated .. Snippet will be more helpful .
Thanks,
ShekharOxley (binkley) blogged about this: http://binkley.blogspot.com/2006/01/getting-jtable-columns-widths-to-fit.html
Christian Ullenboom | tutego -
Excel o/p in Reports 9i-additional report header for every row
Dear All,
Is there any way to generate an Excel file output from OracleReports9i.Actually I have tried the simple report.
I am able to create a delimited output.But the prob is it contains an additional report header for every row of the report and this is very strange.Its coming like that
Empno Ename Job 7566 JONES MANAGER
Empno Ename Job 7902 FORD ANALYST
I need the Xls o/p like that
Empno Ename Job
7566 JONES MANAGER
7902 FORD ANALYST
8877 JAMES SALES
my Environment oracle9i developersuite /forms9i/reports9i
I have given DESFORMAT = DELIMITED
MODE = CHARACTER
I am able to generate the reports in html/HTMLCSSIE/HTMLCSS/PDF/RTF
Only delimited is giving problem
What should i do to resolve this issue. Please help me it is very very urgent for me.
Thanks in advance
Pavendhan.NI had the same problem and this is what I did, works great. You have the total control.
function BeforeReport return boolean is
fp text_io.file_type;
begin
-- creating a file name
:CP_filename := 'C:\Gap'||to_char(sysdate,'MMDDYYHHMISS')||'.csv';
-- Opening the file in write mode
fp := text_io.fopen(:CP_filename,'w');
-- writing the column headings into the file
text_io.put_line(fp,'"Platform","Sys#","GapType",');
text_io.fclose(fp);
return (TRUE);
end;
and then where ever it is suitable, depending on the requirement, write into file by opening it in the append mode.
function R_G_systemplatformFormatTrigge return boolean is
fp text_io.file_type;
begin
-- srw.message(99,:dname);
fp := text_io.fopen(:CP_filename,'a');
text_io.put(fp,'"' || :systemplatform || '",');
text_io.put(fp,'"' || to_char(:sysno) || '",');
text_io.put_line(fp,'"' || :CF_gaptype || '",');
text_io.fclose(fp);
return (TRUE);
end;
This works great. Hope this helps. -
Coulmn heading in several rows using 'Delimited' option
Hello folks -- I am using Oracle Reports 6i and when generating a File to 'Delimited' to produce a Text file, I am getting the Column headings repeated in every row. So, all the columns are being produced in every row and every column and then data is being produced.
My ultimate goal is to open the Text file in Excel and save it as an Excel file.
I noticed that Oracle Reports 9i has the option of 'Delimited Data' which works fine. Is there a work around in Reports 6i? Maybe by using Format Triggers?
Any help is greatly appreciated.
ThanksI found the problem.
Since the headings are also in a Repeating Group, the Heading were appearing on every row along with the data. Here is what you should do as its working for me:
1. Remove the Headings from the Layout completely.
2. Add the Headings in the SQL Statements and do a UNION with the Main Query. Add a dummy column at the end for the Ordering BY so the row with the headings show up on the top row followed by the data.
3. Don't include the order_id column in the Layout.
Hint: Do a TO_CHAR for every column in the Main Query as the Headings will be Character field
Thanks!
Edited by: Roxyrollers on Sep 24, 2012 4:00 PM -
JTable header : text = two-rows, onClick action = sorting
Hi guys.
I want to create a JTable where the user can have the data sorted by clicking upon a column's header. The code below shows the table I describe (you can click upon a column and sorting is performed).
import javax.swing.JFrame;
import java.awt.HeadlessException;
import java.awt.*;
import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.Vector;
import javax.swing.table.DefaultTableModel;
//--------- TableSorter ----------
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.List;
import javax.swing.*;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.*;
//---------- Table Height - Column Width
import javax.swing.table.TableColumn;
import java.awt.FontMetrics;
import javax.swing.JTable;
import java.awt.Dimension;
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2006</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
public class Test extends JFrame {
JPanel jPanel1 = new JPanel();
JPanel jPanel2 = new JPanel();
JButton jButton1 = new JButton();
FlowLayout flowLayout1 = new FlowLayout();
BorderLayout borderLayout1 = new BorderLayout();
BorderLayout borderLayout2 = new BorderLayout();
//------------- MY VARIABLES -------------
String[] columnNames_objectArr = new String[] {
"Col1",
"Column 2",
"Column 3",
"C4",
"Col5",
"Col 6",
Vector columnNames_vector = new Vector();
private Vector data_vector = new Vector();
private Object[][] data_objectArr;
public TableHeight_ColumnWidth tcw;
private int totalTableWidth = 0, totalTableHeight = 0;
private JComboBox jcmbxData = new JComboBox(
new String[] {"Not Configured", "Switch", "Modem"});
private int maxVisibleRows = 51;
TableSorter model;
private JTable table;
JScrollPane jScrollPane1;
public Test(String[] args) throws HeadlessException {
try {
jbInit();
setupGUI();
launchGUI();
catch(Exception e) {
e.printStackTrace();
private void jbtnClose_actionPerformed(ActionEvent e) {
dispose();
private void launchGUI() {
pack();
setVisible(true);
setResizable(false);
private void setupGUI() {
columnNames_vector.addElement("Col1");
columnNames_vector.addElement("Column 2");
columnNames_vector.addElement("Column 3");
columnNames_vector.addElement("C4");
columnNames_vector.addElement("Col5");
columnNames_vector.addElement("Col 6");
Vector row_data1 = new Vector();
Vector row_data2 = new Vector();
Vector row_data3 = new Vector();
Vector row_data4 = new Vector();
Vector row_data5 = new Vector();
Vector row_data6 = new Vector();
row_data1.add("Mary");
row_data1.add("Campioneato");
row_data1.add("Snowboarding");
row_data1.add(new Integer(578987899));
row_data1.add(new Boolean(false));
row_data1.add("Not Configured");
row_data2.add("Alison");
row_data2.add("Huml");
row_data2.add("Rowing");
row_data2.add(new Integer(3));
row_data2.add(new Boolean(true));
row_data2.add("Switch");
row_data3.add("Ka");
row_data3.add("Walrath");
row_data3.add("Knitting");
row_data3.add(new Integer(2));
row_data3.add(new Boolean(false));
row_data3.add("Modem");
row_data4.add("Sharon");
row_data4.add("Zakhouras");
row_data4.add("Speed reading");
row_data4.add(new Integer(20));
row_data4.add(new Boolean(true));
row_data4.add("Switch");
row_data5.add("Philip");
row_data5.add("Milner");
row_data5.add("Pool");
row_data5.add(new Integer(10));
row_data5.add(new Boolean(false));
row_data5.add("Not Configured");
data_vector.add(row_data1);
data_vector.add(row_data2);
data_vector.add(row_data3);
data_vector.add(row_data4);
data_vector.add(row_data5);
model = new TableSorter(new SortTableModel(data_vector, columnNames_vector));
table = new JTable(model);
tcw = new TableHeight_ColumnWidth(model, table);
jScrollPane1 = new JScrollPane(table);
model.setTableHeader(table.getTableHeader());
jPanel1.add(jScrollPane1, BorderLayout.CENTER);
//Add a JComboBox as a cellEditor...
DefaultCellEditor dce = new DefaultCellEditor(jcmbxData);
table.getColumnModel().getColumn(5).setCellEditor(dce);
//..... add the IPJPanel as cellEditor.....
tcw.fixTableLook(maxVisibleRows);
private void jbInit() throws Exception {
this.getContentPane().setLayout(borderLayout2);
jPanel1.setLayout(borderLayout1);
jPanel2.setLayout(flowLayout1);
jButton1.setText("Close");
jPanel1.setBorder(BorderFactory.createRaisedBevelBorder());
this.getContentPane().add(jPanel1, BorderLayout.CENTER);
this.getContentPane().add(jPanel2, BorderLayout.SOUTH);
jPanel2.add(jButton1, null);
jButton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jbtnClose_actionPerformed(e);
public static void main( String[] args ) {
new Test(args);
public boolean getScrollableTracksViewportHeight() {
Component parent = getParent();
if (parent instanceof JViewport) {
return parent.getHeight() > getPreferredSize().height;
return false;
//------------------ MY TABLE MODEL ------------------
public class SortTableModel extends DefaultTableModel {
private boolean DEBUG = false;
public SortTableModel(Object[][] data, String[] columnNames) {
super(data, columnNames);
public SortTableModel(Vector data, Vector columnNames) {
super(data, columnNames);
//------------------ TABLE SORTER -----------------------
public class TableSorter extends AbstractTableModel {
protected TableModel tableModel;
public static final int DESCENDING = -1;
public static final int NOT_SORTED = 0;
public static final int ASCENDING = 1;
private Directive EMPTY_DIRECTIVE = new Directive(-1, NOT_SORTED);
public final Comparator COMPARABLE_COMAPRATOR = new Comparator() {
public int compare(Object o1, Object o2) {
return ((Comparable) o1).compareTo(o2);
public final Comparator LEXICAL_COMPARATOR = new Comparator() {
public int compare(Object o1, Object o2) {
return o1.toString().compareTo(o2.toString());
private Row[] viewToModel;
private int[] modelToView;
private JTableHeader tableHeader;
private MouseListener mouseListener;
private TableModelListener tableModelListener;
private Map columnComparators = new HashMap();
private List sortingColumns = new ArrayList();
public TableSorter() {
this.mouseListener = new MouseHandler();
this.tableModelListener = new TableModelHandler();
public TableSorter(TableModel tableModel) {
this();
setTableModel(tableModel);
public TableSorter(TableModel tableModel, JTableHeader tableHeader) {
this();
setTableHeader(tableHeader);
setTableModel(tableModel);
private void clearSortingState() {
viewToModel = null;
modelToView = null;
public TableModel getTableModel() {
return tableModel;
public void setTableModel(TableModel tableModel) {
if (this.tableModel != null) {
this.tableModel.removeTableModelListener(tableModelListener);
this.tableModel = tableModel;
if (this.tableModel != null) {
this.tableModel.addTableModelListener(tableModelListener);
clearSortingState();
fireTableStructureChanged();
public JTableHeader getTableHeader() {
return tableHeader;
public void setTableHeader(JTableHeader tableHeader) {
if (this.tableHeader != null) {
this.tableHeader.removeMouseListener(mouseListener);
TableCellRenderer defaultRenderer = this.tableHeader.getDefaultRenderer();
if (defaultRenderer instanceof SortableHeaderRenderer) {
this.tableHeader.setDefaultRenderer(((SortableHeaderRenderer) defaultRenderer).tableCellRenderer);
this.tableHeader = tableHeader;
if (this.tableHeader != null) {
this.tableHeader.addMouseListener(mouseListener);
this.tableHeader.setDefaultRenderer(
new SortableHeaderRenderer(this.tableHeader.getDefaultRenderer()));
public boolean isSorting() {
return sortingColumns.size() != 0;
private Directive getDirective(int column) {
for (int i = 0; i < sortingColumns.size(); i++) {
Directive directive = (Directive)sortingColumns.get(i);
if (directive.column == column) {
return directive;
return EMPTY_DIRECTIVE;
public int getSortingStatus(int column) {
return getDirective(column).direction;
private void sortingStatusChanged() {
clearSortingState();
fireTableDataChanged();
if (tableHeader != null) {
tableHeader.repaint();
public void setSortingStatus(int column, int status) {
Directive directive = getDirective(column);
if (directive != EMPTY_DIRECTIVE) {
sortingColumns.remove(directive);
if (status != NOT_SORTED) {
sortingColumns.add(new Directive(column, status));
sortingStatusChanged();
protected Icon getHeaderRendererIcon(int column, int size) {
Directive directive = getDirective(column);
if (directive == EMPTY_DIRECTIVE) {
return null;
return new Arrow(directive.direction == DESCENDING, size, sortingColumns.indexOf(directive));
private void cancelSorting() {
sortingColumns.clear();
sortingStatusChanged();
public void setColumnComparator(Class type, Comparator comparator) {
if (comparator == null) {
columnComparators.remove(type);
} else {
columnComparators.put(type, comparator);
protected Comparator getComparator(int column) {
Class columnType = tableModel.getColumnClass(column);
Comparator comparator = (Comparator) columnComparators.get(columnType);
if (comparator != null) {
return comparator;
if (Comparable.class.isAssignableFrom(columnType)) {
return COMPARABLE_COMAPRATOR;
return LEXICAL_COMPARATOR;
private Row[] getViewToModel() {
if (viewToModel == null) {
int tableModelRowCount = tableModel.getRowCount();
viewToModel = new Row[tableModelRowCount];
for (int row = 0; row < tableModelRowCount; row++) {
viewToModel[row] = new Row(row);
if (isSorting()) {
Arrays.sort(viewToModel);
return viewToModel;
public int modelIndex(int viewIndex) {
return getViewToModel()[viewIndex].modelIndex;
private int[] getModelToView() {
if (modelToView == null) {
int n = getViewToModel().length;
modelToView = new int[n];
for (int i = 0; i < n; i++) {
modelToView[modelIndex(i)] = i;
return modelToView;
// TableModel interface methods
public int getRowCount() {
return (tableModel == null) ? 0 : tableModel.getRowCount();
public int getColumnCount() {
return (tableModel == null) ? 0 : tableModel.getColumnCount();
public String getColumnName(int column) {
return tableModel.getColumnName(column);
public Class getColumnClass(int column) {
return tableModel.getColumnClass(column);
public boolean isCellEditable(int row, int column) {
return tableModel.isCellEditable(modelIndex(row), column);
public Object getValueAt(int row, int column) {
return tableModel.getValueAt(modelIndex(row), column);
public void setValueAt(Object aValue, int row, int column) {
tableModel.setValueAt(aValue, modelIndex(row), column);
// Helper classes
private class Row implements Comparable {
private int modelIndex;
public Row(int index) {
this.modelIndex = index;
public int compareTo(Object o) {
int row1 = modelIndex;
int row2 = ((Row) o).modelIndex;
for (Iterator it = sortingColumns.iterator(); it.hasNext();) {
Directive directive = (Directive) it.next();
int column = directive.column;
Object o1 = tableModel.getValueAt(row1, column);
Object o2 = tableModel.getValueAt(row2, column);
int comparison = 0;
// Define null less than everything, except null.
if (o1 == null && o2 == null) {
comparison = 0;
} else if (o1 == null) {
comparison = -1;
} else if (o2 == null) {
comparison = 1;
} else {
comparison = getComparator(column).compare(o1, o2);
if (comparison != 0) {
return directive.direction == DESCENDING ? -comparison : comparison;
return 0;
private class TableModelHandler implements TableModelListener {
public void tableChanged(TableModelEvent e) {
// If we're not sorting by anything, just pass the event along.
if (!isSorting()) {
clearSortingState();
fireTableChanged(e);
return;
// If the table structure has changed, cancel the sorting; the
// sorting columns may have been either moved or deleted from
// the model.
if (e.getFirstRow() == TableModelEvent.HEADER_ROW) {
cancelSorting();
fireTableChanged(e);
return;
// We can map a cell event through to the view without widening
// when the following conditions apply:
// a) all the changes are on one row (e.getFirstRow() == e.getLastRow()) and,
// b) all the changes are in one column (column != TableModelEvent.ALL_COLUMNS) and,
// c) we are not sorting on that column (getSortingStatus(column) == NOT_SORTED) and,
// d) a reverse lookup will not trigger a sort (modelToView != null)
// Note: INSERT and DELETE events fail this test as they have column == ALL_COLUMNS.
// The last check, for (modelToView != null) is to see if modelToView
// is already allocated. If we don't do this check; sorting can become
// a performance bottleneck for applications where cells
// change rapidly in different parts of the table. If cells
// change alternately in the sorting column and then outside of
// it this class can end up re-sorting on alternate cell updates -
// which can be a performance problem for large tables. The last
// clause avoids this problem.
int column = e.getColumn();
if (e.getFirstRow() == e.getLastRow()
&& column != TableModelEvent.ALL_COLUMNS
&& getSortingStatus(column) == NOT_SORTED
&& modelToView != null) {
int viewIndex = getModelToView()[e.getFirstRow()];
fireTableChanged(new TableModelEvent(TableSorter.this,
viewIndex, viewIndex,
column, e.getType()));
return;
// Something has happened to the data that may have invalidated the row order.
clearSortingState();
fireTableDataChanged();
return;
private class MouseHandler extends MouseAdapter {
public void mouseClicked(MouseEvent e) {
JTableHeader h = (JTableHeader) e.getSource();
TableColumnModel columnModel = h.getColumnModel();
int viewColumn = columnModel.getColumnIndexAtX(e.getX());
int column = columnModel.getColumn(viewColumn).getModelIndex();
if (column != -1) {
int status = getSortingStatus(column);
if (!e.isControlDown()) {
cancelSorting();
// Cycle the sorting states through {NOT_SORTED, ASCENDING, DESCENDING} or
// {NOT_SORTED, DESCENDING, ASCENDING} depending on whether shift is pressed.
status = status + (e.isShiftDown() ? -1 : 1);
status = (status + 4) % 3 - 1; // signed mod, returning {-1, 0, 1}
setSortingStatus(column, status);
private class Arrow implements Icon {
private boolean descending;
private int size;
private int priority;
public Arrow(boolean descending, int size, int priority) {
this.descending = descending;
this.size = size;
this.priority = priority;
public void paintIcon(Component c, Graphics g, int x, int y) {
Color color = c == null ? Color.GRAY : c.getBackground();
// In a compound sort, make each succesive triangle 20%
// smaller than the previous one.
int dx = (int)(size/2*Math.pow(0.8, priority));
int dy = descending ? dx : -dx;
// Align icon (roughly) with font baseline.
y = y + 5*size/6 + (descending ? -dy : 0);
int shift = descending ? 1 : -1;
g.translate(x, y);
// Right diagonal.
g.setColor(color.darker());
g.drawLine(dx / 2, dy, 0, 0);
g.drawLine(dx / 2, dy + shift, 0, shift);
// Left diagonal.
g.setColor(color.brighter());
g.drawLine(dx / 2, dy, dx, 0);
g.drawLine(dx / 2, dy + shift, dx, shift);
// Horizontal line.
if (descending) {
g.setColor(color.darker().darker());
} else {
g.setColor(color.brighter().brighter());
g.drawLine(dx, 0, 0, 0);
g.setColor(color);
g.translate(-x, -y);
public int getIconWidth() {
return size;
public int getIconHeight() {
return size;
private class SortableHeaderRenderer implements TableCellRenderer {
private TableCellRenderer tableCellRenderer;
public SortableHeaderRenderer(TableCellRenderer tableCellRenderer) {
this.tableCellRenderer = tableCellRenderer;
public Component getTableCellRendererComponent(JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column) {
Component c = tableCellRenderer.getTableCellRendererComponent(table,
value, isSelected, hasFocus, row, column);
if (c instanceof JLabel) {
JLabel l = (JLabel) c;
l.setHorizontalTextPosition(JLabel.LEFT);
int modelColumn = table.convertColumnIndexToModel(column);
l.setIcon(getHeaderRendererIcon(modelColumn, l.getFont().getSize()));
return c;
private class Directive {
private int column;
private int direction;
public Directive(int column, int direction) {
this.column = column;
this.direction = direction;
//-------------- FIX TABLE'S HEIGHT & COLUMN WIDTH ---------
public class TableHeight_ColumnWidth {
private TableSorter sorter;
private FontMetrics fm;
private JTable table;
private int numOfRows = 0, totalTableHeight = 0, totalTableWidth = 0;
* Constructor --- it needs the model as well the JTable as parameters
* @param sorter - the model
* @param table - the JTable created based on the model
public TableHeight_ColumnWidth(TableSorter sorter, JTable table) {
this.sorter = sorter;
this.table = table;
this.fm = table.getFontMetrics(table.getFont());
this.numOfRows = table.getRowCount();
* Calculates the width of each column according to the String it contains
* @param col = the desired column
* @param fm = the FontMetrics of this column
* @return - the width of the single column
public int determineColumnWidth(TableColumn col, FontMetrics fm) {
int headerWidth = fm.stringWidth((String)col.getHeaderValue());
int columnNumber = col.getModelIndex();
int max = headerWidth;
int columnWidth = 0;
String cell = "";
Integer cell_int = new Integer(0);
Short cell_short = new Short((short)0);
for (int i = 0; i != sorter.getRowCount(); i++) {
Object obj = (Object) sorter.getValueAt(i, columnNumber);
if (obj instanceof String) {
cell = (String)sorter.getValueAt(i, columnNumber);
else if (obj instanceof Integer) {
cell_int = (Integer)sorter.getValueAt(i, columnNumber);
cell = String.valueOf(cell_int.intValue());
else if (obj instanceof Short) {
cell_short = (Short) sorter.getValueAt(i, columnNumber);
cell = String.valueOf(cell_short.shortValue());
columnWidth = fm.stringWidth(cell) + 5;
if (columnWidth > max) {
max = columnWidth;
return max + 5;
* Calculates the total width of the table according to the width of each
* column.
* @return - totalTableWidth
private int fixColumnWidth () {
int totalTableWidth = 0;
TableColumn c = null;
int cw = 0;
for (int i = 0; i < table.getColumnCount(); i++) {
c = table.getColumn(table.getColumnName(i));
cw = this.determineColumnWidth(c, fm);
c.setPreferredWidth(cw);
totalTableWidth = totalTableWidth + cw;
c.setMinWidth(cw);
return totalTableWidth;
* Calculates the height of the table according to the height of each row
* multiplied by 51 (by default) or by the totalRowsCount.
* @return - totalTableHeight
private int fixTableHeight(int maxVisibleRows) {
int rowHeight = table.getRowHeight();
//Show maxVisibleRows rows maximum
if (numOfRows > maxVisibleRows) {
totalTableHeight = rowHeight * maxVisibleRows;
else {
totalTableHeight = rowHeight * numOfRows;
return totalTableHeight;
* Sets up the table according to the totalTableWidth and totalTableHeight
public void fixTableLook(int maxVisibleRows) {
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
totalTableWidth = this.fixColumnWidth();
totalTableHeight = this.fixTableHeight(maxVisibleRows);
table.setPreferredScrollableViewportSize(new Dimension(totalTableWidth, totalTableHeight));
}Also, I want some column headers to display their text in two-rows. But by using the HTML technique look at the result in comparison with the previous table I had!
import javax.swing.JFrame;
import java.awt.HeadlessException;
import java.awt.*;
import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.Vector;
import javax.swing.table.DefaultTableModel;
//--------- TableSorter ----------
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.List;
import javax.swing.*;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.*;
//---------- Table Height - Column Width
import javax.swing.table.TableColumn;
import java.awt.FontMetrics;
import javax.swing.JTable;
import java.awt.Dimension;
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2006</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
public class Test extends JFrame {
JPanel jPanel1 = new JPanel();
JPanel jPanel2 = new JPanel();
JButton jButton1 = new JButton();
FlowLayout flowLayout1 = new FlowLayout();
BorderLayout borderLayout1 = new BorderLayout();
BorderLayout borderLayout2 = new BorderLayout();
//------------- MY VARIABLES -------------
String[] columnNames_objectArr = new String[] {
"Col1",
"Column 2",
"Column 3",
"C4",
"Col5",
"Col 6",
Vector columnNames_vector = new Vector();
private Vector data_vector = new Vector();
private Object[][] data_objectArr;
public TableHeight_ColumnWidth tcw;
private int totalTableWidth = 0, totalTableHeight = 0;
private JComboBox jcmbxData = new JComboBox(
new String[] {"Not Configured", "Switch", "Modem"});
private int maxVisibleRows = 51;
TableSorter model;
private JTable table;
JScrollPane jScrollPane1;
public Test(String[] args) throws HeadlessException {
try {
jbInit();
setupGUI();
launchGUI();
catch(Exception e) {
e.printStackTrace();
private void jbtnClose_actionPerformed(ActionEvent e) {
dispose();
private void launchGUI() {
pack();
setVisible(true);
setResizable(false);
private void setupGUI() {
columnNames_vector.addElement("<html>Col1</html>");
columnNames_vector.addElement("<html>Column 2</html>");
columnNames_vector.addElement("<html>Column 3<br>Second Row</html>");
columnNames_vector.addElement("<html>C4</html>");
columnNames_vector.addElement("<html>Col5</html>");
columnNames_vector.addElement("<html>Col 6</html>");
Vector row_data1 = new Vector();
Vector row_data2 = new Vector();
Vector row_data3 = new Vector();
Vector row_data4 = new Vector();
Vector row_data5 = new Vector();
Vector row_data6 = new Vector();
row_data1.add("Mary");
row_data1.add("Campioneato");
row_data1.add("Snowboarding");
row_data1.add(new Integer(578987899));
row_data1.add(new Boolean(false));
row_data1.add("Not Configured");
row_data2.add("Alison");
row_data2.add("Huml");
row_data2.add("Rowing");
row_data2.add(new Integer(3));
row_data2.add(new Boolean(true));
row_data2.add("Switch");
row_data3.add("Ka");
row_data3.add("Walrath");
row_data3.add("Knitting");
row_data3.add(new Integer(2));
row_data3.add(new Boolean(false));
row_data3.add("Modem");
row_data4.add("Sharon");
row_data4.add("Zakhouras");
row_data4.add("Speed reading");
row_data4.add(new Integer(20));
row_data4.add(new Boolean(true));
row_data4.add("Switch");
row_data5.add("Philip");
row_data5.add("Milner");
row_data5.add("Pool");
row_data5.add(new Integer(10));
row_data5.add(new Boolean(false));
row_data5.add("Not Configured");
data_vector.add(row_data1);
data_vector.add(row_data2);
data_vector.add(row_data3);
data_vector.add(row_data4);
data_vector.add(row_data5);
model = new TableSorter(new SortTableModel(data_vector, columnNames_vector));
table = new JTable(model);
tcw = new TableHeight_ColumnWidth(model, table);
jScrollPane1 = new JScrollPane(table);
model.setTableHeader(table.getTableHeader());
jPanel1.add(jScrollPane1, BorderLayout.CENTER);
//Add a JComboBox as a cellEditor...
DefaultCellEditor dce = new DefaultCellEditor(jcmbxData);
table.getColumnModel().getColumn(5).setCellEditor(dce);
//..... add the IPJPanel as cellEditor.....
tcw.fixTableLook(maxVisibleRows);
private void jbInit() throws Exception {
this.getContentPane().setLayout(borderLayout2);
jPanel1.setLayout(borderLayout1);
jPanel2.setLayout(flowLayout1);
jButton1.setText("Close");
jPanel1.setBorder(BorderFactory.createRaisedBevelBorder());
this.getContentPane().add(jPanel1, BorderLayout.CENTER);
this.getContentPane().add(jPanel2, BorderLayout.SOUTH);
jPanel2.add(jButton1, null);
jButton1.addActionListener(new ActionListener() {
First of all I found out that when I set the column's header like this:
columnNames_vector.addElement("<html>Column 3<br>Second Row</html>"); //In the setupGUI() methodthe TableHeight_ColumnWidth.determineColumnWidth(TableColumn col, FontMetrics fm) method calculates the column's width by counting <html>, </html>, <br> characters as well. So I added a check to reject these characters and not count them for the column's width.
As for the header's height:
I found that when the first column's header is set to display two-lines, then the height of the rest columns headers is set to display two-lines as well. In other words, the height of the first column's header affects the height of the whole JTableHeader.
I found that the BasicTableHeaderUI.getHeaderHeight() method is called, within which there are these comments:
// If the header value is empty (== "") in the
// first column (and this column is set up
// to use the default renderer) we will
// return zero from this routine and the header
// will disappear altogether. Avoiding the calculation
// of the preferred size is such a performance win for
// most applications that we will continue to
// use this cheaper calculation, handling these
// issues as `edge cases'. Should I override a class and if so which one? I am so confused! If anyone has any idea about how to set the header's height according to the cell's height that is the maximum among all, please let me know. -
Web Service to Query with 21 Columns and up to 1000 Rows
Hi Experts,
I have a web service to a query that returns a table of 21 Columns and up to 1000 Rows.
I would like to display this data in an UI element such List view / Spreadsheet table.
When I am doing so, I have the following issues:
1. With the Spreadsheet table I can't set the header of the columns to the name of the column in the query.
2. with both elements I would like to have a paging capability which I am not sure if is even possible.
3. With both elements I am not able to set the width of each column as I need, and also not able to define the correct formating (date / string....)
Is it possible to have what I am looking for with these elements? Or there are other UI elements for it?
Thanks in advanced,
DoronSHi Charles,
Actually, I am using Xcelsius as you said, and wanted to use it also as I mentioned since in the Web Intelligence I could not find the way to have a good filtering mechanism.
Meaning, there is an option to add filters based on the fields that are in the query. But you can only choose one value per filter filed. If I want filter the data with more than one value it is impossible. Furthermore, there is no way to use free text filtering.
Do you know in what BO Tool I will be able to provide such filtering capabilities?
DoronS -
Hi All.
I have a control file which i need to add a column with header data value.
example
data file:
123456;201303
santiago;producto1;100
santiago;producto2;200
valparais;producto1;400
valparais;producto3;900
The control file skip the first column and load the three columns on the table, but, now i need to add other column with 201303 value constant of the first record and load it on the table.
Then
select * from table:
santiago producto1 100 201303
santiago producto2 200 201303
valparais producto1 400 201303
valparais producto3 900 201303
How i do this in the control file?
Regards!SCOTT@orcl_11gR2> host type test.dat
123456;201303
santiago;producto1;100
santiago;producto2;200
valparais;producto1;400
valparais;producto3;900
SCOTT@orcl_11gR2> host type test1.ctl
options (load=1)
load data
infile test.dat
replace
into table onecol_onerow
fields terminated by ';'
trailing nullcols
(filler1 filler, newcol)
SCOTT@orcl_11gR2> host type test2.ctl
options (skip=1)
load data
infile test.dat
append
into table test_tab
fields terminated by ';'
trailing nullcols
(col1, col2, col3,
newcol expression "(select newcol from onecol_onerow)")
SCOTT@orcl_11gR2> create table onecol_onerow
2 (newcol number)
3 /
Table created.
SCOTT@orcl_11gR2> create table test_tab
2 (col1 varchar2(15),
3 col2 varchar2(15),
4 col3 number,
5 newcol number)
6 /
Table created.
SCOTT@orcl_11gR2> host sqlldr scott/tiger control=test1.ctl log=test1.log
SQL*Loader: Release 11.2.0.1.0 - Production on Mon May 6 10:46:44 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Commit point reached - logical record count 1
SCOTT@orcl_11gR2> select * from onecol_onerow
2 /
NEWCOL
201303
1 row selected.
SCOTT@orcl_11gR2> host sqlldr scott/tiger control=test2.ctl log=test2.log
SQL*Loader: Release 11.2.0.1.0 - Production on Mon May 6 10:46:45 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Commit point reached - logical record count 4
SCOTT@orcl_11gR2> select * from test_tab
2 /
COL1 COL2 COL3 NEWCOL
santiago producto1 100 201303
santiago producto2 200 201303
valparais producto1 400 201303
valparais producto3 900 201303
4 rows selected. -
hi all
In alv report out put the field heading is too long.
So I want to disply the heading in two rows.
Like April 2006 prior month personal,
Is to be disply like in one row April 2006.
And in next row prior month personal.
Please send the reply as early as possible to [email protected]i think it is not possible like that , u can increase the length of that field in fieldcatalog
wa_fieldname-outputlen = '100'.
and in layout u can use
wa_layout-colwidth_optimize = 'X'. -
How to refer a column value of a single row in conditional column display?
Hello,
does anybody have an idea, how i can refer a column value of a single row in conditional display of a column?
So my idea is, that a report has a column, which value is only displayed, when another column value of this row has a specific value.
I want to solve this problem with condition type: PL/SQL Function Body returning a boolean.
But I do not know how to refer the column value of each single row!
Thank you,
TimHere's a solution that, to me, seems easier to implement but, that's, of course, in the eye of the implementer.
Rather than using APEX to generate a link column for you, actually create the link as part of your SQL.
select '<a href="f?p=102:3:491847682940364::::P3_CONTACT_ID:' || CONTACT_ID || "><img src="/i/themes/theme_1/ed-item.gif" alt="Edit"></a>' CONTACT_LINK, ...
etc.
Test this out. You'll see that it works just like making a column a link using the column attributes.
Next, we'll change the SQL to use a DECODE statement to either display the link or nothing depending on what your criteria is. For example, let's assume you only want a link for active contacts.
select Decode( CONTACT_STATUS, 'A', '<a href="f?p=102:3:491847682940364::::P3_CONTACT_ID:' || CONTACT_ID || "><img src="/i/themes/theme_1/ed-item.gif" alt="Edit"></a>', NULL ) CONTACT_LINK, ...
etc.
This will not display the link in any rows in which the CONTACT_STATUS is not active, i.e. "A"
-Joe -
(JTable) How can i get the first columns cell in a selected row?
Hello. I am trying to figure out how i can get the first columns cell within a selected row no matter what cell is selected in that row. I have a class that extends AbstractTableModel which represents the table. Now i have another class that extends DefaultSelectionModel. Each model is added to the JTable via setModel(TableModel dataModel), setSelectionModel(ListSelectionModel newModel). Now i don't understand what i have to return from getMaxSelectionIndex(). Any ides? Thanks.
class xTableModel extends AbstractTableModel{
private static String[] cols;
private Object[][] data;
public void setTableModel(Object data[][], String[] cols){
this.cols = cols;
this.data = data;
public String getColumnName(int col){
return cols[col];
public int getRowCount() {
return data.length;
public Object getValueAt(int row, int col) {
return data[row][col];
public void setValueAt(Object value,int row,int col){
data[row][col]=value;
public int getColumnCount(){
return cols.length;
class ColumnListenerModel extends DefaultListSelectionModel{
public int getMaxSelectionIndex(){}int row = table.getSelectedRow();
Object data = table.getValueAt(row, 0);
Maybe you are looking for
-
Display View as per different Business transaction
Hello Experts, I have created two z business transactions. I want to show the view depending upon business transaction. Lets say, In view set there are total 3 view are displayed. If we consider business transaction as ZBT1 and ZBT2. and view as view
-
[error] Please help: Finder crashing
Dear Apple Discussion members, I am having a major and annoing problem. This morning I was updating "Security" via Software Update. After that the Finder kept crashing every single minute, showing the attached message (I had no such a bug before). An
-
Where do I find the program once it's downloaded
I've downloaded the PS CC version after subscribing to the program and can't find where to open the program? Can anyone help? The only thing on my desktop is the Cloud CC icon which opens up the apps programs to download/update files.
-
have win xp, latest versions of firefox and adobe' flash player. It works on the Explorer, but firefox calls for a missing plugin. When I try to download it, keep getting the "failed integrity test" message from the "get plus downloader". I tried all
-
Can't use registration on ios5.0.1
In map , facebook. When i want to know where am i, my 4s can't show the location in map. How can i do?