是否可以在optionDialog框中输入jtable行

时间:2016-06-10 17:30:05

标签: java swing jtable

我有一个jtable。

某些单元格包含很长的字符串,并且尝试向左和向右滚动很难。我的问题是,是否可以在弹出式窗口中显示一行,例如showDialog类型框(即所选行被组织为一列)。

即使是教程的链接也可以。

我已经浏览了互联网,但我认为我没有使用正确的关键字,因为我获得了很多右击选项。

如果这不可能,还有其他建议如何做到这一点?

3 个答案:

答案 0 :(得分:2)

您可以使用以下ListSelectionListener

final JTable dialogTable =new JTable();     
table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
        @Override
        public void valueChanged(ListSelectionEvent event) {
            int selectedRow = table.getSelectedRow();
            if (selectedRow > -1) {
                int columnCount = table.getModel().getColumnCount();
                Object[] column = new Object[]{"Row "+(selectedRow+1)};
                Object[][] data = new Object[columnCount][1];
                for (int i = 0; i < columnCount; i++) {
                    Object obj = table.getModel().getValueAt(selectedRow, i);
                    data[i][0] = obj;
                }
                dialogTable.setModel(new DefaultTableModel(data, column));                  
                JOptionPane.showMessageDialog(null, new JScrollPane(dialogTable));
            }
        }
});

这将显示一个消息对话框,其中包含JTable,其中包含从所选行派生的数据。希望这对你有所帮助。

答案 1 :(得分:2)

  

我想要显示行中的所有值,每个值都在他们的单元格中,垂直组织 - 这就是我在'列中'的含义。

这应该是问题,而不是评论。

没有默认功能,但你可以自己动手。

您可以创建一个JPanel(可能使用GridBagLayout),一行中有两个标签来表示表格所选行的列中的数据。

对于第一个标签中的数据,您将使用TableModel的getColumnName(...)方法。

对于第二个标签中的数据,您将使用TableModel的getValueAt(...)方法。

另一种选择是简单地显示单元格的工具提示。有关详细信息,请参阅Specifying ToolTips For Cells上的Swing教程中的部分。

答案 2 :(得分:2)

here所示,JOptionPane工厂方法将显示Object参数中传递的message。如果message是一列JTable,您可以回收应用于原始表格的任何自定义renderers and editors

概括地说,

  • 在您的表格中添加ListSelectionListener并获取selectedRow

  • 遍历表格模型并构建newModel,其行是selectedRow的列。

  • 创建JTable newTable = new JTable(newModel)

  • 应用任何非默认的渲染器和编辑器。

  • new JScrollPane(newTable)作为message参数传递给您选择的JOptionPane方法。

从这个example开始,以下监听器显示如图所示的对话框。

image

table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
    @Override
    public void valueChanged(ListSelectionEvent e) {
        int selectedRow = table.convertRowIndexToModel(table.getSelectedRow());
        if (selectedRow > -1) {
            DefaultTableModel newModel = new DefaultTableModel();
            String rowName = "Row: " + selectedRow;
            newModel.setColumnIdentifiers(new Object[]{rowName});
            for (int i = 0; i < model.getColumnCount(); i++) {
                newModel.addRow(new Object[]{model.getValueAt(selectedRow, i)});
            }
            JTable newTable = new JTable(newModel) {
                @Override
                public Dimension getPreferredScrollableViewportSize() {
                    return new Dimension(140, 240);
                }
            };
            // Apply any custom renderers and editors
            JOptionPane.showMessageDialog(f, new JScrollPane(newTable),
                rowName, JOptionPane.PLAIN_MESSAGE);
        }
    }
});