我意识到这个问题曾经被问过(好几次),我已经尝试了我在网上找到的所有技巧但无济于事!也许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();
}
}
);
}
}
当然,问题在于即使我在某个(任意)位置设置标签,它也不会移动!它简单地将标签置于顶部并从左到右。我试过我遇到的一切都无济于事。我怎么能纠正这个?
谢谢!
答案 0 :(得分:2)
你的代码毫无意义:
您不应该尝试设置组件的位置。 Swing旨在与布局管理器一起使用。有关工作示例,请阅读Using Layout Managers上Swing教程中的部分。您还可以嵌套具有不同布局的面板以获得所需的效果。这些示例还可以让您更好地了解如何构建代码。
例如,也许您可以使用BoxLayout。它允许您添加strut and glue
组件,这将有助于您在一行中对齐组件。
当我取出布局管理器时,标签甚至不显示
那是因为布局管理器比你想象的要多。他们管理组件的大小和位置。管理父容器的首选大小。他们在幕后做了大量工作,以确保GUI正常工作。