2015-01-30 4 views
1

JScrollPane의 테두리 헤더를 삭제하는 방법은 있습니까? 여기 JScrollPane의 테두리를 삭제하는 방법

내가 null로 경계를 설정하는 것을 비롯하여 같은 헤더 테두리를 제거하는 여러 가지 방법을 시도 Remove the ugly inside header border

내 JScrollPane의 헤더 국경의 그림,하지만 성공이다.

여기

JScrollPane scrollPane = new JScrollPane(); 
    scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 
    scrollPane.getVerticalScrollBar().setUI(new CustomJScrollBar()); 
    scrollPane.setViewportBorder(new EmptyBorder(0, 0, 0, 0)); 
    scrollPane.setBounds(105, 127, 1120, 540); 
    scrollPane.setBorder(new EmptyBorder(0, 0, 0, 0)); 
    scrollPane.getViewport().setBackground(Color.WHITE); 

    add(scrollPane); 
너무 감사합니다 ... JScrollPane의 경계를 설정하는 코드입니다!

답변

2

당신은 아마 기본 셀 헤더 렌더링을 확대 할 필요가, 예를 들면 : 다음

public class MyRenderer implements TableCellRenderer { 
    private TableCellRenderer parent; 
    private Border emptyBorder = BorderFactory.createEmptyBorder(); 

    private MyRenderer(TableCellRenderer parent) { 
     this.parent = parent; 
    } 

    @Override 
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
     JLabel headerLabel = (JLabel) parent.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 
     headerLabel.setBorder(emptyBorder); 
     return headerLabel; 
    } 
} 

, 당신은 함께 사용할 렌더러로이 설정합니다 : 스레드에서

JTable jt = <your table> 
JTableHeader tableHeader = jt.getTableHeader(); 
tableHeader.setDefaultRenderer(new MyRenderer(tableHeader.getDefaultRenderer())); 
+0

예외 "AWT- java.lang.ArrayIndexOutOfBoundsException : 그러한 자식 없음 : 0 \t at java.awt.Container.getComponent (알 수없는 소스) 오류 : (JTableHeader) scrollPane.getColumnHeader(). getComponent (0); – Minelava

+0

흠, JTable을 기본 구성 요소로 사용한다고 가정하고 있습니다.이 경우 렌더러를 직접 설정하는 것이 좋습니다. JTableHeader tableHeader = jt.getTableHeader(); tableHeader.setDefaultRenderer (new MyRenderer (tableHeader.getDefaultRenderer())); (대답 업데이트) – BarrySW19

+0

오, 세상에, 정말 고마워! :) – Minelava