Swing - JTable JScrollPane删除底部边框或添加标题边框

时间:2016-08-01 14:42:45

标签: java swing jtable jscrollpane

我有一个带有jscrollpane的动态创建的jtable。我正在努力解决边界问题。如果我指定一个边框,我会在没有表格数据的区域周围找到边框。如果我在滚动窗格中创建空边框,我会得到所需的边框,但标题周围的边框不在那里。我将包括两张照片,以便您可以看到问题。

左边和下边框不应该在那里。

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数据的bottom,right,left部分,我该怎么办?谢谢你的帮助。无论我做什么,它似乎都不是我所需要的。

2 个答案:

答案 0 :(得分:4)

  

如何添加标题边框

您可以将MatteBorder添加到表头。只需指定组件3面的边框即可。

您可以从表格中获取表格标题

另一种选择可能是覆盖JTable的getPreferredScrollableViewportSize()方法。然后,您可以控制滚动窗格的大小。

答案 1 :(得分:0)

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