2017-02-16 26 views

回答

2

我只是想出瞭如何根據所有包含的組件的大小總和來保證容器的大小,而不用硬編碼任何東西。

  1. 創建JPanel panel爲你的工作小組,而不是觸摸contentPane。只需將其添加回contentPane即可。 請勿觸摸contentPane,這是關鍵。

  2. 設置的panel佈局沒有硬編碼行高,列寬等,這可能會毀了佈局,因爲你的硬編碼的高度可能是更少或更多的它是必要的,留下錯誤的用一些大小線,並留下你的最後一行/列一半切斷。

  3. 將您的元素添加到panel。添加它們時,您可以指定尺寸。我們不需要設置contentPane的佈局。

  4. 最後,pack(),setVisible(true)如你所願。不需要setSize(),setBounds()MigLayout會自動處理插頁和間隙。中提琴!

甲SSCCE:

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 

import net.miginfocom.swing.MigLayout; 

public class InsetsAndBorder extends JFrame { 
    public InsetsAndBorder() { 
     begin(); 
    } 

    private void begin() { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JPanel panel = new JPanel(); 
     panel.setLayout(new MigLayout("insets 2 2 2 2, fillx, debug", "3[]3[]3[]3", "5[]5[]5[]5")); 

     JLabel label1 = new JLabel("1"); 
     JLabel label2 = new JLabel("2"); 

     JButton button = new JButton("No way!"); 

     panel.add(label1, "cell 1 2, grow"); 

     panel.add(label2, "cell 2 2, grow"); 

     panel.add(button, "cell 0 1, grow"); 

     getContentPane().add(panel); 
     pack(); 
     setLocationRelativeTo(null); 
     setVisible(true); 
    } 
    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       InsetsAndBorder frame = new InsetsAndBorder(); 

      } 

     }); 
    } 
} 
+0

1)注:SCCEE→SSCCE(短,獨立的,正確的,實施例)。一個小錯誤。 2)否則,答案中的所有內容都是很好的信息。 - 很高興你把事情解決了。 :) –

+1

謝謝,我從來沒有得到它的權利....感謝評論安德魯,美好的一天。 – FaithReaper

+2

*「我從來沒有說得對。」*當談到正確的縮寫時,我有一個不公平的優勢。我寫了文件。 ;) –

相關問題