Программное изменение высоты строки JTable

0
15 апр 2020 07:06
Подскажите имеется форма

public class MainFrame extends JFrame {
    private int colThread=0;
    MainThread mt=new MainThread("Поток - 1");

    public MainFrame()  
    {
        setSize(300,300);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JTable jTable=new JTable(20,4);
        jTable.setRowHeight(20);
        jTable.addMouseListener(new RightMouse());
        add(jTable);
    }
}

И имеется класс слушателя нажатия правой клавиши мыши

pubПодскажите имеется форма

public class MainFrame extends JFrame {
private int colThread=0;
MainThread mt=new MainThread("Поток - 1");

public MainFrame()
{
setSize(300,300);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTable jTable=new JTable(20,4);
jTable.setRowHeight(20);
jTable.addMouseListener(new RightMouse());
add(jTable);
}
}
И имеется класс слушателя нажатия правой клавиши мыши

public class RightMouse extends MouseAdapter{

    @Override
    public void mousePressed(MouseEvent e) {
        // TODO Auto-generated method stub
        if (e.getButton()==MouseEvent.BUTTON3)
        {
            JPopupMenu popupMenu = new TableMenu(e);
            popupMenu.show(e.getComponent(), e.getX(), e.getY());
        }
    }

    private class TableMenu extends JPopupMenu
    {
        JMenuItem anMenu;

        public TableMenu(MouseEvent event) {

            this.anMenu = new JMenuItem("Увеличить ширину строки");
            add(anMenu);
            this.anMenu.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    if (event.getComponent() instanceof JTable)
                    {
                        JTable table = (JTable) event.getComponent();
                        try {
                            table.setRowHeight(table.getRowHeight() + 10);
                        }catch (IllegalArgumentException err)
                        {
                            table.setRowHeight(10);
                        }

                    }
                }
            });

            this.anMenu = new JMenuItem("Уменьшить ширину строки");
            add(anMenu);
            this.anMenu.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    if (event.getComponent() instanceof JTable)
                    {
                        JTable table = (JTable) event.getComponent();
                        try {
                            table.setRowHeight(table.getRowHeight() - 10);
                        }catch (IllegalArgumentException err)
                        {
                            table.setRowHeight(10);
                        }

                    }
                }
            });
        }   

    }
}

Вопрос состоит в том как мне можно сделать, чтобы можно было изменять высоту определенной строки, на которой в данный можент указатель мыши, а не все строки в таблице.

Ответов: 3

0
18 апр 2020 19:18
int row = table.rowAtPoint(event.getPoint());

Помогла следующая статья https://javaswing.wordpress.com/2009/09/16/jtable_right_button_selection/
0
18 апр 2020 11:43
1. Добавьте в тело метода "mousePressed" эти 2 строки (вначале):
        JTable source = (JTable) e.getSource();
        int selectedRow = source.getSelectedRow();


2. Передайте "selectedRow" в конструктор "TableMenu" предварительно добавив "selectedRow" в этот класс:
private static class TableMenu extends JPopupMenu {
        final int selectedRow;

        .....

        TableMenu(MouseEvent event, int selectedRow) {
                this.selectedRow = selectedRow;
                ...
        }


3. Измените вызовы:
        table.setRowHeight(table.getRowHeight() +/- 10)


на
        table.setRowHeight(selectedRow, table.getRowHeight() +/- 10)
0
16 апр 2020 05:19
никогда не делал, но вижу два способа:
поковыряться в Look and Feel. не пробовал, но говорят, что там чёрт голову сломит.
или вручную получить строку, из неё каждую ячейку, из ячейки UI ну и с ним уже работать.
Модераторы: Нет
Сейчас эту тему просматривают: Нет