2016-08-01 4 views
2

У меня динамически созданная jtable с jscrollpane. Я пытаюсь решить проблему границы. Если я укажу границу, я получаю границу вокруг области, где нет данных таблицы. Если я создаю пустую рамку в scrollpane, я получаю желаемую границу, но границы вокруг заголовков там нет. Я буду включать два фото, чтобы вы могли видеть проблему.Swing - JTable JScrollPane удалить нижнюю границу или добавить границу заголовка

Левой и нижней границы не должно быть.

enter image description here

Это правильно, но граница на заголовок отсутствует. enter image description here

Я буду включать соответствующий код.

Один класс

private void createPanels(JButton close, JButton mapButton){ 

    JPanel mainPanel = new JPanel(); 
    mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS)); 
    add(mainPanel); 
    setModal(true); 
    JPanel topPanel = new JPanel(new BorderLayout(0, 0)); 
    topPanel.setPreferredSize(new Dimension(400, 30)); 
    JLabel title = new JLabel("Mapping Flags"); 
    title.setFont(new Font("SansSerif", Font.PLAIN, 17)); 
    JPanel panelForTitle = new JPanel(new FlowLayout(FlowLayout.LEFT, 270, 30)); 
    panelForTitle.add(title); 
    mainPanel.add(panelForTitle); 
    mainPanel.add(topPanel); 

    JPanel tablePanel = new JPanel(new BorderLayout()); 
    tablePanel.setBorder(BorderFactory.createEmptyBorder(15, 25, 15, 25)); 
    tablePanel.add(spTable); 
    mainPanel.add(tablePanel); 
    JPanel bottom = new JPanel(new FlowLayout(FlowLayout.RIGHT, 5, 30)); 
    close.setPreferredSize(new Dimension(90,22)); 
    mapButton.setPreferredSize(new Dimension(90,22)); 
    bottom.add(close); 
    bottom.add(mapButton); 
    mainPanel.add(bottom); 
    bottom.setMaximumSize(new Dimension(600, 0)); 
    setTitle("Mapping Flags"); 
    setSize(new Dimension(650, 380)); 
    setResizable(false); 
    setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); 
    setLocationRelativeTo(null); 
    setVisible(true); 

} 

Другой класс

public void setMappingsTable(){ 

    dtm = new DefaultTableModel(new String[]{"Style ID", "Style", "Exact Match", "Carry Over", "OEM Temp"}, 0); 
    mappingsTable.setModel(dtm); 
    mappingsTable.setRowHeight(20); 
    mappingsTable.getColumnModel().getColumn(0).setPreferredWidth(75); 
    mappingsTable.getColumnModel().getColumn(1).setPreferredWidth(410); 
    mappingsTable.getColumnModel().getColumn(2).setPreferredWidth(130); 
    mappingsTable.getColumnModel().getColumn(3).setPreferredWidth(130); 
    mappingsTable.getColumnModel().getColumn(4).setPreferredWidth(130); 
    mappingsTable.setFont(new Font("SansSerif", Font.PLAIN, 12)); 
    mappingsTable.setBackground(Color.WHITE); 
    Color color = mappingsTable.getGridColor(); 
    // mappingsTable.setBorder(new MatteBorder(0, 0, 0, 0, color)); 
    mappingsTable.setBorder(BorderFactory.createLineBorder(Color.RED,1)); 
    addDataToTable(); 
} 

public JScrollPane setScrollPane(JTable mappingsTable){ 

    spTable = new JScrollPane(mappingsTable); 
    spTable.setBounds(45, 230, 700, 300); 
    // spTable.setBorder(BorderFactory.createEmptyBorder()); 
    return spTable; 

} 

Что я могу сделать, либо добавить в границы заголовка или удалить снизу, справа, слева участки, которые не являются частью данных JScrollPane ? Спасибо за любую помощь. Кажется, что бы я ни делал все, что мне нужно.

ответ

4

Что я могу сделать, либо добавить в границах заголовка

Вы можете добавить к Границе с рисунком заголовка таблицы. Просто укажите границу для трех сторон компонента.

Вы можете получить заголовок таблицы из таблицы

Другим вариантом может быть, чтобы переопределить getPreferredScrollableViewportSize() метод JTable. Затем вы можете контролировать размер прокрутки.

+0

Я хотел бы просто добавить границу в заголовок, но я не уверен, как это сделать. – Steller

+0

@Steller, я просто рассказал вам, как это сделать. Есть два шага: 1) получить заголовок таблицы из таблицы. 2) добавьте MatteBorder в заголовок. На каком этапе вы не понимаете? – camickr

+0

Я понял, спасибо! – Steller

0
JTableHeader header = yourTable.getTableHeader(); 
header.setBorder(new LineBorder(Color.decode("#006699"),2));