2012-11-03 93 views
1

我希望表格的寬度與框架的寬度相同,當我調整框架的大小時,表格也需要調整大小。 setSize()JTable無法正常工作。你可以幫我嗎?在JScrollPane和JPanel中設置JTable的大小和JFrame的大小

import java.awt.Color; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.SwingUtilities; 

public class Main extends JFrame { 

    public Main() { 
     setSize(400, 600); 
     String[] columnNames = {"A", "B", "C"}; 
     Object[][] data = { 
      {"Moni", "adsad", 2}, 
      {"Jhon", "ewrewr", 4}, 
      {"Max", "zxczxc", 6} 
     }; 

     JTable table = new JTable(data, columnNames); 
     JScrollPane tableSP = new JScrollPane(table); 

     int A = this.getWidth(); 
     int B = this.getHeight(); 

     table.setSize(A, B); 
     JPanel tablePanel = new JPanel(); 
     tablePanel.add(tableSP); 
     tablePanel.setBackground(Color.red); 

     add(tablePanel); 
     setTitle("Marks"); 

     setLocationRelativeTo(null); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      public void run() { 
       Main ex = new Main(); 
       ex.setVisible(true); 
      } 
     }); 
    } 
} 
+0

首先的代碼:沒有必要添加JScrollPane中您的JPanel。第二:不要調用setSize();根本不需要打包();. –

+0

我感謝您可能希望閱讀[使用佈局管理器](http://docs.oracle.com/javase/tutorial/uiswing/layout/using.html) – MadProgrammer

回答

6

擺脫所有setSize電話。然後擺脫tablePanel,直接在tableSP處刪除JFrame的內容窗格。

一個JFrame的內容窗格默認有一個BorderLayout,並添加組件到BorderLayout#CENTER(這是默認的,當你只是使用add無約束)將確保組件佔用父容器的大小。

迅速調整你的代碼

public class Main extends JFrame { 

    public Main() { 
     String[] columnNames = {"A", "B", "C"}; 
     Object[][] data = { 
      {"Moni", "adsad", 2}, 
      {"Jhon", "ewrewr", 4}, 
      {"Max", "zxczxc", 6} 
     }; 

     JTable table = new JTable(data, columnNames); 
     JScrollPane tableSP = new JScrollPane(table); 
     tableSP.setPreferredSize(400, 600); 

     add(tableSP); 
     setTitle("Marks"); 

     setLocationRelativeTo(null); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     pack(); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      public void run() { 
       Main ex = new Main(); 
       ex.setVisible(true); 
      } 
     }); 
    } 
} 

小邊注:沒有理由延長JFrame。只需使用一個

+0

永遠不要爲JScrollpane中的JTable(例如)設置首選大小: - ) – mKorbel

+0

@mKorbel我設置了'JScrollPane'的首選大小。我認爲這是少數可以調用'setXXXSize'的有效用例之一。如何確定它的大小,而不是開始顯示滾動條? – Robin

1

作爲替代,使用GridLayout爲您的tablePanelpack()封閉Window

import java.awt.Color; 
import java.awt.GridLayout; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.SwingUtilities; 

public class Main extends JFrame { 

    public Main() { 
     String[] columnNames = {"A", "B", "C"}; 
     Object[][] data = { 
      {"Moni", "adsad", 2}, 
      {"Jhon", "ewrewr", 4}, 
      {"Max", "zxczxc", 6} 
     }; 

     JTable table = new JTable(data, columnNames); 
     JScrollPane tableSP = new JScrollPane(table); 

     int A = this.getWidth(); 
     int B = this.getHeight(); 

     table.setSize(A, B); 
     JPanel tablePanel = new JPanel(new GridLayout()); 
     tablePanel.add(tableSP); 
     tablePanel.setBackground(Color.red); 

     add(tablePanel); 
     setTitle("Marks"); 

     setLocationRelativeTo(null); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     pack(); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      public void run() { 
       Main ex = new Main(); 
       ex.setVisible(true); 
      } 
     }); 
    } 
} 
1

這裏有一個答案:

import java.awt.Color; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.SwingUtilities; 
import javax.swing.table.DefaultTableModel; 

public class Main extends JFrame { 
    JTable table = new JTable(); 
    DefaultTableModel model = new DefaultTableModel(new Object[][]{},new String[]{"A","B","C"}); 
    public Main() { 
     super("Mark"); 
     table.setModel(model); 
     add(new JScrollPane(table)); 

    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      public void run() { 
       Main ex = new Main(); 
       ex.setDefaultCloseOperation(EXIT_ON_CLOSE); 
       ex.setLocationByPlatform(true); 
       ex.pack(); 
       ex.setVisible(true); 
      } 
     }); 
    } 
} 

很簡單,但相同的。 :)

11

具有看看

table.setPreferredScrollableViewportSize(table.getPreferredSize()); 
table.setFillsViewportHeight(true); 

這裏爲你發佈