gpt4 book ai didi

java - 添加选项卡时 JFrame 变成蓝色

转载 作者:行者123 更新时间:2023-12-02 09:36:49 24 4
gpt4 key购买 nike

我目前有一个 Jframe,我想将其添加到选项卡中。(我使用框架只是为了测试目的,以确保外观和感觉正确,但是当尝试将其添加到 JTabbedPane 时,框架开始看起来蓝色(顶部也很奇怪)。

我尝试将设置从原始框架复制到新框架,但这没有帮助。

JTabbedPane tabs = new JTabbedPane();
tabs.addTab("1", frame.getContentPane());
JFrame FinalFrame = new JFrame();
FinalFrame.setDefaultLookAndFeelDecorated(true);
FinalFrame.setSize(WIDTH, HEIGTH);
FinalFrame.setLocation(100, 150);
FinalFrame.setTitle("Primal-Pvm Notification center");
FinalFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
FinalFrame.add(tabs);

在将问题添加到选项卡之前并排查看问题和框架:

enter image description here

编辑:George Z. 的回答对我帮助很大。

就像他所说的解决问题:不要将内容添加到主框架,而是将它们添加到 Jpanel 并将其添加到 JTabbedPane。如果您要将 Jpanel 添加到包含 PaintComponent 中的覆盖的选项卡,则必须将该类创建为 Jpanel,如下所示:

JPanel panel = new LineDrawer([Enter parameters]);
panel.setLayout([Enter Layout]);

最佳答案

您处理此问题的方式似乎非常复杂,因此出现了这种奇怪的行为。 (看起来像是外观问题? - 显示设置它的代码部分)

但是,我建议您仅创建一个 JFrame(this question 解释了为什么应该这样做),将其内容 Pane 的布局设置为 BorderLayout 并保留像这样。搞乱内容 Pane 的情况很少见。之后,创建代表您想要的选项卡的独立 JPanels。最后使用这些面板创建一个 JTabbedPane 并将其添加到 JFrame 的内容框架中。

一个小例子是:

public class TabbedPanelExample extends JFrame {
public TabbedPanelExample() {
super("test");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new BorderLayout());

JTabbedPane pane = new JTabbedPane();
pane.addTab("FirstTab", createFirstTab());
pane.addTab("SecondTab", createSecondTab());

add(pane);
setSize(400, 400);
setLocationRelativeTo(null);
}

private Component createFirstTab() {
JPanel panel = new JPanel(new FlowLayout());
panel.add(new JLabel("Some Component"));
panel.add(new JTextField("Some Other Component"));
return panel;
}

private Component createSecondTab() {
JPanel panel = new JPanel(new FlowLayout());
panel.add(new JLabel("Some Component"));
panel.add(new JButton("Some Other Component"));
return panel;
}

public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
new TabbedPanelExample().setVisible(true);
});
}

}
<小时/>

根据此评论进行编辑:

Well I do have a Jframe with a lot of elements added to it so it kinda is a hassle to switch it all to panels;

JFrame 不能有很多元素。你看看how to use root panes. JFrame 的“拥有大量元素”的容器是它的根 Pane ,它主要由它的内容 Pane 完成。当您frame.add(component)时,您将组件添加到其内容 Pane 中。你猜怎么了? JFrame 的内容 Pane 是 JPanel。面板也是如此。

现在为了完成这项工作,请尝试按照我所说的操作 frame.setLayout(new BorderLayout();//changes layout to contentpane。假设您有一堆组件(让说 comp1,comp2) 并且您将它们添加为:

frame.add(comp1);
frame.add(comp2);

为了弄清楚这一点,您必须执行以下操作。创建一个 JPanel 并执行 panel.add(comp1),而不是 frame.add(comp1)。所以这个 JPanel 拥有您在 JFrame 中添加的所有组件。之后创建您的 JTabbedPane:

JTabbedPane pane = new JTabbedPane();
pane.addTab("tab", panel);

最后将此 Pane 添加到 JFrame 的内容 Pane 中:

frame.add(pane);

总之,您将把添加到框架中的所有组件移动到 JPanel 中,将此 JPanel 添加到 JTabbedPane 中,最后将此 JTabbedPane 添加到框架(内容 Pane )中。框架只有一个组件。

关于java - 添加选项卡时 JFrame 变成蓝色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57440766/

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