需要帮助正确放置摆动组件

时间:2015-10-10 09:38:04

标签: java swing user-interface layout-manager

为了通过大学课程,我需要使用JAVA和swing API编写软件代码。但是我有一些问题要放置我想要的组件:

我想在moodPanel中放置一些组件: Like this

我应该为moodPanel使用哪种布局,哪种布局最好的方式来获得第二次抽奖?

编辑:我目前正在尝试应用以下解决方案,但我遇到了一些问题: Here

public MoodPanel(){
    super();

    this.setBackground(new Color(255, 255,0));

    this.setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));

    this.choicePanel = new JPanel();
    this.choicePanel.setLayout(new GridBagLayout());
    this.choicePanel.setBackground(new Color(255, 0, 0));
    GridBagConstraints c = new GridBagConstraints();
    this.statPanel = new JPanel();
    this.statPanel.setLayout(new BorderLayout());



    this.lIdTweet= new JLabel();
    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridwidth=3;
    c.gridx=0;
    c.gridy=0;
    c.weightx=0.0;
    c.anchor =GridBagConstraints.FIRST_LINE_START;
    this.choicePanel.add(this.lIdTweet,c);

    this.moodGroup = new ButtonGroup();

    this.JRBad = new JRadioButton("Mauvais");
    this.JRBad.setActionCommand("0");
    this.JRBad.setVisible(false);
    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridx=0;
    c.gridy=1;
    c.weightx=0.0;
    this.choicePanel.add(this.JRBad,c);



    this.JRNeutral = new JRadioButton("Neutre");
    this.JRNeutral.setActionCommand("2");
    c.fill = GridBagConstraints.HORIZONTAL;
    c.weightx=1.0;
    c.insets = new Insets(0,70, 0, 0);
    this.choicePanel.add(this.JRNeutral,c);
    this.JRNeutral.setVisible(false);




    this.JRGood = new JRadioButton("Bon");
    this.JRGood.setVisible(false);
    this.JRGood.setActionCommand("4");
    c.fill = GridBagConstraints.HORIZONTAL;
    c.weightx=0.0;
    c.insets = new Insets(0,0, 0, 0);
    this.choicePanel.add(this.JRGood,c);





    this.moodGroup.add(this.JRBad);
    this.moodGroup.add(this.JRNeutral);
    this.moodGroup.add(this.JRGood);



    this.buttonPanel = new JPanel();
    this.buttonPanel.setLayout(new FlowLayout(FlowLayout.CENTER));
    this.intializingListener();
    this.btnAddToList = new JButton("Ajouter");
    this.btnAddToList.addActionListener(OKAction);
    this.MPClose= new JButton("Fermer");
    this.MPClose.addActionListener(CancelAction);
    this.buttonPanel.add(btnAddToList);
    this.buttonPanel.add(MPClose);
    this.buttonPanel.setVisible(false);
    this.buttonPanel.setSize(new Dimension(this.buttonPanel.getPreferredSize().width,this.btnAddToList.getPreferredSize().height));
    this.buttonPanel.setBackground(new Color(60, 90, 60));





    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridx=0;
    c.gridy=1;
    c.weightx=0.0;
    c.gridwidth=3;
    this.choicePanel.add(buttonPanel,c);
    this.add(choicePanel,BorderLayout.NORTH);
    this.add(statPanel,BorderLayout.SOUTH);

1 个答案:

答案 0 :(得分:2)

在设计布局时,你需要细分需求和责任的每个部分,而你可以使用GridBagLayout来实际完成整个布局,这可能会超过杀戮。

相反,您可以使用一系列复合布局,每个布局都添加到之前布局的位置,例如......

如果我们看一下主要布局,我会看到两个主要区域,或多或少......

enter image description here

这只是尖叫BorderLayout(再次GridBagLayout可以工作)

现在,我们开始关注NORTH部分

enter image description here

这里需要回答的问题是,这三个部分的高度是否相等?如果是,那么GridLayout可以工作,如果没有,那么我可能会倾向于GridBagLayout

最后两节几乎相同......

enter image description here enter image description here

你需要回答这个问题,所有的元素是否会被赋予相同的水平空间?如果它们的大小相同,那么您可以使用GridLayout,如果没有,则可以使用FlowLayoutGridBagLayout,具体取决于您的需求和愿望。

尝试永远不要查看“整个”用户界面并尝试在一个步骤中解决它,大多数情况下,您希望将其分解为功能区域,这也可以让您分离您的责任区域代码并生成自包含的工作单元,您可以从中开始上课。

有关详细信息,请参阅Laying Out Components Within a Container