- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在从 MySql
中提取数据库记录,我可以使用下面的方法来执行此操作
private void txt_clientNameKeyReleased(java.awt.event.KeyEvent evt) {
String sql = "Select client_id as 'Client ID', name_lastName as 'Full Name', case_number as 'Case #', hearing_date as 'Hearing Date', rtc_mtc as 'RTC/MTC', place as 'Place', status as 'Status', note as 'Notes', billing as 'Billed' from hearing_history where name_lastName like '%"+ txt_clientName.getText() +"%' ";
try{
if(conn==null){
conn = ConnectDB.ConDB();
}else{
conn = ConnectDB.ConDB();
}
pst = conn.prepareStatement(sql);
rs = pst.executeQuery();
jTable1.setModel(DbUtils.resultSetToTableModel(rs));
}catch(Exception e){
JOptionPane.showMessageDialog(null, e);
}finally {
close();
}
}
它工作正常,但我有一个列应该有多行或将单词换行以增加单元格的高度。
我现在使用 java swing 已有 4 个月了,但我还没有看到/遇到过按照我希望的方式操作 jtable
的高级技巧。
我搜索了该网站并找到了从此链接执行此操作的最短方法
Auto adjust the height of rows in a JTable
来自 camickr
private void updateRowHeights()
{
try
{
for (int row = 0; row < table.getRowCount(); row++)
{
int rowHeight = table.getRowHeight();
for (int column = 0; column < table.getColumnCount(); column++)
{
Component comp = table.prepareRenderer(table.getCellRenderer(row, column), row, column);
rowHeight = Math.max(rowHeight, comp.getPreferredSize().height);
}
table.setRowHeight(row, rowHeight);
}
}
catch(ClassCastException e) {}
}
我认为这确实是一个很好的代码,但我尝试了一下,发现高度从 16
(默认行高)增加到 20
,所以我仍然有单元格中的一行。
我在该行之后调用了这个方法
jTable1.setModel(DbUtils.resultSetToTableModel(rs));
updateRowHeights();
我将非常感谢任何帮助我走上正确的道路,使这项工作适合我..
提前致谢..
最佳答案
默认渲染器/编辑器不支持多行。您可以尝试使用自定义TableCellEditor
/TableCellRenderer
。使用表格单元格中的 JTextArea
检查下一个示例:
import java.awt.Component;
import javax.swing.AbstractCellEditor;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
public class TestFrame extends JFrame {
public TestFrame() {
init();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
private void init() {
JTable t = new JTable(new Object[][]{{"a\n\rb","1"},{"a\n\rb","2"}},new Object[]{1,2});
add(new JScrollPane(t));
t.getColumnModel().getColumn(0).setCellRenderer(new JTextAreaColumn());
t.getColumnModel().getColumn(0).setCellEditor(new JTextAreaColumn());
t.setRowHeight(50);
}
public static void main(String args[]) {
new TestFrame();
}
private class JTextAreaColumn extends AbstractCellEditor implements TableCellRenderer,TableCellEditor {
private JTextArea area = new JTextArea();
private JScrollPane pane = new JScrollPane(area);
@Override
public Object getCellEditorValue() {
return area.getText();
}
@Override
public Component getTableCellEditorComponent(JTable table,
Object value, boolean isSelected, int row, int column) {
area.setText(value == null ? "" : value.toString());
return pane;
}
private void setColor(boolean isSelected, JTable table) {
area.setBackground(isSelected ? table.getSelectionBackground() : table.getBackground());
area.setForeground(isSelected ? table.getSelectionForeground() : table.getForeground());
}
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
area.setText(value == null ? "" : value.toString());
setColor(isSelected,table);
return pane;
}
}
}
了解更多信息tutorial
编辑:
接下来尝试一下,似乎是你想要的;
import java.awt.Component;
import javax.swing.AbstractCellEditor;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.event.CellEditorListener;
import javax.swing.event.ChangeEvent;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
public class TestFrame extends JFrame {
private JTable t;
public TestFrame() {
init();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
private void init() {
t = new JTable(new Object[][]{{"a\n\rb","1"},{"a\n\rb\n\rb\n\rb\n\rb","2"}},new Object[]{1,2});
add(new JScrollPane(t));
t.getColumnModel().getColumn(0).setCellRenderer(new JTextAreaColumn());
JTextAreaColumn editor = new JTextAreaColumn();
editor.addCellEditorListener(getEditorListener());
t.getColumnModel().getColumn(0).setCellEditor(editor);
updateRowHeights(t);
}
private CellEditorListener getEditorListener() {
return new CellEditorListener() {
@Override
public void editingStopped(ChangeEvent e) {
updateRowHeights(t);
}
@Override
public void editingCanceled(ChangeEvent e) {
updateRowHeights(t);
}
};
}
private void updateRowHeights(JTable table) {
try {
for (int row = 0; row < table.getRowCount(); row++) {
int rowHeight = table.getRowHeight();
for (int column = 0; column < table.getColumnCount(); column++) {
Component comp = table.prepareRenderer(
table.getCellRenderer(row, column), row, column);
rowHeight = Math.max(rowHeight,
comp.getPreferredSize().height);
}
table.setRowHeight(row, rowHeight);
}
} catch (ClassCastException e) {
}
}
public static void main(String args[]) {
new TestFrame();
}
private class JTextAreaColumn extends AbstractCellEditor implements TableCellRenderer,TableCellEditor {
private JTextArea area = new JTextArea();
private JScrollPane pane = new JScrollPane(area);
@Override
public Object getCellEditorValue() {
return area.getText();
}
@Override
public Component getTableCellEditorComponent(JTable table,
Object value, boolean isSelected, int row, int column) {
area.setText(value == null ? "" : value.toString());
return pane;
}
private void setColor(boolean isSelected, JTable table) {
area.setBackground(isSelected ? table.getSelectionBackground() : table.getBackground());
area.setForeground(isSelected ? table.getSelectionForeground() : table.getForeground());
}
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
area.setText(value == null ? "" : value.toString());
setColor(isSelected,table);
return area;
}
}
}
关于java - 在 jtable 单元格中显示多行结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26450790/
猫f1.txt阿曼维沙尔阿杰贾伊维杰拉胡尔曼尼什肖比特批评塔夫林现在输出应该符合上面给定的条件 最佳答案 您可以在文件读取循环中设置一个计数器并打印它, 计数=0 读取行时做 让我们数一数++ if
我正在尝试查找文件 1 和文件 2 中的共同行。如果公共(public)行存在,我想写入文件 2 中的行,否则打印文件 1 中的非公共(public)行。fin1 和 fin2 是这里的文件句柄。它读
我有这个 SQL 脚本: CREATE TABLE `table_1` ( `IDTable_1` int(11) NOT NULL, PRIMARY KEY (`IDTable_1`) );
我有 512 行要插入到数据库中。我想知道提交多个插入内容是否比提交一个大插入内容有任何优势。例如 1x 512 行插入 -- INSERT INTO mydb.mytable (id, phonen
如何从用户中选择user_id,SUB(row, row - 1),其中user_id=@userid我的表用户,id 为 1、3、4、10、11、23...(不是++) --id---------u
我曾尝试四处寻找解决此问题的最佳方法,但我找不到此类问题的任何先前示例。 我正在构建一个基于超本地化的互联网购物中心,该区域分为大约 3000 个区域。每个区域包含大约 300 个项目。它们是相似的项
preg_match('|phpVersion = (.*)\n|',$wampConfFileContents,$result); $phpVersion = str_replace('"','',
我正在尝试创建一个正则表达式,使用“搜索并替换全部”删除 200 个 txt 文件的第一行和最后 10 行 我尝试 (\s*^(\h*\S.*)){10} 删除包含的前 10 行空白,但效果不佳。 最
下面的代码从数据库中获取我需要的信息,但没有打印出所有信息。首先,我知道它从表中获取了所有正确的信息,因为我已经在 sql Developer 中尝试过查询。 public static void m
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我试图在两个表中插入记录,但出现异常。您能帮我解决这个问题吗? 首先我尝试了下面的代码。 await _testRepository.InsertAsync(test); await _xyzRepo
这个基本的 bootstrap CSS 显示 1 行 4 列: Text Text Text
如果我想从表中检索前 10 行,我将使用以下代码: SELECT * FROM Persons LIMIT 10 我想知道的是如何检索前 10 个结果之后的 10 个结果。 如果我在下面执行这段代码,
今天我开始使用 JexcelApi 并遇到了这个:当您尝试从特定位置获取元素时,不是像您通常期望的那样使用sheet.getCell(row,col),而是使用sheet.getCell(col,ro
我正在尝试在我的网站上开发一个用户个人资料系统,其中包含用户之前发布的 3 个帖子。我可以让它选择前 3 条记录,但它只会显示其中一条。我是不是因为凌晨 2 点就想编码而变得愚蠢? query($q)
我在互联网上寻找答案,但找不到任何答案。 (我可能问错了?)我有一个看起来像这样的表: 我一直在使用查询: SELECT title, date, SUM(money) FROM payments W
我有以下查询,我想从数据库中获取 100 个项目,但 host_id 多次出现在 urls 表中,我想每个 host_id 从该表中最多获取 10 个唯一行。 select * from urls j
我的数据库表中有超过 500 行具有特定日期。 查询特定日期的行。 select * from msgtable where cdate='18/07/2012' 这将返回 500 行。 如何逐行查询
我想使用 sed 从某一行开始打印 n 行、跳过 n 行、打印 n 行等,直到文本文件结束。例如在第 4 行声明,打印 5-9,跳过 10-14,打印 15-19 等 来自文件 1 2 3 4 5 6
我目前正在执行验证过程来检查用户的旧密码,但问题是我无法理解为什么我的查询返回零行,而预期它有 1 行。另一件事是,即使我不将密码文本转换为 md5,哈希密码仍然得到正确的答案,但我不知道为什么会发生
我是一名优秀的程序员,十分优秀!