2012-04-18 4 views
1

Я знаю, что расстояние между ячейками JTable довольно прямолинейно, как показано ниже;Интервал JTable header

int gapWidth = 10; 
int gapHeight = 5; 
table.setIntercellSpacing(new Dimension(gapWidth, gapHeight)); 

Интервал, как это, похоже, не влияет на заголовок таблиц. Есть ли способ разместить заголовок с тем же размером?

+0

это не ясно, что именно вы после (_alignment из заголовка и фактические значения ячеек строки выглядят неактивно off_ - не только слегка, заголовок центрирован :-) - лучше всего показать SSCCE, чтобы продемонстрировать проблему (как уже было предложено @mKorbel) – kleopatra

+0

Я делаю точно то же самое, что @mKorbel, единственное отличие в моем коде: я оценил два моих столбца. – Bitmap

+0

, но в его примере нет текста (это то, что вы после?) Выравнивания (между заголовком/ячейкой) вообще – kleopatra

ответ

1

Самый простой способ может быть установлен EmptyBorders to the JTableHeader внутри TableCellRenderer

Код выше делает мой интервал, но выравнивание заголовка и фактические значения строки ячейки выглядит slighly от - в результате разноса только размещены на но не заголовок.

Я добавил SSCCE (3mins 27seconds вкл. Загрузка здесь)

enter image description hereenter image description here

из кода

import java.awt.*; 
import javax.swing.*; 
import javax.swing.table.*; 

public class IntercellSpacingTableHeader { 

    private JFrame frame = new JFrame("Table Demo"); 
    private String[] columnNames = {"String", "Integer", "Float", "Double"}; 
    private Object[][] data = { 
     {"aaa", new Integer(12), new Float(12.15), new Double(100.05)}, 
     {"bbb", new Integer(5), new Float(7.154), new Double(6.1555)}, 
     {"CCC", new Integer(92), new Float(0.1135), new Double(3.1455)}, 
     {"ddd", new Integer(12), new Float(31.15), new Double(10.05)}, 
     {"eee", new Integer(5), new Float(5.154), new Double(16.1555)}, 
     {"fff", new Integer(92), new Float(4.1135), new Double(31.1455)}}; 
    private TableModel model = new DefaultTableModel(data, columnNames) { 

     private static final long serialVersionUID = 1L; 

     @Override 
     public Class<?> getColumnClass(int column) { 
      return getValueAt(0, column).getClass(); 
     } 
    }; 
    private JTable table = new JTable(model); 

    public IntercellSpacingTableHeader() { 
     int gapWidth = 10; 
     int gapHeight = 5; 
     table.setIntercellSpacing(new Dimension(gapWidth, gapHeight)); 
     table.setRowHeight(20); 
     table.setPreferredScrollableViewportSize(table.getPreferredSize()); 
     JScrollPane scroll = new JScrollPane(table); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(scroll); 
     frame.pack(); 
     frame.setLocation(150, 150); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new IntercellSpacingTableHeader(); 
      } 
     }); 
    } 
} 
+0

Я пробовал это, но требование здесь не принимает подход, если вы понимаете, что я имею в виду. – Bitmap

+1

@Bitmap У меня нет никаких проблем с этим, но, возможно, есть/есть еще одна проблема (ы), вы можете использовать связанный код для создания [SSCCE] (http://sscce.org/), может быть, кто-то .. .. – mKorbel

+0

Вышеприведенный код делает мой интервал, но выравнивание заголовка и фактических значений ячейки строки выглядит слабо - в результате интервала, размещенного только на ячейках, но не в заголовке. – Bitmap