簡體   English   中英

JPanels似乎脫離框架了?

[英]JPanels appear to go off the frame?

我正在做“各種各樣的”作業,而不是學校的作業。 話雖如此,任何想法都會很棒。

我在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));




    }
}

看起來像什么:

窗口屏幕截圖

更改一些代碼后,這就是我現在所擁有的,我不確定如何在底部調整標簽的大小。 它只需要大約15高。

在此處輸入圖片說明

不要使用setBounds()或setPreferredSize()。 每個Swing組件應確定其自己的首選大小,然后布局管理器將根據布局管理器的規則定位組件。

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

使用之前,應將所有組件添加到框架中:

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

嘗試使用

frmWindowBuilderAssignment.pack();

在初始化方法的末尾。

這會將所有組件設置為首選大小並調整框架。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM