2013-01-18 5 views
0

JScrollPaneJTable을 추가하고 스크롤 패널을 패널에 추가 한 다음 프레임에 패널을 추가하지만 여기서는 코드가 작동하지 않습니다. 사용자가 볼 수 있도록 테이블을 스크롤 할 수있게 해주는 테이블 또는 프레임에 스크롤 막대가 있어야합니다. 나는 많은 방법을 시도했지만 비는 나를 위해 일한 여기에 전체 코드는 다음을 수행 표 안에 스크롤하려면JScrollPane의 JTable

public class View extends JFrame { 

private static final long serialVersionUID = 1L; 

/** 
* Launch the application. 
*/ 
//here in the main method i it adds in the JFrame everything 

public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       View frame = new View(); 
       frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

public void showData() throws SQLException, ParseException { 

    panel = new JPanel(); 
    panel_1 = new JPanel(); 
    model_1 = new DefaultTableModel(); 
    model_2 = new DefaultTableModel(); 

    model_1.addColumn("Title"); 
    model_1.addColumn("Priority "); 
    model_1.addColumn("DeadLine"); 
    model_1.addColumn("Time"); 
    model_1.addColumn("Progress"); 

    model_2.addColumn("Task Title"); 
    model_2.addColumn("Priority "); 
    model_2.addColumn("DeadLine"); 
    model_2.addColumn("Time"); 
    model_2.addColumn("Done"); 

    Database obj = new Database(); 

    ArrayList<Task> list = obj.getTasks(); 
    for (int i = 0; i < list.size(); i++) { 

     Task task = list.get(i); 
     Object[] row = { task.title, task.priority, task.deadine, 
       task.time, task.progress }; 

     // Comparing Dates 

     Calendar currentDate = Calendar.getInstance(); 
     SimpleDateFormat formatter = new SimpleDateFormat("MM-d-yyyy"); 
     String dateNow = formatter.format(currentDate.getTime()); 

     java.util.Date systemDate = new SimpleDateFormat("MM-d-yyyy", 
       Locale.ENGLISH).parse(dateNow); 

     if (!task.deadine.before(systemDate)) { 
      // add row to to do tab 
      model_1.addRow(row); 
     } else { 
      // add row to done tab 
      model_2.addRow(row); 
     } 

     // ********************** 

    } 

    toDoTable = new JTable(model_1); 
    doneTable = new JTable(model_2); 
    toDoTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
    doneTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
    toDoTable.setFillsViewportHeight(true); 
    doneTable.setFillsViewportHeight(true); 

//here i add the JScrollPane and it doesnt work 

    JScrollPane jpane = new JScrollPane(toDoTable); 
    JScrollPane jpane1 = new JScrollPane(doneTable); 

    panel.add(jpane); 
    panel_1.add(jpane1); 
    panel.add(jpane); 
    panel_1.add(jpane1); 

} 
}  
+2

코드를 게시하십시오. 현재 게시 된 것은 괜찮은 것 같습니다. 패널을 기본 컨테이너에 어떻게 추가합니까? SSCCE? – StanislavL

+0

여기에서 ** panel.add (jpane); **이 패널을 JScrollPane에 추가하여 테이블이 스크롤되도록 ** add (새 JScrollPane (패널)) ** – Amarnath

답변

3

panel.add(jpane,BorderLayout.NORTH); 
    panel_1.add(jpane1,BorderLayout.SOUTH); 

전 BorderLayout를위한 적절한 레이아웃으로 패널을 추가하거나 사용할 수 javax.swing.Box

Box box = Box.createVerticalBox(); 
box.add(jpane); 
box.add(jpane1); 
frame.getContentPane().add(box); 
+0

JScrollPane을 보유하고있는 'JPanel'에 대한 테두리 레이아웃을 정의했지만 방향을 정의하지 않고 스크롤 창 구성 요소를 추가 한 경우에만 작동합니다. '.add' 함수에서 방향을 지키면 파손됩니다. 왜 몰라. – brandaemon

5

,

JScrollPane jpane = new JScrollPane(table); 

입니다하지만 당신은 스크롤로 테이블 자체를 원하는 경우 그런 다음 테이블을 잡고있는 패널을 JScrollPane에 추가하고 이것을 프레임에 추가하십시오.

public class JTableExample { 
    public static void main(String[] args) { 
    Object[] column = {"One", "Two"}; 
    Object[][] data = {{1, 2}, {3, 4}, {5, 6}}; 

    JTable toDoTable = new JTable(data, column); 
    JScrollPane jpane = new JScrollPane(toDoTable); 
    JPanel panel = new JPanel(); 
    JFrame frame = new JFrame(); 
    panel.add(jpane); 
    frame.add(new JScrollPane(panel)); 
    frame.setVisible(true); 
    } 
} 

출력 :

enter image description here

+0

여전히이 GUI를 만들기 위해 내가 윈도우 빌더를 사용하고 작동하지 않습니다와 주요 방법은 같은 그 ' 공공 정적 무효 메인 (문자열 []에 args) { \t \t EventQueue.invokeLater (새의 Runnable() { \t \t \t입니다 public void run() { \t \t \t \t { \t \t \t \t \t 프레임보기 = 새보기(); \t \t \t \t \t frame.setVisible (true); \t \t \t \t} 캐치 (예외 E) { \t \t \t \t \t e.printStackTrace(); \t \t \t \t \t} \t \t \t \t }}); \t}' – Waqas

+1

@PrinceVakas Firslty 스윙을 처음 접한다면 UI 빌더를 사용하는 대신 코드를 직접 작성하십시오. 전체 흐름을 보여주는 샘플 코드로 _post_를 업데이트 하시겠습니까? – Amarnath

+0

나는 Jtroll에 Jscroll bar를 추가 할 때 이미 JscrollPane을 추가 할 때의 문제를 이미 말한 것처럼 전체 클래스 – Waqas