我正在构建一个Java Swing应用程序,并尝试在其中使用嵌套的JTabbedPane组件,并且结果好坏参与。
在我的顶级JFrame中,我能够使用JPanel成功构建和加载选项卡式窗格。在应用程序的顶层,有两个部分,每个部分分配给一个选项卡:General和Stream,两者都基于JPanels。 Stream拥有自己的JTabbedPane,因为它由三个从属部分组成:元数据,输入和实例,所有这些都基于JPanels。在JFrame组件中编写的所有代码都按预期工作。选项卡已初始化,JFrames已分配给选项卡,并且它们都可以正确显示到某个点。以下是我的JFrame组件中的代码:
flatten = (array) ->
flat = []
for element in array
if Array.isArray(element)
flat = flat.concat flatten element
else
flat.push element
flat
请注意,我将Input JPanel添加到选项卡,其选项卡显示出来。我在我的输入JPanel中放了一个JLabel来测试它,它是可见的。但是,我的输入JPanel也加载了一组选项卡,当我运行应用程序时,这些选项卡不可见。这是输入JPanel:
package gui;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.JTabbedPane;
public class AppFrame extends JFrame {
private static final long serialVersionUID = 5294140238998011273L;
private GeneralPanel generalPanel;
private JTabbedPane appTabs;
private JTabbedPane streamTabs;
private MetadataPanel metadataPanel;
private InputPanel inputPanel;
public AppFrame() {
super("Sourcecast");
setIconImage(Toolkit.getDefaultToolkit()
.getImage(getClass()
.getResource("/images/Apple-icon-64.png")));
setLayout(new BorderLayout());
appTabs = new JTabbedPane(JTabbedPane.TOP);
generalPanel = new GeneralPanel();
appTabs.add("General", generalPanel);
streamTabs = new JTabbedPane(JTabbedPane.TOP);
metadataPanel = new MetadataPanel();
streamTabs.add("Metadata", metadataPanel);
inputPanel = new InputPanel();
streamTabs.add("Input", inputPanel);
appTabs.add(streamTabs, "Stream");
add(appTabs);
setMinimumSize(new Dimension(500, 400));
setSize(600, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
}
以下是我尝试在“输入”面板中加载的JPanel之一,为了简单起见,我删除了Input中的其他选项卡:
package gui;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
public class InputPanel extends JPanel {
private static final long serialVersionUID = 7603090258673682140L;
private JTabbedPane inputTabs;
private StdinPcmPanel stdinPcmPanel;
public InputPanel() {
setLayout(null);
inputTabs = new JTabbedPane(JTabbedPane.TOP);
stdinPcmPanel = new StdinPcmPanel();
inputTabs.add("StdinPCM", stdinPcmPanel);
add(inputTabs);
}
}
我意识到使用所有JTabbedPanes在视觉上并不令人愉悦,并且可能令人困惑。我其实打算改变它。但是,我仍然需要知道为什么这不能按预期工作。下面是两个屏幕截图,显示顶级选项卡正常工作,然后您看到单击输入时,没有任何可见。
答案 0 :(得分:1)
但是,我的输入JPanel还加载了一组标签,当我运行应用程序时,这些标签页不可见。
不要使用null布局。所有面板都应使用适当的布局管理器。
可能使用BorderLayout
,然后添加的标签可以访问输入面板的所有可用空间。
将来(如果您需要更多帮助)发布适当的MCVE,以便在发布代码时展示问题。这是发布编译和演示问题的最小代码。
例如,我们无法访问您的面板类,因此只需使用JPanel添加到选项卡式窗格。