在特定列中制作可jt的单元

发布于 2025-01-28 04:43:48 字数 390 浏览 2 评论 0原文

我正在使用Swing在Java中创建GUI。我使用看起来像这样的jtable。 。

​ 这就是我创建我的JTable的方式。

this.tableModel = new DefaultTableModel(
                new Object[][] { },
                new String[] {"ID", "Nazov", "Naplnena kapacita / kapacita", "Popis"}
        );
this.table1.setModel(this.tableModel);

我使用this.tablemodel.addrow();添加数据。 有没有办法使我的表的最后一列可以滚动?

I'm creating GUI in java using swing. I use JTable that looks like this.My table

I need to make cells of last column("Popis") to be scrollable as there will be description so String containing this description has variable lenght for each row.
This is how I created my JTable.

this.tableModel = new DefaultTableModel(
                new Object[][] { },
                new String[] {"ID", "Nazov", "Naplnena kapacita / kapacita", "Popis"}
        );
this.table1.setModel(this.tableModel);

I add data to table using this.tablemodel.addRow();
Is there a way to make cells of last column of my table scrollable?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

知足的幸福 2025-02-04 04:43:48

将滚动组件嵌入JTable将很困难和尴尬。显示长单元格值的一种常见方法是使单元的工具提示(悬停文本)显示完整值:(

table1.setModel(tableModel);

table1.getColumnModel().getColumn(3).setCellRenderer(
    new DefaultTableCellRenderer() {
        @Override
        public Component getTableCellRendererComponent(JTable table,
                                                       Object value,
                                                       boolean selected,
                                                       boolean focused,
                                                       int row,
                                                       int column) {

            Component component = super.getTableCellRendererComponent(
                table, value, selected, focused, row, column);

            if (component instanceof JComponent) {
                ((JComponent) component).setToolTipText(
                    Objects.toString(value, null));
            }

            return component;
        }
    });

对象是java.util.objects类。)

It would be difficult and awkward to embed a scrolling component inside a JTable. A common approach to showing long cell values is to make the cell’s tooltip (hover text) display the full value:

table1.setModel(tableModel);

table1.getColumnModel().getColumn(3).setCellRenderer(
    new DefaultTableCellRenderer() {
        @Override
        public Component getTableCellRendererComponent(JTable table,
                                                       Object value,
                                                       boolean selected,
                                                       boolean focused,
                                                       int row,
                                                       int column) {

            Component component = super.getTableCellRendererComponent(
                table, value, selected, focused, row, column);

            if (component instanceof JComponent) {
                ((JComponent) component).setToolTipText(
                    Objects.toString(value, null));
            }

            return component;
        }
    });

(Objects is the java.util.Objects class.)

青衫负雪 2025-02-04 04:43:48

可以通过创建扩展AbstractCelleditor并实施TableCelleDitor的私人类来解决。然后创建并自定义滚动条。这是示例。

public class MainForm {
    private JTable table1;
    private JPanel panel1;
    private JTextArea text = new JTextArea();

    public MainForm() {
        text.setEditable(false);
        DefaultTableModel tableModel = new DefaultTableModel(new Object[][]{}, new String[]{"Meno", "Priezvisko", "Datum", "Popis"});
        table1.setModel(tableModel);
        table1.setRowHeight(40);
        tableModel.addRow(new Object[]{"Jaimi", "Parker", "2022", "fdjfadufaouifasoifjasifhasiofa \nasdasdasdasdasdasdas \nasdasdasdasdasdasd\nasdasdasdasd "});
        tableModel.addRow(new Object[]{"William", "Mcdonald", "2021", "fdjfadufaouasfadfdsfafifasoifjasifhasiofa"});
        tableModel.addRow(new Object[]{"Matt", "Ashley", "2020", "asfasfafdsfgdafgdfgasgsdg"});
        tableModel.addRow(new Object[]{"Ariana", "Burns", "2019", "fdjfadufaouifasfdsgdgagsgsdgsdgsdagsdgsdgsdgsagsdgoifjasifhasiofa"});

        TableColumn column = table1.getColumn("Popis");
        column.setCellEditor(new HScrollableTCE());
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("MainForm");
        frame.setContentPane(new MainForm().panel1);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }

    private class HScrollableTCE extends AbstractCellEditor implements TableCellEditor
    {
        JScrollPane scroll = new JScrollPane(text, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int rowIndex, int vColIndex)
        {
            if (value != null) {
                scroll.setHorizontalScrollBar(scroll.createHorizontalScrollBar());
                scroll.getHorizontalScrollBar().setPreferredSize(new Dimension(0, 5));

                scroll.setBorder(new EmptyBorder(0,0,0,0));
                scroll.setToolTipText(value.toString());
                text.setText(value.toString());
                return scroll;
            }
            return null;
        }
        public Object getCellEditorValue()
        {
            return text.getText();
        }
    }

}

It can be solved by creating private class that extends AbstractCellEditor and implements TableCellEditor. Then create and customize the scrollbar. Here is example.

public class MainForm {
    private JTable table1;
    private JPanel panel1;
    private JTextArea text = new JTextArea();

    public MainForm() {
        text.setEditable(false);
        DefaultTableModel tableModel = new DefaultTableModel(new Object[][]{}, new String[]{"Meno", "Priezvisko", "Datum", "Popis"});
        table1.setModel(tableModel);
        table1.setRowHeight(40);
        tableModel.addRow(new Object[]{"Jaimi", "Parker", "2022", "fdjfadufaouifasoifjasifhasiofa \nasdasdasdasdasdasdas \nasdasdasdasdasdasd\nasdasdasdasd "});
        tableModel.addRow(new Object[]{"William", "Mcdonald", "2021", "fdjfadufaouasfadfdsfafifasoifjasifhasiofa"});
        tableModel.addRow(new Object[]{"Matt", "Ashley", "2020", "asfasfafdsfgdafgdfgasgsdg"});
        tableModel.addRow(new Object[]{"Ariana", "Burns", "2019", "fdjfadufaouifasfdsgdgagsgsdgsdgsdagsdgsdgsdgsagsdgoifjasifhasiofa"});

        TableColumn column = table1.getColumn("Popis");
        column.setCellEditor(new HScrollableTCE());
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("MainForm");
        frame.setContentPane(new MainForm().panel1);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }

    private class HScrollableTCE extends AbstractCellEditor implements TableCellEditor
    {
        JScrollPane scroll = new JScrollPane(text, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int rowIndex, int vColIndex)
        {
            if (value != null) {
                scroll.setHorizontalScrollBar(scroll.createHorizontalScrollBar());
                scroll.getHorizontalScrollBar().setPreferredSize(new Dimension(0, 5));

                scroll.setBorder(new EmptyBorder(0,0,0,0));
                scroll.setToolTipText(value.toString());
                text.setText(value.toString());
                return scroll;
            }
            return null;
        }
        public Object getCellEditorValue()
        {
            return text.getText();
        }
    }

}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文