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

问题描述:

描述:我一直在研究这个小项目,我需要根据传递的参数(1-4)将一个特定的JPanel从一个类发送到主JFrame。 。在我的主课堂中,我设置了一个JFrame,以便我可以直观地检查正在传递的面板。将JPanel添加到JFrame失去组织组件的能力 - Java

什么行不通

里面的“访问器类”,我似乎无法在面板的中间位置到JComboBox的。另外,我不太确定我可以做任何类型的定位。我之前使用完全相同的代码实现了一个按钮(我替换了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); 
} 

这是 “访问器” 类定义面板

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

+0

经过一些更多的测试后,它必须是我从其他类调用jpanel的方式。如果我在主要方法中直接设置面板,则所有布局都可以正常工作。 – ghujkil2

+0

Dude,由于Accessor类正在扩展JPanel,为什么要创建一个JPanel类?您应该将choiceBoxOne添加到Accessor类而不是您的JPanel对象。而且,您应该将Layout设置为Accessos类,而不是JPanel对象。 –

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

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

另外不要忘记使用GridBagConstraints以及GridBagLayout