2013-10-21 3 views
0

안녕하세요 저는 JAVA에 매우 익숙하며 GUI를 배울 때 익숙합니다. ScrollPane 및 JTable을 사용하여 JFrame을 만들었습니다. 위의 2 열을 늘리면 1 행 아래의 데이터가 표시되지 않습니다.JTable/JScroll 숨겨진 행 및 JTable

또한 JFram이 나타나면 창 크기를 다시 조정할 때까지 화면이 비어 있습니다.

import javax.swing.*; 
import javax.*; 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.border.Border; 
import javax.swing.JTable; 
import javax.swing.JScrollPane; 


public class Swing { 

public static void main (String[] args){ 
//ADD FRAME 
    Color LBlue = new Color(83,141,213);//RGB Light BLUE 

    JFrame frame = new JFrame("COLA"); 
    frame.setSize(950,350); 
    frame.setVisible(true); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //CLOSE 
    frame.getContentPane().setBackground(LBlue); //COLOR 
    frame.setLocationRelativeTo(null); //Center JFrame in the middle of screen 

//MENU Work 
    JMenuBar menubar = new JMenuBar(); 
    frame.setJMenuBar(menubar); 
    JMenu file = new JMenu ("File"); 
    menubar.add(file); 
    JMenuItem exit = new JMenuItem("Exit"); 
    file.add(exit); 

    class exitaction implements ActionListener{ //Action to call menu bar to close 
     public void actionPerformed (ActionEvent o){ 
      System.exit(0); 
     } 
    } 
    exit.addActionListener(new exitaction()); 
//GRID WORK 

    JPanel panel = new JPanel(new GridBagLayout()); 
    frame.getContentPane().add(panel, BorderLayout.NORTH); 
    GridBagConstraints c = new GridBagConstraints(); 
    panel.setBackground(LBlue); //Set Background of Panel 
    panel.setVisible(true); 


    String data[][] = {{"HEADER 1", "ABC"}, {"HEADER 1", "HEADER 1"}, {"HEADER  1", "GHI" },  {"HEADER 1", "GHI" }}; 
    String col[] = {"", "NAMES", "NAMES", }; 
    JTable table = new JTable(data, col); 
    table.setBackground(Color.GRAY); 
    table.setFont(new Font("Arial", Font.BOLD, 12)); 
    table.setVisible(true); 

    JScrollPane scroll =new JScrollPane(table); 
    c.gridx = 1; 
    c.gridy = 1;  
    scroll.setPreferredSize(new Dimension(900,115)); 
    panel.add(scroll); 

    table.revalidate(); 
    table.validate(); 
    table.repaint(); 
    table.setVisible(true); 

    scroll.invalidate(); 
    scroll.validate(); 
    scroll.repaint(); 
    table.setVisible(true); 

    frame.setVisible(true); 

} 

도움 주셔서 감사합니다!

+0

무관 : [setXXSize를 사용하지 않는, 이제까지] (http://stackoverflow.com/a/7229519/203657) 에 http : // 유래 누락 된 데이터를 추가합니다 .com/a/7229519/203657 – kleopatra

답변

1

당신의 코드는 스택 트레이스 문제의 좋은 지표입니다

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2 
    at javax.swing.JTable$1.getValueAt(JTable.java:689) 
    at javax.swing.JTable.getValueAt(JTable.java:2720) 

을 생산하고 있습니다. 즉, 데이터 열의 수는 열 식별자의 수와 일치해야합니다.

String data[][] = { 
    { "NEWDATA", "HEADER 1", "ABC" }, { "NEWDATA", "HEADER 1", "HEADER 1" }, 
    { "NEWDATA", "HEADER  1", "GHI" }, { "NEWDATA", "HEADER 1", "GHI" }, 
}; 

읽기 : How to Use Tables

+0

고맙습니다. 그런 것처럼 보입니다. 다른 열을 비워 두면서 제목을 채울 필요가있을 때까지 제목을 설정하는 방법이 있습니까? 아니면 최소한 ""미리 채워야합니까? – Dinnin

+0

미리 채울 필요가 없습니다. 동적으로 항목을 테이블에 추가하는 것처럼 들립니다. 추가 된 링크에서'TableModel' 사용에 대해 살펴보십시오. – Reimeus