Newsgroup: it.comp.java
Titolo: Mi aiutate a visualizzare meglio questa JTable

Salve a Tutti!! Mi aiutate con questo codice, perfettamente
funzionante: si tratta di un frame che visualizza due pannelli (quello
di Sinistra e un altro di Destra).
Il pannello di sinistra mostra una JTable, ma non riesco a
visualizzarla con gli Scroller verticali ed orizzontali. Io vorrei che
questa tabella avesse delle dimensioni fisse e che, tramite appunto
uno scroller laterale, io possa scorrere le righe verso l'alto/basso.
Al momento invece mi viene mostrata la tabella con un grande spazio
(di colore grigio) vuoto posto sotto le righe della tabella e,
se ridimensiono tutto il frame, posso anche perdere la visuale su
certe colonne.
Mi aiutate ?
Se mi sono spiegato male me ne scuso e rimango a disposizione per ogni
Vostro chiarimento.
Ciao & Grazie!!
// ==== Main.java ============
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.text.*;
import java.awt.datatransfer.*;
import javax.swing.*;
import javax.swing.text.*;
import javax.swing.tree.*;
import javax.swing.table.*;
public class Main extends JPanel implements ActionListener {
    private static JFrame frame;
    private JTextArea textArea;
    private JTextField textField;
    private JList list;
    private JTable table;
    private JTree tree;
    private JColorChooser colorChooser;
    private JCheckBox toggleDnD;
    public Main() {
        super(new BorderLayout());
        JPanel leftPanel = createPanelForComponent(new PannelloSX
().getPane(), "Sinistra"); //createVerticalBoxPanel();
        JPanel rightPanel = createPanelForComponent(new PannelloDX
().getPane(),"Destra");   //createVerticalBoxPanel();
        //Create the toggle button.
        toggleDnD = new JCheckBox("Turn on Drag and Drop");
        toggleDnD.setActionCommand("toggleDnD");
        toggleDnD.addActionListener(this);
        JSplitPane splitPane = new JSplitPane
(JSplitPane.HORIZONTAL_SPLIT,
                                              leftPanel, rightPanel);
        splitPane.setOneTouchExpandable(true);
        add(splitPane, BorderLayout.CENTER);
        add(toggleDnD, BorderLayout.PAGE_END);
        setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
    }
    protected JPanel createVerticalBoxPanel() {
        JPanel p = new JPanel();
        p.setLayout(new BoxLayout(p, BoxLayout.PAGE_AXIS));
        p.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
        return p;
    }
    public JPanel createPanelForComponent(JComponent comp,
                                          String title) {
        JPanel panel = new JPanel(new BorderLayout());
        panel.add(comp, BorderLayout.CENTER);
        if (title != null) {
            panel.setBorder(BorderFactory.createTitledBorder(title));
        }
        return panel;
    }
    private void displayDropLocation(final String string) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JOptionPane.showMessageDialog(null, string);
            }
        });
    }
    public void actionPerformed(ActionEvent e) {
        if ("toggleDnD".equals(e.getActionCommand())) {
            boolean toggle = toggleDnD.isSelected();
            textArea.setDragEnabled(toggle);
            textField.setDragEnabled(toggle);
            list.setDragEnabled(toggle);
            table.setDragEnabled(toggle);
            tree.setDragEnabled(toggle);
            colorChooser.setDragEnabled(toggle);
        }
    }
    /**
     * Create the GUI and show it.  For thread safety,
     * this method should be invoked from the
     * event-dispatching thread.
     */
    private static void createAndShowGUI() {
        //Create and set up the window.
        frame = new JFrame("BasicDnD");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //Create and set up the content pane.
        JComponent newContentPane = new Main();
        newContentPane.setOpaque(true); //content panes must be opaque
        frame.setContentPane(newContentPane);
        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }
    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                //Turn off metal's use of bold fonts
	        UIManager.put("swing.boldMetal", Boolean.FALSE);
                createAndShowGUI();
            }
        });
    }
}
// ==== PannelloSX ============
import javax.swing.JPanel;
import java.awt.Dimension;
import java.awt.Color;
import javax.swing.ImageIcon;
import javax.swing.JTable;
import javax.swing.table.TableModel; import
javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;
import javax.swing.JScrollPane;
import java.awt.BorderLayout;
public class PannelloSX extends JPanel {
    // CAMPI
    private JPanel sx;
    private final int COLOR_COLUMN = 4;
    private final int IMAGE_COLUMN = 5;
    private String[] columnNames = { "Planet", "Radius", "Moons",
"Gaseous", "Color", "Image" };
    private Object[][] cells;
    private JTable table;
    // COSTRUTTORE
    public PannelloSX() {
    super();
	//sx = new JPanel();
	//sx.setLayout(new VerticalLayoutManager(0));
    setPreferredSize(new Dimension(300, 200));
    setBackground(Color.BLUE);
    cells = loadTable();
    TableModel model = new DefaultTableModel(cells, columnNames)
        {
            public Class<?> getColumnClass(int c)
            {
                return cells[0][c].getClass();
            }
        };
    table = new JTable(model);
    //table.setRowHeight(100);
    //table.getColumnModel().getColumn(COLOR_COLUMN).setMinWidth
(50); // 250
    //table.getColumnModel().getColumn(IMAGE_COLUMN).setMinWidth
(10);// 100
    final TableRowSorter<TableModel> sorter = new
TableRowSorter<TableModel>(model);
    table.setRowSorter(sorter);
    /* sorter.setComparator(COLOR_COLUMN, new Comparator<Color>()
        {
            public int compare(Color c1, Color c2)
            {
                int d = c1.getBlue() - c2.getBlue();
                if (d != 0) return d;
                d = c1.getGreen() - c2.getGreen();
                if (d != 0) return d;
                return c1.getRed() - c2.getRed();
            }
        });
    */ sorter.setSortable(IMAGE_COLUMN, false);
    JScrollPane scrollPane = new JScrollPane(table,
    JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    add(scrollPane);
    }
    // METODI
    public JPanel getPane()
    {
        //JPanel xs = new JPanel();
	//xs.add(new PannelloSX());
	//JPanel xs = new PannelloSX();
        return new PannelloSX();
    }
    private Object[][] loadTable() {
    Object[][] cells = {
          { "Mercury", 2440.0, 0, false, Color.YELLOW, new ImageIcon
("Mercury.gif") },
          { "Venus", 6052.0, 0, false, Color.YELLOW, new ImageIcon
("Venus.gif") },
          { "Earth", 6378.0, 1, false, Color.BLUE, new ImageIcon
("Earth.gif") },
          { "Mars", 3397.0, 2, false, Color.RED, new ImageIcon
("Mars.gif") },
          { "Jupiter", 71492.0, 16, true, Color.ORANGE, new ImageIcon
("Jupiter.gif") },
          { "Saturn", 60268.0, 18, true, Color.ORANGE, new ImageIcon
("Saturn.gif") },
          { "Uranus", 25559.0, 17, true, Color.BLUE, new ImageIcon
("Uranus.gif") },
          { "Neptune", 24766.0, 8, true, Color.BLUE, new ImageIcon
("Neptune.gif") },
          { "Pluto", 1137.0, 1, false, Color.BLACK, new ImageIcon
("Pluto.gif") } };
    return cells;
    }
}
// ==== PanelloDX.java ============
import javax.swing.JPanel;
import java.awt.Dimension;
import java.awt.Color;
public class PannelloDX extends JPanel {
    // CAMPI
    private JPanel dx;
    // COSTRUTTORE
    public PannelloDX() {
	dx = new JPanel();
	dx.setPreferredSize(new Dimension(100, 100));
	dx.setBackground(Color.WHITE);
    }
    // METODI
    public JPanel getPane()
    {
        return dx;
    }
}

SOLUZIONE:
sostituire nel costruttore di PannelloSX.java
    // COSTRUTTORE
    public PannelloSX() {
    super();
con
    // COSTRUTTORE
    public PannelloSX() {
    super(new java.awt.GridLayout(1,0));
:)
Se passate da qui
e leggete la soluzione
mi sapreste scrivere 2 linne di codice per le quali, cliccando su una
riga della tabella
nel PannelloSX
ottengo un evento: ad esempio cambia il valore testuale di un JLabel
contenuto
nel PannelloDX
(i due pannelli, PannelloSX & PannelloDX, al momento sono due classi
distinte, non hanno nessun campo/variabile in comune)
Grazie


ciao,  ecco qui. (tabella è una la JTable)
   tabella.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    ListSelectionModel rowSM = tabella.getSelectionModel();
    rowSM.addListSelectionListener(new ListSelectionListener() {
      public void valueChanged(ListSelectionEvent e) {
        // Ignore extra messages.
        if (e.getValueIsAdjusting())
          return;
        ListSelectionModel lsm = (ListSelectionModel) e.getSource();
        if (!lsm.isSelectionEmpty()) {
          int selectedRow = lsm.getMinSelectionIndex();
          //  scrivi qui il tuo evento
          System.out.println("riga selezionata:" + selectedRow);
        }
      }
    });

Ok grazie..
..io di solito creo una classe AzioneSullaTabella (implements
MouseListener o ActionListener) e poi passo l'evento/l'azione che
avviene sulla JTable a questa classe AzioneSullaTabella..
..e il gioco è fatto.