JLabel在JTabbedPanel上没有移动



我意识到这个问题以前已经被问过了(好几次),我尝试了我在网上找到的所有提示,但都无济于事!也许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 ?
  1. 为什么你试图在同一位置添加多个标签?

你不应该试图设置组件的位置。Swing被设计为与布局管理器一起使用。请阅读Swing教程中关于使用布局管理器的部分,以获得工作示例。你也可以用不同的布局嵌套面板来获得你想要的效果。这些示例还将使您更好地了解如何构建代码。

例如,也许你可以使用BoxLayout。它允许您添加strut and glue组件,这将帮助您在一条线上对齐组件。

当我取出布局管理器时,标签甚至不显示

那是因为布局管理器比你想象的要多。它们管理组件的大小和位置。然后管理父容器的首选大小。他们在幕后做了很多工作来确保GUI正常工作。

相关内容

  • 没有找到相关文章

最新更新