我有一个jtable。
某些单元格包含很长的字符串,并且尝试向左和向右滚动很难。我的问题是,是否可以在弹出式窗口中显示一行,例如showDialog类型框(即所选行被组织为一列)。
即使是教程的链接也可以。
我已经浏览了互联网,但我认为我没有使用正确的关键字,因为我获得了很多右击选项。
如果这不可能,还有其他建议如何做到这一点?
答案 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开始,以下监听器显示如图所示的对话框。
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);
}
}
});