我意识到这个问题以前已经被问过了(好几次),我尝试了我在网上找到的所有提示,但都无济于事!也许JTabbedPane
与此有关?无论如何,这是我写的代码(最小的工作示例):
public class Main extends JPanel {
public Main() {
super(new GridLayout(1, 1));
JTabbedPane tabbedPane = new JTabbedPane();
ImageIcon icon = createImageIcon("");
for(int i=0; i< 5; i++)
{
JFrame frame = new JFrame();
JPanel panel = new JPanel();
panel.setLayout(new FlowLayout());
tabbedPane.addTab("Irrelevant " +(i+1), icon, panel,
"Hi " + (i+1) + " String");
tabbedPane.setMnemonicAt(0, KeyEvent.VK_1);
JLabel label0 = new JLabel("Title of Pane " + (i+1));
panel.add(label0);
String[] irrelevantArray = {"hi","sup", "bye"};
for(String s: irrelevantArray)
{
JLabel label = new JLabel(s.toString());
panel.add(label);
label.setLocation(0,100);
}
add(tabbedPane);
tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
}
}
protected JComponent makeTextPanel(String text) {
JPanel panel = new JPanel(false);
JLabel filler = new JLabel(text);
filler.setHorizontalAlignment(JLabel.CENTER);
panel.setLayout(new GridLayout(1, 1));
panel.add(filler);
return panel;
}
protected static ImageIcon createImageIcon(String path) {
java.net.URL imgURL = Main.class.getResource(path);
if (imgURL != null) {
return new ImageIcon(imgURL);
} else {
System.err.println("Couldn't find file: " + path);
return null;
}
}
private static void createAndShowGUI() {
JFrame frame = new JFrame("Chamber Assignments");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new Main(), BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable()
{
public void run() {
UIManager.put("swing.boldMetal", Boolean.FALSE);
createAndShowGUI();
}
}
);
}
}
当然,这样做的问题是,即使我将标签设置在某些(任意)位置,它也不会移动!它只是把标签放在顶部的中心,从左到右。我所能想到的一切都试过了,但都无济于事。我怎样才能纠正这个问题呢?谢谢!
你的代码没有意义:
- 为什么你有一个循环来创建5个相同的jframe ?
- 为什么你试图在同一位置添加多个标签?
你不应该试图设置组件的位置。Swing被设计为与布局管理器一起使用。请阅读Swing教程中关于使用布局管理器的部分,以获得工作示例。你也可以用不同的布局嵌套面板来获得你想要的效果。这些示例还将使您更好地了解如何构建代码。
例如,也许你可以使用BoxLayout。它允许您添加strut and glue
组件,这将帮助您在一条线上对齐组件。
当我取出布局管理器时,标签甚至不显示
那是因为布局管理器比你想象的要多。它们管理组件的大小和位置。然后管理父容器的首选大小。他们在幕后做了很多工作来确保GUI正常工作。