JLabel没有继续使用JTabbedPane?

时间:2014-03-08 15:17:31

标签: java swing user-interface jlabel jtabbedpane

我意识到这个问题曾经被问过(好几次),我已经尝试了我在网上找到的所有技巧但无济于事!也许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();
        }
    }
    );
   }
  }

当然,问题在于即使我在某个(任意)位置设置标签,它也不会移动!它简单地将标签置于顶部并从左到右。我试过我遇到的一切都无济于事。我怎么能纠正这个?

谢谢!

1 个答案:

答案 0 :(得分:2)

你的代码毫无意义:

  1. 为什么你有一个循环来创建5个相同的JFrame?
  2. 您为什么要在同一位置添加多个标签?
  3. 您不应该尝试设置组件的位置。 Swing旨在与布局管理器一起使用。有关工作示例,请阅读Using Layout Managers上Swing教程中的部分。您还可以嵌套具有不同布局的面板以获得所需的效果。这些示例还可以让您更好地了解如何构建代码。

    例如,也许您可​​以使用BoxLayout。它允许您添加strut and glue组件,这将有助于您在一行中对齐组件。

      

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

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