gpt4 book ai didi

java - 需要帮助才能正确放置 Swing 组件

转载 作者:行者123 更新时间:2023-12-02 04:18:21 25 4
gpt4 key购买 nike

为了通过大学类(class),我需要使用 JAVA 和 swing API 编写一个软件。但是,我在按照我想要的方式放置组件时遇到一些问题:

我想在心情面板中放置一些组件: Like this

我应该为心情面板使用哪种布局,哪种布局是获得第二次绘制中的组件的最佳方式?

编辑:我目前正在尝试应用下面的解决方案,但遇到一些问题: 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);

最佳答案

在设计布局时,您需要分解每个部分的需求和职责,虽然您实际上可以使用 GridBagLayout 来完成整个布局,但它可能已经过时了。

相反,您可以使用一系列复合布局,每个布局都会添加到先前布局的功能中,例如...

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

enter image description here

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

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

enter image description here

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

最后两部分几乎相同...

enter image description here enter image description here

您需要回答这个问题,所有元素的水平空间是否都相同?如果它们的大小相同,那么您可以使用 GridLayout,如果不是,您可以根据您的需要和愿望使用 FlowLayoutGridBagLayout .

尽量不要查看“整个”UI,并尝试一步解决它,大多数时候,您希望将其分解为功能区域,这也将允许您将责任区域分开编写代码并生成自包含的工作单元,您可以根据这些工作单元创建类。

参见Laying Out Components Within a Container了解更多详情。

关于java - 需要帮助才能正确放置 Swing 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33052508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com