2008-09-23 4 views
1

자바 초보자는 여기에 있습니다. 나는 나의 netbeans 프로젝트에 추가 한 JFrame을 가지고 있고, JTable을 생성하는 다음 메소드를 추가했다. 문제는,이 메소드를 호출했을 때, JTable가 표시되지 않는 이유입니다. 어떤 제안?동적으로 추가 된 JTable이 표시되지 않습니다.

public void showFromVectors(Vector colNames, Vector data) {  
    jt = new javax.swing.JTable(data, colNames); 
    sp = new javax.swing.JScrollPane(jt); 
    //NB: "this" refers to my class DBGridForm, which extends JFrame 
    this.add(sp,java.awt.BorderLayout.CENTER); 
    this.setSize(640,480); 
} 

방법은 다음과 같은 상황에서 호출됩니다 DBReader.outMatchesTable()가

static public void outMatchesTable(DBGridForm gf) { 
    DBReader ddb = new DBReader(); 
    ddb.readMatchesTable(null); 
    gf.showFromVectors(ddb.lastRsltColNames, ddb.lastRsltData); 
} 

내 생각 엔 내가 뭔가를 내려다 해요한다으로 정의된다

DBGridForm gf = new DBGridForm(); //DBGridForm extends JFrame 
DBReader.outMatchesTable(gf); 
gf.setVisible(true); 

을 ... 내가 사용하고있는 스윙 클래스 나 Java에 관한 것. 어떤 아이디어?

답변

1

"this"는 귀하의 맥락에서 명확하지 않습니다. 애플릿 안에 있습니까? JFrame?

레이아웃 문제가있을 수 있습니다. 새 테두리 레이아웃을 사용하여 클래스에서 setLayout을 호출했는지 확인하십시오.

스윙 응용 프로그램에서는 버전에 따라 원시 추가() 대신 getRootContentPane(). add()를 사용하려고합니다. 최상위 컨텐츠를 추가하는 방법에 대한

자바 튜토리얼 : http://java.sun.com/docs/books/tutorial/uiswing/components/toplevel.html

+0

"this"는 JFrame을 확장하는 DBGridForm을 나타냅니다. 나는 내가 (말하자면) "넷빈으로 JFrame을 만들고, 다음과 같은 방법을 추가했다"고 말한 것이 분명하다고 생각했습니다. 내가 생각했던 것만 큼 명백하지 않은 것처럼 보입니다. – Graza

+0

"this.setLayout (new java.awt.BorderLayout());"을 호출하는 것이 좋습니다. 스크롤 창을 추가하기 전에 트릭을했습니다. netbeans에 의해 추가 된 기본 레이아웃이 뭔가 다른 것이어야한다고 생각합니다. 처음에는 netbeans를 사용한 경험이 있습니다. 이전의 모든 경험은 처음부터 일을하고있었습니다 ... – Graza

+0

기본 레이아웃은 flowlayout입니다. – davenpcj

0

당신이 이벤트 스레드에서 실행하지 않는 경우, 그것은 문제가 될 수 - I've는 원인 물건을 표시하지 않는 것이 본.

AWT 이벤트 (마우스 클릭, 버튼 누름 ...)에 대한 응답으로이 코드를 호출하면 문제가되지 않지만 앱을 시작한 스레드가 여전히 동일하거나이 코드가 실행 중일 경우 타이머, 아주 잘 수 있습니다.

+0

java 이벤트 스레드를 사용하여 사물을 비동기 적으로 실행할 수 있습니다. http://java.sun.com/products/jfc/tsc/articles/threads/threads1.html – davenpcj

관련 문제