将JPanel添加到JFrame失去组织组件的能力 - Java

时间:2017-09-02 00:00:32

标签: java class object jframe jpanel

描述:我一直在研究这个小项目,我需要根据传递的参数(1-4)将类中的特定JPanel发送到主JFrame。在我的主类中,我有一个JFrame设置,所以我可以直观地检查传递的面板。

  

什么不起作用

在" Accessor Class"中,我似乎无法将JComboBox放在Panel的中间位置。另外,我不太确定我能做任何定位。我之前使用完全相同的代码(我替换了JComboBox)实现了一个按钮,我也无法调整按钮的大小。但是......我可以改变它的颜色。

GridBagLayout应该以默认为中心。为什么要被覆盖?如果您查看提供的图片/链接,它会自动转移到顶部中心。我根本无法移动它。

这个问题是我从班级收到JPanel的方式的结果。是否有更好的方式可以召集小组。

抱歉缺乏清晰度。努力理解Java中的一些基本概念。

感谢任何帮助。

  

这是主要的课程

public static void main(String[] args) {
    Accessor accessorOne = new Accessor(1); //Creates the Panel with param 1
    JFrame frame = new JFrame("Testing");
    frame.setLayout(new GridLayout(2,2));
    frame.add(new JButton("Button 2"));
    frame.add(new JButton("Button 3"));
    frame.add(new JButton("Button 4"));
    frame.add(accessorOne); //Adds the Panel to the last spot in the JFrame
    frame.setSize(650, 600);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
  

这是" Accessor"定义面板的类

public class Accessor extends JPanel{

 JPanel panel = new JPanel();

 public Accessor(int num){

    if(num == 1){
    panel.setLayout(new GridBagLayout());
    String[] choice1 = {"Testing One", "Testing two" };
    JComboBox choiceBoxOne = new JComboBox(choice1);
    choiceBoxOne.setBackground(Color.red); //These changes are correctly reflected!
    panel.add(choiceBoxOne);
    choiceBoxOne.setLocation(300,300); //ERROR -> Setting this value changes nothing!
    add(panel);
    } 
    // Other num options
 } 
}

This is the photo of the Jframe

1 个答案:

答案 0 :(得分:0)

问题是您在类panel中使用Accessor(也是默认布局为FlowLayout的面板)。因此,您可以将GridBagLayout用于Accessor的实例,并将控件直接添加到Accessor而不是新的panel,而不是制作另一个面板实例。

绝对定位同样适用于null布局(不推荐)。

也不要忘记GridBagConstraintsGridBagLayout一起使用。