为了通过大学课程,我需要使用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);
答案 0 :(得分:2)
在设计布局时,你需要细分需求和责任的每个部分,而你可以使用GridBagLayout
来实际完成整个布局,这可能会超过杀戮。
相反,您可以使用一系列复合布局,每个布局都添加到之前布局的位置,例如......
如果我们看一下主要布局,我会看到两个主要区域,或多或少......
这只是尖叫BorderLayout
(再次GridBagLayout
可以工作)
现在,我们开始关注NORTH
部分
这里需要回答的问题是,这三个部分的高度是否相等?如果是,那么GridLayout
可以工作,如果没有,那么我可能会倾向于GridBagLayout
最后两节几乎相同......
你需要回答这个问题,所有的元素是否会被赋予相同的水平空间?如果它们的大小相同,那么您可以使用GridLayout
,如果没有,则可以使用FlowLayout
或GridBagLayout
,具体取决于您的需求和愿望。
尝试永远不要查看“整个”用户界面并尝试在一个步骤中解决它,大多数情况下,您希望将其分解为功能区域,这也可以让您分离您的责任区域代码并生成自包含的工作单元,您可以从中开始上课。
有关详细信息,请参阅Laying Out Components Within a Container。