anoniem Geplaatst: 2 juni 2005 Delen Geplaatst: 2 juni 2005 Ik heb een vraag over het gebruik van de JTable. Als ik deze code uitvoer, dan krijg ik netjes een scherm te zien met daarin de tabel. Ik wil dat wanneer ik op een rij klik, de hele rij geselecteerd wordt, en niet alleen 1 cell zoals dat nu het geval is. Mijn vraag is of dit kan, en zo ja hoe. Alvast bedankt, Rob [code:1:496c889bde] import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.swing.table.*; public class Table extends JFrame implements ActionListener{ public JTable table; public static void main(String[] args){ Table table = new Table(); table.setResizable(false); table.setSize(800,600); table.setVisible(true); } public Table(){ getContentPane().setLayout(new BorderLayout()); String dataValues[][]={ { "12", "234", "67" }, { "-123", "43", "853" }, { "93", "89.2", "109" }, { "279", "9033", "3092" } }; String columnNames[] = { "Column 1", "Column 2", "Column 3" }; DefaultTableModel data = new DefaultTableModel(dataValues, columnNames){ public boolean isCellEditable(int row, int column) { return false; } }; table = new JTable( data ); ListSelectionModel lsm = table.getSelectionModel(); lsm.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION); JScrollPane scrollPane = new JScrollPane( table ); getContentPane().add( scrollPane, BorderLayout.CENTER ); JButton button = new JButton("Go"); button.addActionListener(this); getContentPane().add( button, BorderLayout.SOUTH ); } public void actionPerformed(ActionEvent e) { System.out.println(table.getValueAt(table.getSelectedRow() , table.getSelectedColumn())); } } [/code:1:496c889bde] Quote Link naar reactie
anoniem Geplaatst: 3 juni 2005 Auteur Delen Geplaatst: 3 juni 2005 hm, bij mij wordt juist steeds een hele rij geselecteerd, maar wanneer ik op Go druk, wordt alleen de waarde van de laatst geklikte cel geprint. Wat je allemaal met een JTAble kan (oa (automatisch) rijen selecteren, kolommen, waarden opvragen) kan je [url=http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JTable.html]hier[/url] vinden. Als t daar niet mee lukt, laat je t nog maar even weten Quote Link naar reactie
anoniem Geplaatst: 5 juni 2005 Auteur Delen Geplaatst: 5 juni 2005 Bedankt voor de snelle reactie. De API van Java had ik natuurlijk al bekeken. Alleen deze class heeft zoveel mogelijkheden dat ik niet weet welke te gebruiken. Ik wil een zelfde effect al bijvoorbeeld in Outlook hebben. Dat je 1 komplete regel selecteerd. waarin in verschillende kolommen wat data staan. Zoals onderwerp afzender etc. Als je goed kijkt naar de tabel dan zie je dat de cell waar je op klikt nog een selectie rand extra krijgt. Deze selectierand wil ik over de hele trij hebben. Of is dit niet mogelijk? Alvast bedankt. Rob Quote Link naar reactie
anoniem Geplaatst: 7 juni 2005 Auteur Delen Geplaatst: 7 juni 2005 ik weet zo niet of t mogelijk is, als t dat is zal t ergens bij de eerder gegeven link staan. Volgens mij moet je iets doen met "ListSelectionModel" Ik zal er vanavond nader naar kijken Groet, Marien Quote Link naar reactie
anoniem Geplaatst: 7 juni 2005 Auteur Delen Geplaatst: 7 juni 2005 Ik heb nog ff wat gezocht, maar ik krijg t niet voor elkaar dat dat "selectie-randje" over een hele rij gebeurt, of helemaal niet. Hopelijk kan je zelf iets vinden? Quote Link naar reactie
anoniem Geplaatst: 17 juni 2005 Auteur Delen Geplaatst: 17 juni 2005 Gelukt. Met een custom cell renderer krijg je het voor elkaar. Indien iemand geintereseerd is in de code, dan zal ik hem nog even posten. In ieder geval bedankt voor het meedenken. Rob Quote Link naar reactie
anoniem Geplaatst: 17 juni 2005 Auteur Delen Geplaatst: 17 juni 2005 ik ben wel geinteresseerd in de code ja Hartelijk dank! Quote Link naar reactie
anoniem Geplaatst: 21 juni 2005 Auteur Delen Geplaatst: 21 juni 2005 Bij deze dan. [code:1:7f41ea6c38] import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.swing.table.*; import javax.swing.border.*; import java.util.*; public class Table extends JFrame implements ActionListener{ class MyTableCellRenderer extends DefaultTableCellRenderer{ public static final int LEFT_CELL = 0; public static final int MIDDLE_CELL = 1; public static final int RIGHT_CELL = 2; //final Border blueBorder = BorderFactory.createLineBorder(Color.blue); Border borderStyle; MyTableCellRenderer(int Place, Color forcol){ if ( Place == LEFT_CELL ){ borderStyle = BorderFactory.createMatteBorder(1,1,1,0, forcol ); } if ( Place == MIDDLE_CELL ){ borderStyle = BorderFactory.createMatteBorder(1,0,1,0, forcol ); } if ( Place == RIGHT_CELL ){ borderStyle = BorderFactory.createMatteBorder(1,0,1,1, forcol ); } } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col){ super.getTableCellRendererComponent( table, value, isSelected, false, row, col); if( isSelected) setBorder( borderStyle); else setBorder(BorderFactory.createEmptyBorder()); return this; } } public JTable table; public static void main(String[] args){ Table table = new Table(); table.setResizable(false); table.setSize(800,600); table.setVisible(true); } public Table(){ getContentPane().setLayout(new BorderLayout()); String dataValues[][]={ { "12", "234", "67" }, { "-123", "43", "853" }, { "93", "89.2", "109" }, { "279", "9033", "3092" } }; String columnNames[] = { "Column 1", "Column 2", "Column 3" }; DefaultTableModel data = new DefaultTableModel(dataValues, columnNames){ public boolean isCellEditable(int row, int column) { return false; } }; table = new JTable( data ); ListSelectionModel selectionModel = table.getSelectionModel(); selectionModel.setSelectionMode( ListSelectionModel.SINGLE_SELECTION ); TableColumnModel tcm = table.getColumnModel(); tcm.setColumnMargin(0); TableCellRenderer renderer; TableColumn column; for ( int i =0; i < tcm.getColumnCount(); i ++ ){ if ( i == 0 ){ renderer = new MyTableCellRenderer( 0, new Color(90,130,191) ); } else if ( i == tcm.getColumnCount() - 1 ){ renderer = new MyTableCellRenderer( 2, new Color(90,130,191)); } else{ renderer = new MyTableCellRenderer( 1, new Color(90,130,191)); } column = tcm.getColumn( i ); column.setCellRenderer( renderer ); } table.setShowVerticalLines( false ); table.setShowHorizontalLines( false ); JScrollPane scrollPane = new JScrollPane( table ); getContentPane().add( scrollPane, BorderLayout.CENTER ); JButton button = new JButton("Go"); button.addActionListener(this); getContentPane().add( button, BorderLayout.SOUTH ); } public void actionPerformed(ActionEvent e) { System.out.println(table.getValueAt(table.getSelectedRow() , table.getSelectedColumn())); } } [/code:1:7f41ea6c38] Groeten Rob Quote Link naar reactie
anoniem Geplaatst: 21 juni 2005 Auteur Delen Geplaatst: 21 juni 2005 hartelijk dank. Leuk om te zien dat je er zelf uit bent gekomen. Ik vind t wel jammer dat de cellen nu geen border meer hebben. Ik krijg m wel aan, maar dan wordt-ie wit ipv zwart. Quote Link naar reactie
anoniem Geplaatst: 22 juni 2005 Auteur Delen Geplaatst: 22 juni 2005 De kleur van de border kun je gewoon zelf instellen, als je het grid terug wil, verander je de twee regels [code:1:d007db0c59] table.setShowVerticalLines( false ); table.setShowHorizontalLines( false ); [/code:1:d007db0c59] in [code:1:d007db0c59] table.setShowVerticalLines( true ); table.setShowHorizontalLines( true ); [/code:1:d007db0c59] Rob Quote Link naar reactie
anoniem Geplaatst: 22 juni 2005 Auteur Delen Geplaatst: 22 juni 2005 dom, helemaal over heen gelezen :oops: Quote Link naar reactie
anoniem Geplaatst: 22 juni 2005 Auteur Delen Geplaatst: 22 juni 2005 [quote:749cec461c="marientje"]dom, helemaal over heen gelezen :oops:[/quote:749cec461c] Dat kan gebeuren :p Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen