java swing如何实现首行固定不动可以通过滚动条控制其它列水平滚动

时间:2023-01-26 22:57:29
股票行情列表,前面几列固定不动,后面的列可以滚动,怎么实现,请教了

7 个解决方案

#1


说得不太清楚,详细描述一下

#2


股票行情列表,锁定左边几列,当滚动条拉动的时候,后边的列可以滚动,锁定的列不动

#3


setlockrow()

#4


贴一段别人的

public class FixedColumnExample extends JFrame
{
    Object[][] data;

    Object[]   column;

    JTable     fixedTable, table;

    public FixedColumnExample()
    {
        super("Fixed Column Example");
        setSize(400, 150);

        data = new Object[][] { 
                { "1", "11", "A", "", "", "", "", "" },
                { "2", "22", "", "B", "", "", "", "" },
                { "3", "33", "", "", "C", "", "", "" },
                { "4", "44", "", "", "", "D", "", "" },
                { "5", "55", "", "", "", "", "E", "" },
                { "6", "66", "", "", "", "", "", "F" } };
        column = new Object[] { "fixed 1", "fixed 2", "a", "b", "c", "d", "e",
                "f" };

        AbstractTableModel fixedModel = new AbstractTableModel()
        {
            public int getColumnCount()
            {
                return 2;
            }

            public int getRowCount()
            {
                return data.length;
            }

            public String getColumnName(int col)
            {
                return (String) column[col];
            }

            public Object getValueAt(int row, int col)
            {
                return data[row][col];
            }
        };
        AbstractTableModel model = new AbstractTableModel()
        {
            public int getColumnCount()
            {
                return column.length - 2;
            }

            public int getRowCount()
            {
                return data.length;
            }

            public String getColumnName(int col)
            {
                return (String) column[col + 2];
            }

            public Object getValueAt(int row, int col)
            {
                return data[row][col + 2];
            }

            public void setValueAt(Object obj, int row, int col)
            {
                data[row][col + 2] = obj;
            }

            public boolean CellEditable(int row, int col)
            {
                return true;
            }
        };

        fixedTable = new JTable(fixedModel)
        {
            public void valueChanged(ListSelectionEvent e)
            {
                super.valueChanged(e);
                checkSelection(true);
            }
        };
        table = new JTable(model)
        {
            public void valueChanged(ListSelectionEvent e)
            {
                super.valueChanged(e);
                checkSelection(false);
            }
        };
        fixedTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        fixedTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

        JScrollPane scroll = new JScrollPane(table);
        JViewport viewport = new JViewport();
        viewport.setView(fixedTable);
        viewport.setPreferredSize(fixedTable.getPreferredSize());
        scroll.setRowHeaderView(viewport);
        scroll.setCorner(JScrollPane.UPPER_LEFT_CORNER, fixedTable
                .getTableHeader());

        getContentPane().add(scroll, BorderLayout.CENTER);
    }

    private void checkSelection(boolean isFixedTable)
    {
        int fixedSelectedIndex = fixedTable.getSelectedRow();
        int selectedIndex = table.getSelectedRow();
        if (fixedSelectedIndex != selectedIndex)
        {
            if (isFixedTable)
            {
                table.setRowSelectionInterval(fixedSelectedIndex,
                        fixedSelectedIndex);
            }
            else
            {
                fixedTable
                        .setRowSelectionInterval(selectedIndex, selectedIndex);
            }
        }
    }

    public static void main(String[] args)
    {
        FixedColumnExample frame = new FixedColumnExample();
        frame.addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent e)
            {
                System.exit(0);
            }
        });
        frame.setVisible(true);
    }
}

#5


楼上给的代码咋在运行的时候报NullPointerException

#6


mark

#7


2个Table, 不动的列放在第一个Table中, 这个Table放在JScrollPane的RowHeader里面.

2个Table使用同一个SelectionModel, 如果是行选的话

#1


说得不太清楚,详细描述一下

#2


股票行情列表,锁定左边几列,当滚动条拉动的时候,后边的列可以滚动,锁定的列不动

#3


setlockrow()

#4


贴一段别人的

public class FixedColumnExample extends JFrame
{
    Object[][] data;

    Object[]   column;

    JTable     fixedTable, table;

    public FixedColumnExample()
    {
        super("Fixed Column Example");
        setSize(400, 150);

        data = new Object[][] { 
                { "1", "11", "A", "", "", "", "", "" },
                { "2", "22", "", "B", "", "", "", "" },
                { "3", "33", "", "", "C", "", "", "" },
                { "4", "44", "", "", "", "D", "", "" },
                { "5", "55", "", "", "", "", "E", "" },
                { "6", "66", "", "", "", "", "", "F" } };
        column = new Object[] { "fixed 1", "fixed 2", "a", "b", "c", "d", "e",
                "f" };

        AbstractTableModel fixedModel = new AbstractTableModel()
        {
            public int getColumnCount()
            {
                return 2;
            }

            public int getRowCount()
            {
                return data.length;
            }

            public String getColumnName(int col)
            {
                return (String) column[col];
            }

            public Object getValueAt(int row, int col)
            {
                return data[row][col];
            }
        };
        AbstractTableModel model = new AbstractTableModel()
        {
            public int getColumnCount()
            {
                return column.length - 2;
            }

            public int getRowCount()
            {
                return data.length;
            }

            public String getColumnName(int col)
            {
                return (String) column[col + 2];
            }

            public Object getValueAt(int row, int col)
            {
                return data[row][col + 2];
            }

            public void setValueAt(Object obj, int row, int col)
            {
                data[row][col + 2] = obj;
            }

            public boolean CellEditable(int row, int col)
            {
                return true;
            }
        };

        fixedTable = new JTable(fixedModel)
        {
            public void valueChanged(ListSelectionEvent e)
            {
                super.valueChanged(e);
                checkSelection(true);
            }
        };
        table = new JTable(model)
        {
            public void valueChanged(ListSelectionEvent e)
            {
                super.valueChanged(e);
                checkSelection(false);
            }
        };
        fixedTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        fixedTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

        JScrollPane scroll = new JScrollPane(table);
        JViewport viewport = new JViewport();
        viewport.setView(fixedTable);
        viewport.setPreferredSize(fixedTable.getPreferredSize());
        scroll.setRowHeaderView(viewport);
        scroll.setCorner(JScrollPane.UPPER_LEFT_CORNER, fixedTable
                .getTableHeader());

        getContentPane().add(scroll, BorderLayout.CENTER);
    }

    private void checkSelection(boolean isFixedTable)
    {
        int fixedSelectedIndex = fixedTable.getSelectedRow();
        int selectedIndex = table.getSelectedRow();
        if (fixedSelectedIndex != selectedIndex)
        {
            if (isFixedTable)
            {
                table.setRowSelectionInterval(fixedSelectedIndex,
                        fixedSelectedIndex);
            }
            else
            {
                fixedTable
                        .setRowSelectionInterval(selectedIndex, selectedIndex);
            }
        }
    }

    public static void main(String[] args)
    {
        FixedColumnExample frame = new FixedColumnExample();
        frame.addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent e)
            {
                System.exit(0);
            }
        });
        frame.setVisible(true);
    }
}

#5


楼上给的代码咋在运行的时候报NullPointerException

#6


mark

#7


2个Table, 不动的列放在第一个Table中, 这个Table放在JScrollPane的RowHeader里面.

2个Table使用同一个SelectionModel, 如果是行选的话