2014-06-25 37 views
0

我正在進行「各種」任務而不是學校作業。話雖如此,任何想法都會很棒。JPanels似乎要離開框架?

我在Eclipse中使用WindowBuilder並創建了一個基本窗體。我在邊界佈局上使用了嵌套的JPanel組件來創建它。出於某種原因,面板看起來好像溢出了JFrame的邊緣。我將框架尺寸設置爲(500,400),面板尺寸不同,但不超過400寬。

代碼:

package SwingAssignment; 

import java.awt.Dimension; 
import java.awt.EventQueue; 

import javax.swing.JFrame; 

import com.jgoodies.forms.layout.FormLayout; 
import com.jgoodies.forms.layout.ColumnSpec; 
import com.jgoodies.forms.layout.RowSpec; 

import java.awt.GridBagLayout; 

import javax.swing.BoxLayout; 

import net.miginfocom.swing.MigLayout; 

import java.awt.BorderLayout; 

import javax.swing.JPanel; 

import java.awt.FlowLayout; 

import javax.swing.BorderFactory; 
import javax.swing.JComboBox; 
import javax.swing.JTextField; 
import javax.swing.JTextArea; 

import java.awt.Component; 
import java.awt.GridBagConstraints; 
import java.awt.Insets; 

import com.jgoodies.forms.factories.FormFactory; 

import java.awt.GridLayout; 

import javax.swing.JLabel; 
import javax.swing.border.BevelBorder; 
import javax.swing.SwingConstants; 

public class Swing_Assignemnt { 

    private JFrame frmWindowBuilderAssignment; 
    private JPanel Center_Panel; 
    private JTextArea textArea; 
    private JPanel panel_1; 
    private JPanel panel; 
    private JTextField textField; 
    private JPanel panel_2; 
    private JTextArea txtrTextarea_0; 
    private JTextArea txtrTextarea_1; 
    private JPanel panel_3; 
    private JTextArea txtrTextareasouth; 
    private JLabel lblNewLabel; 

    /** 
    * Launch the application. 
    */ 
    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        Swing_Assignemnt window = new Swing_Assignemnt(); 
        window.frmWindowBuilderAssignment.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    /** 
    * Create the application. 
    */ 
    public Swing_Assignemnt() { 
     initialize(); 
    } 

    /** 
    * Initialize the contents of the frame. 
    */ 
    private void initialize() { 
     frmWindowBuilderAssignment = new JFrame(); 
     frmWindowBuilderAssignment.setTitle("Window Builder Assignment"); 
     //frmWindowBuilderAssignment.setBounds(500, 500, 650, 600); 
     frmWindowBuilderAssignment.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frmWindowBuilderAssignment.getContentPane().setLayout(new BorderLayout(0, 0)); 
     frmWindowBuilderAssignment.setVisible(true); 
     frmWindowBuilderAssignment.setSize(394, 500); 
     panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); 
     //frmWindowBuilderAssignment.pack(); 
     //frmWindowBuilderAssignment.pack(); 
     frmWindowBuilderAssignment.setVisible(true); 

     panel = new JPanel(); 
     panel.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null)); 
     frmWindowBuilderAssignment.getContentPane().add(panel, BorderLayout.NORTH); 
     panel.setPreferredSize(new Dimension(200, 40)); 
     panel.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 5)); 
     //panel.setBounds(20, 10, 200, 400); 
     panel.setVisible(true); 

     JComboBox comboBox = new JComboBox(); 
     panel.add(comboBox); 
     comboBox.setPreferredSize(new Dimension(125, 20)); 
     comboBox.setVisible(true); 

     textField = new JTextField(); 
     panel.add(textField); 
     textField.setColumns(10); 
     textField.setVisible(true); 

     panel_2 = new JPanel(); 
     panel_2.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null)); 
     frmWindowBuilderAssignment.getContentPane().add(panel_2, BorderLayout.CENTER); 
     panel_2.setLayout(new GridLayout(1, 2, 2, 2)); 
     panel_2.setPreferredSize(new Dimension(200, 400)); 
     panel_2.setVisible(true); 


     txtrTextarea_0 = new JTextArea(); 
     txtrTextarea_0.setText("textArea_0"); 
     panel_2.add(txtrTextarea_0); 
     txtrTextarea_0.setPreferredSize(new Dimension(50, 30)); 
     txtrTextarea_0.setVisible(true); 

     txtrTextarea_1 = new JTextArea(); 
     txtrTextarea_1.setText("textArea_1"); 
     panel_2.add(txtrTextarea_1); 
     txtrTextarea_1.setVisible(true); 
     txtrTextarea_1.setPreferredSize(new Dimension(50, 30)); 

     panel_3 = new JPanel(); 
     panel_3.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null)); 
     frmWindowBuilderAssignment.getContentPane().add(panel_3, BorderLayout.SOUTH); 
     panel_3.setLayout(new GridLayout(2, 1, 2, 2)); 
     panel_3.setVisible(true); 

     txtrTextareasouth = new JTextArea(); 
     txtrTextareasouth.setText("textArea_South"); 
     panel_3.add(txtrTextareasouth); 
     txtrTextareasouth.setVisible(true); 
     txtrTextareasouth.setPreferredSize(new Dimension(200, 150)); 

     lblNewLabel = new JLabel("Status Label"); 
     panel_3.add(lblNewLabel); 
     lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER); 
     lblNewLabel.setPreferredSize(new Dimension(200, 20)); 




    } 
} 

它看起來像什麼:

Window Screen Shot

一些代碼更改後,這是我現在,我不知道如何在調整標籤底部。它只需要大約15個身高。

enter image description here

+0

哦! Mac OS 10.10優勝美地!但Swing沒有跟上新的外觀和感覺。 – tbodt

回答

3

請勿使用setBounds()或setPreferredSize()。每個Swing組件都應確定自己的首選大小,然後佈局管理器將根據佈局管理器的規則定位組件。

不要在所有Swing組件(JFrame除外)中使用setVisible(true)。默認情況下,Swing組件是可見的。

您應該添加的所有成分的框架使用前:

frame.pack() 
frame.setVisible(true); 
0

嘗試使用

frmWindowBuilderAssignment.pack(); 

在你的初始化方法結束。

這將您的所有組件設置爲其首選大小並調整框架。