2012-08-02 2 views
0

의 크기 스트레칭,하지만 난 스크롤을 채우기 위해 프레임을 스트레칭으로는 JTable의 스트레칭하지 않습니다JTable는, 다음과 같은 구성 요소가 나중에 JFrame의 추가됩니다 ScrollPane에

public class TableView extends JPanel { 

    public TableView(TableModel model) { 

    JTable table = new JTable(model) { 
     @Override 
     public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { 
      Component c = super.prepareRenderer(renderer, row, column); 
      TradeTableModel model = (TradeTableModel) getModel(); 
      if ((Boolean) model.getValueAt(row, model.findColumn("Select"))) { 
       Side s = (Side) model.getValueAt(row, model.findColumn("Side")); 
       if (s == Side.BUY) 
        c.setBackground(Color.BLUE); 
       else 
        c.setBackground(Color.red); 
      } else { 
       c.setBackground(Color.white); 
      } 
      return c; 
     } 
    }; 
    table.setPreferredScrollableViewportSize(new Dimension(500, 70)); 
    table.setFillsViewportHeight(true); 
    JScrollPane scrollPane = new JScrollPane(table); 
    add(scrollPane); 
    } 

} 

내가 추가 :

super(new GridLayout(1, 0)); 

그리고 문제가 해결되었습니다. 하지만 레이아웃이 필요한 이유는 무엇입니까? super()를 호출 할 때 인스턴스화되는 기본 레이아웃이 없습니까? 나는 단순히 첫 번째 버전

편집에 스크롤 창의 크기에 스트레칭 표를 중지 알고 싶어 : 고정 코드 만 형식으로 만 제출 텍스트를 추가해야합니다/

+1

레이아웃은 구성 요소를 상위 구성 요소의 크기만큼 늘립니다. 크기 또는 레이아웃이 설정되어 있지 않은 경우, JScrollPane는 항상 최소 크기로 축소됩니다. – Stephan

답변

2

super()를 호출 할 때 인스턴스화되는 단순히 기본 레이아웃이 없습니까?

거기 있고 FlowLayout입니다 (JPanel 생성자 javadoc 또는 소스에서 직접 볼 수 있습니다). FlowLayout는 구성 요소에 기본 크기를 제공하고 확장하지 않습니다.

GridLayout 대신 BorderLayout을 사용하여 CENTER에 추가 할 수도 있습니다.

1

시도가 추가

table.setAutoResizeMode (JTable.AUTO_RESIZE_OFF) 당신의 조각에

스크롤 창에 JTable의 인스턴스를 추가하기 전에.