GridBagLayout无法在JPanel内部工作*更新*

时间:2016-04-10 16:20:19

标签: java swing jpanel layout-manager gridbaglayout

第一篇文章,并试图尽可能地研究这个,但最终放弃并决定问。

我正在制作一个食谱书程序,在一个页面上它有食谱列表。选择配方时,它将在左侧显示为标签。问题是在我的页面上我有两个JPanels。一个托管食谱列表,另一个是显示信息的标签。在有标签的一方,我不能让他们移动,或改变或在JPanel内的任何东西。

我觉得这有一个简单的解决方案,但我太缺乏经验了。无论如何,谢谢你的帮助。

////表单面板类

    import java.awt.Dimension;
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.Insets;
    import javax.swing.BorderFactory;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;


    public class FormPanel extends JPanel {

private JScrollPane pane;
private JPanel pane2;

// viewing of information
private JLabel nameLabel1;
private JLabel nameLabel2;
private JLabel nameLabel3;


public FormPanel() {

    nameLabel1 = new JLabel("Label1");
    nameLabel2 = new JLabel("Recipe Name: ");
    nameLabel3 = new JLabel("Tag Lines: ");

    pane = new JScrollPane();
    pane2 = new JPanel();

    layoutComponents();

    pane.setPreferredSize(new Dimension(200, 450));
    pane2.setBorder(BorderFactory.createTitledBorder("Recipes"));
    pane2.setPreferredSize(new Dimension(375, 450));

}

public void layoutComponents() {
    setLayout(new GridBagLayout());

    GridBagConstraints gc = new GridBagConstraints();

    ///////////////////////////////////////
    // First Row
    gc.gridy = 0;

    gc.weightx = 1;
    gc.weighty = 1;

    gc.gridx = 1;

    gc.anchor = GridBagConstraints.FIRST_LINE_START;

    add(pane2, gc);
    ////////////////////////////////////////////

    ///////////////////////////////////////
    // First Row
    gc.gridy = 0;

    gc.weightx = 2;
    gc.weighty = 1;

    gc.gridx = 1;

    gc.anchor = GridBagConstraints.FIRST_LINE_END;
    gc.insets = new Insets(5, 5, 5, 5);
    add(pane, gc);
    ////////////////////////////////////////////

    GridBagConstraints gc2 = new GridBagConstraints();
    //

    gc2.gridy = 0;

    gc2.weightx = 1;
    gc2.weighty = 1;

    gc2.gridx = 0;

    gc2.fill = GridBagConstraints.PAGE_START;

    pane2.add(nameLabel2, gc2);

    ////////////////////////////////////////////
    gc2.gridy = 1;

    gc2.weightx = 1;
    gc2.weighty = 1;

    gc2.gridx = 0;

    gc2.fill = GridBagConstraints.CENTER;

    pane2.add(nameLabel3, gc2);

    ////////////////////////////////////////////
    gc2.gridy = 2;

    gc2.weightx = 1;
    gc2.weighty = 1;

    gc2.gridx = 0;

    gc2.fill = GridBagConstraints.SOUTH;

    pane2.add(nameLabel1, gc2);

}
}

//大型机类

import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JTabbedPane;

public class Mainframe extends JFrame {

private FormPanel formPanel;
private JTabbedPane tabPane;

public Mainframe() {
    super("My Digital Cookbook");

    setLayout(new BorderLayout());
    formPanel = new FormPanel();
    tabPane = new JTabbedPane();

    add(tabPane, BorderLayout.PAGE_START);

    tabPane.addTab("New Recipe", formPanel);

    setMinimumSize(new Dimension(500, 600));
    setSize(600, 600);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
}
}

//应用程序类

import javax.swing.SwingUtilities;

public class Application {
    public static void main(String[] args) {

        SwingUtilities.invokeLater(new Runnable() { 

            public void run(){
                            System.out.println(SwingUtilities.isEventDispatchThread());
                new Mainframe();

            }
        });

    }
}

较低的三个标签可能具有赢得权重以及不仅仅是因为试图让它们移动而且它们都只是保持在Jpanel顶部附近的直线上。

此外,我认为我不需要重新声明我的gridbagconstraints,但我决定尝试调试尝试。

**更新 - 我现在发布了一个更简单的程序版本,错误仍然存​​在。我很抱歉,由于缺乏灵活的技能,我没有减少它。

0 个答案:

没有答案