gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:10:53 25 4
gpt4 key购买 nike

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

What doesn't work

在“Accessor Class”内,我似乎无法将 JComboBox 放置在面板的中间。此外,我不太确定我可以进行任何类型的定位。我之前使用完全相同的代码实现了一个按钮(我替换了 JComboBox),并且我也无法调整按钮的大小。但是...我可以改变它的颜色。

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

这个问题是我从类(class)接收 JPanel 的方式造成的吗?也许有更好的方式我可以调用小组。

抱歉,没有表述清楚。努力理解 Java 中的一些基本概念。

感谢任何帮助。

This is the main class

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);
}

This is the "Accessor" class that defines the panel

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

最佳答案

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

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

另外,不要忘记将 GridBagConstraintsGridBagLayout 一起使用。

关于java - 将 JPanel 添加到 JFrame 失去组织组件的能力 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46009272/

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