描述:我一直在研究这个小项目,我需要根据传递的参数(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
}
}
答案 0 :(得分:0)
问题是您在类panel
中使用Accessor
(也是默认布局为FlowLayout的面板)。因此,您可以将GridBagLayout用于Accessor
的实例,并将控件直接添加到Accessor
而不是新的panel
,而不是制作另一个面板实例。
绝对定位同样适用于null
布局(不推荐)。
也不要忘记GridBagConstraints
和GridBagLayout
一起使用。