将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
}
}
答
问题是您在类Accessor
中使用panel
(也是默认布局为FlowLayout的面板)。因此,您可以不使用另一个面板实例,而只使用GridBagLayout实例Accessor
,并直接将控件添加到Accessor
而不是新的panel
。
再次绝对定位适用于null
布局(不推荐)。
另外不要忘记使用GridBagConstraints
以及GridBagLayout
。
经过一些更多的测试后,它必须是我从其他类调用jpanel的方式。如果我在主要方法中直接设置面板,则所有布局都可以正常工作。 – ghujkil2
Dude,由于Accessor类正在扩展JPanel,为什么要创建一个JPanel类?您应该将choiceBoxOne添加到Accessor类而不是您的JPanel对象。而且,您应该将Layout设置为Accessos类,而不是JPanel对象。 –