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

我有一个jtable。

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

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

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

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

如此处所示, JOptionPane工厂方法将显示message参数中传递的Object 。 如果该message是一列JTable ,则可以回收应用于原始表的任何自定义呈现器和编辑器 。

概括地说,

  • ListSelectionListener添加到表中并获取selectedRow

  • 遍历表的模型并构造一个newModel其行是selectedRow的列。

  • 创建一个JTable newTable = new JTable(newModel)

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

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

从此示例开始,以下侦听器显示图示的对话框。

图片

 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); } } }); 

我希望显示行中的所有值,每个值都在它们的单元格中,垂直组织 – 这就是我在’列中’的含义。

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

这没有默认function,但您可以自己完成。

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

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

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

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

您可以使用以下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 ,其中包含从所选行派生的数据。 希望这对你有所帮助。