`
abian
  • 浏览: 9791 次
社区版块
存档分类
最新评论

How to change JTable header height? 设置JTableHeader 高度的正确方式

阅读更多

 1-设置 JTable header height错误方式

  table.getTableHeader().setPreferredSize(new Dimension(10,10)); 

 

  为什么是错误的?请看截图

  当拖动列的时候 错误就出现了?表头和列错乱了.而国内清一色的采用上一种错误方式

 

enter image description here

 

2 正确的解决方式:

我们公司大神 坤哥在http://stackoverflow.com/ 找到的解决方案:

http://stackoverflow.com/questions/11686535/how-to-change-jtable-header-height

 

import java.awt.*;
import java.awt.event.*;
import java.util.List;
import java.util.Arrays;
import javax.swing.*;
import javax.swing.table.*;

public class TableHeaderHeightTest {
  private static int HEADER_HEIGHT = 32;
  private JTable makeTable() {
    JTable table = new JTable(new DefaultTableModel(2, 20));
    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    return table;
  }
  public JComponent makeUI() {
    JPanel p = new JPanel(new GridLayout(2,1));

    JTable table1 = makeTable();
    //Bad: >>>>
    JTableHeader header = table1.getTableHeader();
    //Dimension d = header.getPreferredSize();
    //d.height = HEADER_HEIGHT;
    //header.setPreferredSize(d); //addColumn case test
    header.setPreferredSize(new Dimension(100, HEADER_HEIGHT));
    p.add(makeTitledPanel("Bad: JTableHeader#setPreferredSize(...)", new JScrollPane(table1)));
    //<<<<

    JTable table2 = makeTable();
    JScrollPane scroll = new JScrollPane(table2);
    scroll.setColumnHeader(new JViewport() {
      @Override public Dimension getPreferredSize() {
        Dimension d = super.getPreferredSize();
        d.height = HEADER_HEIGHT;
        return d;
      }
    });
//         //or
//         table2.setTableHeader(new JTableHeader(table2.getColumnModel()) {
//             @Override public Dimension getPreferredSize() {
//                 Dimension d = super.getPreferredSize();
//                 d.height = HEADER_HEIGHT;
//                 return d;
//             }
//         });
    p.add(makeTitledPanel("Override getPreferredSize()", scroll));

    final List<JTable> list = Arrays.asList(table1, table2);

    JPanel panel = new JPanel(new BorderLayout());
    panel.add(p);
    panel.add(new JButton(new AbstractAction("addColumn") {
      @Override public void actionPerformed(ActionEvent e) {
        for(JTable t: list) {
          t.getColumnModel().addColumn(new TableColumn());
          JTableHeader h = t.getTableHeader();
          Dimension d = h.getPreferredSize();
          System.out.println(d);
        }
      }
    }), BorderLayout.SOUTH);
    panel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
    return panel;
  }
  private static JComponent makeTitledPanel(String title, JComponent c) {
    JPanel p = new JPanel(new BorderLayout());
    p.add(c);
    p.setBorder(BorderFactory.createTitledBorder(title));
    return p;
  }
  public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
      @Override public void run() {
        createAndShowGUI();
      }
    });
  }
  public static void createAndShowGUI() {
    JFrame f = new JFrame();
    f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    f.getContentPane().add(new TableHeaderHeightTest().makeUI());
    f.setSize(320, 320);
    f.setLocationRelativeTo(null);
    f.setVisible(true);
  }
}

 

分享到:
评论

相关推荐

    JTable添加CheckBox

    在Java Swing中,`JTable` 是用于展示二维数据的组件,它允许用户查看和编辑数据。本示例探讨如何在`JTable`中添加`CheckBox`,并实现表头的`JCheckBox`全选联动功能。这在需要用户进行多选操作的界面中非常常见,...

    TableCellRenderer的用法(JTable单元格背景颜色设置)

    实现设置JTable中某些单元格的背景色

    JTable表头排序的两种方法

    3. **设置RowSorter到JTable**:将`RowSorter`设置到`JTable`上,`JTable`会自动处理排序逻辑。 ```java JTable table = new JTable(new DefaultTableModel()); table.setAutoCreateRowSorter(true); ...

    java Jtable 经典列设置+表格颜色.docx

    ### Java Swing JTable 经典列设置与表格颜色设置详解 #### 一、概述 本文档将详细介绍如何在Java Swing框架下使用`JTable`组件进行经典列设置以及表格颜色的自定义设置,并通过一个实际的例子展示如何实现这些...

    JTable数据模型设置与数据库综合

    ### JTable数据模型设置与数据库综合应用解析 #### 一、引言 本文档主要介绍如何在Java应用程序中使用`JTable`组件结合SQL Server 2000数据库进行数据展示与管理。通过构建自定义的数据模型(`TableModel`),可以...

    复杂JTable(复杂表头、跨行列表体)

    可以创建多个`JTableHeader`实例,并通过设置`JTable`的`columnModel`属性来调整列的布局。同时,自定义的渲染器可以帮助我们在表头中显示多层次的信息。 **2. 跨行列表体** 跨行列表体通常涉及到单元格合并,这在...

    Java中JTable的用法.doc

    JTable的标题可以通过`JTableHeader`进行定制。默认情况下,用户可以拖动标题来重新排列列。允许或禁止这一行为,可以通过`table.getTableHeader().setReorderingAllowed(false)`来设置。 此外,JTable还支持数据的...

    netbeans jtable 复杂表头的实现方法

    同时,需要确保在`JTableHeader`的`resizeMode`设置为`TableHeader.RESIZE_MODE_NONE`,以防止用户意外地改变列宽。 5. **示例代码**: ```java JTable table = new JTable(); JTableHeader header = table....

    java 中 Jtable的用法

    `JTableHeader`类用于管理和定制JTable的标题栏。通过该类可以实现标题栏的重排、禁用拖拽等功能。 ```java table.getTableHeader().setReorderingAllowed(false); // 禁止重新排列标题栏 table.getTableHeader()....

    JTable自动换行

    在Java的Swing库中,`JTable`是用于创建二维数据展示的组件,它类似于电子表格。在处理`JTable`时,我们有时需要使其单元格内容支持自动换行,以便更好地显示长文本。标题“JTable自动换行”正是指向这个功能,即...

    JTable的使用收藏

    1.设置表格的宽度和高度 2.要显示表头 3.新加列,将列设为下拉框 4.表格排序 3. JTable事件响应和项目设想 4.一个游戏:《java连连看》 1.需求分析 2.编写TableModel和界面实现 3.连连看事件监听 总结和任务

    JTable使用 JTable使用

    JTable使用 JTable使用JTable使用JTable使用

    JTable颜色渲染代码

    - **行高设置**:`table.setRowHeight(20)`用于设置表格的行高。 - **列宽设置**:通过循环遍历所有的列,并使用`table.getColumnModel().getColumn(i).setPreferredWidth(width)`来设置每一列的推荐宽度。 - **监听...

    Swing JTable组件设置单元格合并

    Swing JTable组件设置单元格合并,内置Test测试类,核心API GridBagTable tasktable = new GridBagTable(model); tasktable.mergeCells(startRow, endRow, 0, 0);

    java设置表格的高度宽度.doc

    在 JTable 中,可以使用 `setRowHeight(int rowHeight)` 方法来设置表格的高度。这个方法可以设置指定行的高度。例如: ```java table1.setRowHeight(30); ``` 这将设置表格的高度为 30 像素。 设置表格的宽度 ...

    JTable合并单元格

    当`JTable`需要获取数据时,`TableModel`可以根据这个信息返回正确的值。 3. **设置`JTable`的行头和列头**: 如果你需要合并行头或列头,`JTableHeader`提供了`setResizingModel`和`setHeaderView`方法,你可以...

    JTable

    JTable的显示效果

    Java Swing高级空件JTable的用法

    JTable组件可以通过设置表格的宽度和高度、显示表头、添加列、设置列的下拉框等方式进行美化。这些设置可以通过JTable的API来实现。 5. JTable事件响应 JTable组件提供了多种事件响应机制,例如选中单元格、双击...

    Swing JTable 常用属性

    可以使用 `setRowHeight` 方法设置行高,例如:`table.setRowHeight(20);` 2. 设置当前行数 可以使用 `DefaultTableModel` 对象设置当前行数,例如: ``` DefaultTableModel tableModel = (DefaultTableModel)...

    JTable的介绍.doc

    `setPreferredScrollableViewportSize`方法被用来设置表格在滚动面板中的理想大小,这样可以确保表格在窗口中正确显示。`JScrollPane`被用来包裹`JTable`,提供滚动功能。`JFrame`的`contentPane`添加了`JScrollPane...

Global site tag (gtag.js) - Google Analytics