Auf Thema antworten

Ich hab dir was gebastelt, ist zwar ein bisschen dirty macht aber was du willst. Kann jetzt aber nicht garantieren ob das auch mit allen look and feels funktioniert.

[code=Java]import java.awt.BorderLayout;


public class TableRowSorterDemo extends JFrame

{

   

    private JPanel contentPane;

    private JScrollPane scrollPane;

    private JTable table;

    private MouseListener[] headerListeners;

   

    /**

     * Launch the application.

     */

    public static void main(String[] args)

    {

        EventQueue.invokeLater(new Runnable()

            {

                public void run()

                {

                    try

                    {

                        TableRowSorterDemo frame = new TableRowSorterDemo();

                        frame.setVisible(true);

                    } catch (Exception e)

                    {

                        e.printStackTrace();

                    }

                }

            });

    }

   

    /**

     * Create the frame.

     */

    public TableRowSorterDemo()

    {

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        setBounds(100, 100, 450, 300);

        contentPane = new JPanel();

        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

        contentPane.setLayout(new BorderLayout(0, 0));

        setContentPane(contentPane);

       

        scrollPane = new JScrollPane();

        contentPane.add(scrollPane, BorderLayout.CENTER);

       

        table = new JTable();

        table.setModel(new DefaultTableModel(new Object[][] { { "Sepp", "11", "111" }, { "Fritz", "10", "120" },

                { "Hansi", "5", "100" }, { null, null, null }, { null, null, null }, }, new String[] { "Name", "Alter",

                "Gr\u00F6\u00DFe" }));

        scrollPane.setViewportView(table);

       

        table.setAutoCreateRowSorter(true);

       

        headerListeners = table.getTableHeader().getMouseListeners();

       

        for (MouseListener l : headerListeners)

        {

            table.getTableHeader().removeMouseListener(l);

        }

       

        table.getTableHeader().addMouseListener(new MouseListener()

            {

                @Override

                public void mouseClicked(MouseEvent e)

                {

                    JTableHeader header = (JTableHeader) e.getSource();

                    if (header.getCursor().getType()!=Cursor.E_RESIZE_CURSOR)

                    {

                        for (MouseListener l : headerListeners)

                        {

                            l.mouseClicked(e);

                        }

                    } else

                    {

                        System.out.println("Resize Columns " + e.getSource());

                        // resize Columns

                    }

                }

               

                @Override

                public void mousePressed(MouseEvent e)

                {

                    for (MouseListener l : headerListeners)

                    {

                        l.mousePressed(e);

                    }

                }

               

                @Override

                public void mouseReleased(MouseEvent e)

                {

                    for (MouseListener l : headerListeners)

                    {

                        l.mouseReleased(e);

                    }

                }

               

                @Override

                public void mouseEntered(MouseEvent e)

                {

                    for (MouseListener l : headerListeners)

                    {

                        l.mouseEntered(e);

                    }

                }

               

                @Override

                public void mouseExited(MouseEvent e)

                {

                    for (MouseListener l : headerListeners)

                    {

                        l.mouseExited(e);

                    }

                }

               

            });

       

    }

   

}

[/code]



Oben