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);
                }

}

Второй класс: 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 );
                } 
    }
}

введите здесь описание изображения


person user1939168    schedule 27.02.2013    source источник


Ответы (1)


Исходя из того, что я понимаю из вашего вопроса, что вы можете сделать, на панели второй вкладки добавьте новую JTabbedPane с двумя вкладками, каждая из которых имеет кнопку, и вы получите то, что хотите. Небольшой демонстрационный код будет таким:

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);

Помимо этого, вы напрямую ссылаетесь на переменную класса в другом классе здесь tabPane.addTab("bsm_export", exp.tab);. Вы не должны этого делать, вместо этого вы должны сделать его приватным и предоставить геттеру/сеттеру доступ к нему. Кроме того, почему у вас такая сложная структура кода для такой мелочи, отображающей кнопки во вкладках!!!?? Также всегда следуйте Соглашению о кодировании Java, имя класса не должно начните с маленького символа.

person Harry Joy    schedule 27.02.2013
comment
Что ж, Гарри, большое спасибо. Я попробую ваше предложение. Я только изучаю java. Я программист на С++ и только начал изучать java. Хотел создать графический интерфейс с использованием качелей. - person user1939168; 28.02.2013