2016-05-09 4 views
0

У меня есть следующие структуры в кадре:Java Swing изменить размер панели внутри ContentPanel

Frame-> ContentPane панельные> topPanel панельные> Таблица

Это код:

private JPanel contentPane; 
private JTable table; 
private JPanel topPanel; 

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

public ShowList() { 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 675, 433); 

    contentPane = new JPanel(); 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    setContentPane(contentPane); 
    contentPane.setLayout(null); 

    topPanel = new JPanel(); 
    topPanel.setBounds(76, 76, 491, 245); 
    contentPane.add(topPanel); 
    topPanel.setLayout(null); 

    table = new JTable(); 
    table.setBounds(0, 0, 491, 245); 
    topPanel.add(table); 
} 

То, что я хочу достичь, заключается в том, что когда я изменяю размер рамки, делая окно больше, topPanel и таблица, содержащаяся в этом параметре, также изменяются и не остаются прежними, как они были до изменения размера кадра. Я читал о макетах, но я не могу заставить его работать. Любое предложение?

+0

Почему вы вызываете ShowList() с новым ключевым словом? Это не класс и не метод. –

+0

Java GUI должны работать с различными ОС, размером экрана, разрешением экрана и т. Д., Используя разные PLAF в разных локалях. Таким образом, они не способствуют идеальной компоновке пикселей. Вместо этого используйте диспетчеры макетов или [их комбинации] (http://stackoverflow.com/a/5630271/418556), а также макет и границы для [пробела] (http://stackoverflow.com/a/17874718/ 418556). –

ответ

3

Используйте LayoutManager для управления размером и расположением компонентов внутри вашего фрейма. Избегайте установки диспетчера компоновки ваших панелей как null.

Я рекомендую вам взглянуть на эту ссылку: "A Visual Guide to Layout Managers", чтобы узнать больше о различных типах макетов, которые вы можете использовать.

В своем коде, например, я хотел бы использовать BorderLayout:

contentPane.setLayout(new BorderLayout()); 

...

contentPane.add(topPanel, BorderLayout.CENTER); 
topPanel.setLayout(new BorderLayout()); 

...

topPanel.add(table, BorderLayout.Center); 

Кстати, я полагаю, ваш класс ShowList extends JFrame, потому что методы, подобные setDefaultCloseOperation, дают вам ошибку, если нет, не так ли?

Надеюсь, это поможет.