Ga naar inhoud

JAVA: JTable vraagje


Aanbevolen berichten

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]
Link naar reactie
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
Link naar reactie
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
Link naar reactie
  • 2 weken later...
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
Link naar reactie
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
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

  • Populaire leden

    Er is nog niemand die deze week reputatie heeft ontvangen.

  • Leden

    Geen leden om te tonen

×
×
  • Nieuwe aanmaken...