Note that there are some explanatory texts on larger screens.

plurals
  1. POHow do I update a JPanel with information from a different class?
    primarykey
    data
    text
    <p>I created the following example source and am wondering what I need to do to update my JPanel with a JLabel that has the information located from the row clicked in the JTable.</p> <p>I also wanted to note that this is just a bare example as I've improved the sample code quite a bit thanks to a few SO members here. So I'm posting this bare example as a way to learn</p> <p>SwingTesting (main)</p> <pre><code>public class SwingTesting { private final JFrame frame; private final TablePane tablePane; private final JSplitPane splitPane; private final JPanel infoPanel; private final JLabel infoLabel; public SwingTesting() { tablePane = new TablePane(); infoPanel = new JPanel(); frame = new JFrame(); infoLabel = new JLabel(); //this is the panel i want to add the label to infoPanel.add(infoLabel); splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, tablePane, infoPanel); frame.add(splitPane); frame.pack(); frame.setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { new SwingTesting(); } }); } } </code></pre> <p>TablePane </p> <pre><code>public class TablePane extends JPanel { private final JTable table; private final TableModel tableModel; private final ListSelectionModel listSelectionModel; public TablePane() { table = new JTable(); tableModel = createTableModel(); table.setModel(tableModel); table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION); table.add(table.getTableHeader(), BorderLayout.PAGE_START); table.setFillsViewportHeight(true); listSelectionModel = table.getSelectionModel(); table.setSelectionModel(listSelectionModel); listSelectionModel.addListSelectionListener(new SharedListSelectionHandler()); table.setSelectionModel(listSelectionModel); this.setLayout(new GridBagLayout()); GridBagConstraints gbc = new GridBagConstraints(); gbc.anchor = GridBagConstraints.NORTHWEST; gbc.fill = GridBagConstraints.BOTH; gbc.gridx = 0; gbc.gridy = 0; gbc.gridheight = 1; gbc.gridwidth = 3; gbc.insets = new Insets(5, 5, 5, 5); gbc.ipadx = 2; gbc.ipady = 2; gbc.weightx = 1; gbc.weighty = 1; this.add(new JScrollPane(table), gbc); } private TableModel createTableModel() { DefaultTableModel model = new DefaultTableModel( new Object[] {"Car", "Color", "Year"}, 0 ){ @Override public boolean isCellEditable(int row, int column) { return false; } }; addTableData(model); return model; } private void addTableData(DefaultTableModel model) { model.addRow(new Object[] {"Nissan", "Black", "2007"}); model.addRow(new Object[] {"Toyota", "Blue", "2012"}); model.addRow(new Object[] {"Chevrolet", "Red", "2009"}); model.addRow(new Object[] {"Scion", "Silver", "2005"}); model.addRow(new Object[] {"Cadilac", "Grey", "2001"}); } class SharedListSelectionHandler implements ListSelectionListener { //When selection changes i want to add a label to the panel //currently it just prints out the info from the selected row @Override public void valueChanged(ListSelectionEvent e) { ListSelectionModel lsm = (ListSelectionModel) e.getSource(); String contents = ""; if(lsm.isSelectionEmpty()) { System.out.println("&lt;none&gt;"); } else { int minIndex = lsm.getMinSelectionIndex(); int maxIndex = lsm.getMaxSelectionIndex(); for(int i = minIndex; i &lt;= maxIndex; i++) { if(lsm.isSelectedIndex(i)) { for(int j = 0; j &lt; table.getColumnCount(); j++) { contents += table.getValueAt(i, j) + " "; } } } System.out.println(contents); } } } } </code></pre> <p>So I'm wondering how to access that JPanel from the ListSelectionListener. Should I just pass the panel to the TablePane class? Or is there a more proper way to do this?</p> <p>Also, my ListSelectionListener prints out the row information twice for some reason, did I mess up the loop?</p> <p><strong>EDIT</strong></p> <pre><code>public class TablePane extends JPanel { private final JTable table; private final TableModel tableModel; private final ListSelectionModel listSelectionModel; private final displayPanel; public TablePane() { //removed code for reading purposes } //IDE says issue with thinking displayPanel may have already been initialized public TablePane(JPanel panel) { //this(); //displayPanel = panel; } //ListSelectionListener uses panel.add(jlabel) } </code></pre> <p>Is it as simple as taking <code>final</code> off?</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload