2013-02-27 93 views
0

我写了一个小程序,用于创建带有标签的窗格的简单GUI。目前它有两个选项卡。 在其中一个选项卡中,我创建了一个按钮,在另一个选项卡中,我创建了两个按钮(基于第三个类中的字符串)。我无法做的是在第二个选项卡内我想要创建两个选项卡在te代码中提到“one”和“two”),并且当前在选项卡中的两个按钮应该出现在每个子选项卡中。可以有人告诉我如何实现这一点?JtabbedPane中的JtabbedPane

主类: abc.java

public class abc { 
     JFrame frame; 
     JTabbedPane tabPane; 
     abc_export exp; 
     bsm_import2 imp; 
     public static void main(String[] args) { 
       abc jtab = new abc(); 
       jtab.start(); 
     } 
     public void start(){ 
     exp=new abc_export(); 
     imp=new bsm_import2(); 
     tabPane.addTab("bsm_export", exp.tab); 
     tabPane.addTab("bsm_import2", imp.tab); 
     } 

     public abc() { 
       // Create a frame 
       frame = new JFrame(); 
       // Create the tabbed pane. 
       tabPane = new JTabbedPane(); 
       //Adding into frame 
       frame.add(tabPane, BorderLayout.CENTER); 
       frame.setSize(300, 300); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setVisible(true); 
       } 

} 

类2:abc_export.java

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
public class abc_export { 
     JPanel tab; 
     public abc_export() { 
       //Adding into frame 
       tab = new JPanel(); 
       JButton btn=new JButton("run"); 
       tab.add(btn); 
       tab.setOpaque(false); 
       } 
}; 

类三:bsm_import2.java(这是我需要的要做的更改以创建子选项卡)

import javax.swing.*;  
import java.awt.*;  
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.io.*; 
import java.util.StringTokenizer; 
import java.util.*; 
import java.awt.event.*; 


public class bsm_import2 { 



    public static JPanel tab; 
    public bsm_import2() 
    { 
    createAndShowGUI(); 
    } 
    private static void createAndShowGUI() { 
      tab=new JPanel(); 
      tab.setLayout(new GridLayout(3,2)); 
      String line="tab1#one tab2#two"; 
      String strAry[] = line.split(" "); 
      JButton Button[]=new JButton[100]; 
      final Map<String, String> map = new HashMap<String, String>(); 
      for(int i =0; i < strAry.length ; i++){ 
        String[] parts = strAry[i].split("#"); 
        map.put(parts[0],parts[1]);   
        Button[i] = new JButton(parts[0]); 
        tab.add(Button[i]); 
        tab.setOpaque(false); 
      } 
       for (String key : map.keySet()) { 
       System.out.println(key); 
       } 
    } 
} 

enter image description here

回答

1

根据我的理解,形成了你的问题,你可以做的是,在第二个选项卡的面板中添加具有设置在每一个按钮,一个新的JTabbedPane有2个选项卡,你会得到你想要的。一个小的演示代码将是:

比这直接指的类的变量在另一类这里 tabPane.addTab("bsm_export", exp.tab);
JFrame frame = new JFrame(); 
frame.setSize(400, 400); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
JTabbedPane mainTabsPane = new JTabbedPane(); // main tabs pane 

//first tab 
JButton button = new JButton("Button in first tab"); 
JPanel jPanel = new JPanel(); 
jPanel.add(button); 
mainTabsPane.addTab("First tab", jPanel); 

//second tab 
jPanel = new JPanel(); 
JTabbedPane secondaryTabsPane = new JTabbedPane(); // secondary tabs pane 
button = new JButton("Button in second tab ---> first sub tab"); 
JPanel jPanel2 = new JPanel(); 
jPanel2.add(button); 
secondaryTabsPane.addTab("First tab", jPanel2); 
JPanel jPanel3 = new JPanel(); 
button = new JButton("Button in second tab ---> second sub tab"); 
jPanel3.add(button); 
secondaryTabsPane.addTab("Second tab", jPanel3); 
// add secondary tabs pane to new panel of second tab 
jPanel.add(secondaryTabsPane); 
// add new panel to main tabs pane 
mainTabsPane.addTab("Second tab", jPanel); 

frame.getContentPane().add(mainTabsPane); 
frame.setVisible(true); 

其他。你不应该这样做,而应该让它变为私人并提供getter/setter来访问它。此外,为什么你有如此复杂的代码结构这样一个小东西,在标签显示按钮!!! ??也总是遵循Java Coding Convention,班级名称不应以小字符开头。

+0

好,哈利,非常感谢。我会尝试你的建议。我只是在学习java.I,我是一名C++程序员,刚开始学习java。想创建一些使用波动的GUI。 – user1939168 2013-02-28 05:32:50

+0

是的,它总是很好地尝试新事物。学习Java祝你好运! – 2013-02-28 05:42:46