java - 如何将Java选项卡式面板添加到自定义布局中?

标签 java swing user-interface layout

我这里有两个操作。一个是查看学生信息,下一个是查看教师信息。

我想添加名为学生和教师的两个选项卡,但不知道在java中的自定义布局中在哪里添加jpanels。

请帮我建议解决方案或指出要添加的格式。

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.sql.*;

public class Searchdb extends JFrame implements ActionListener {

//Initializing Components
    JLabel lb,lbd,lb1, lb2, lb3, lb5;
    JTextField tf1, tf2,tf3,tf5,tfd;
    JButton btn;

    //Creating Constructor for initializing JFrame components
    Searchdb() {
        //Providing Title
        super("Fetching Roll Information");




        lb5 = new JLabel("Roll Number:");
        lb5.setBounds(20, 20, 100, 20);
        tf5 = new JTextField(20);
        tf5.setBounds(130, 20, 200, 20);

        lbd = new JLabel("Date:");
        lbd.setBounds(20, 50, 100, 20);
        tfd = new JTextField(20);
        tfd.setBounds(130, 50, 200, 20);


        btn = new JButton("Submit");
        btn.setBounds(50, 50, 100, 20);
        btn.addActionListener(this);

        lb = new JLabel("Fetching Student Information From Database");
        lb.setBounds(30, 80, 450, 30);
        lb.setForeground(Color.black);
        lb.setFont(new Font("Serif", Font.PLAIN, 12));
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(500, 500);

        lb1 = new JLabel("Name:");
        lb1.setBounds(20, 120, 100, 20);
        tf1 = new JTextField(50);
        tf1.setBounds(130, 120, 200, 20);
        lb2 = new JLabel("Fathername:");
        lb2.setBounds(20, 150, 100, 20);
        tf2 = new JTextField(100);
        tf2.setBounds(130, 150, 200, 20);
        lb3 = new JLabel("State:");
        lb3.setBounds(20, 180, 100, 20);
        tf3 = new JTextField(50);
        tf3.setBounds(130, 180, 200, 20);

        setLayout(null);

        //Add components to the JFrame
        add(lb5);
        add(tf5);
        add(lbd);
        add(tfd);
        add(btn);

        add(lb);
        add(lb1);
        add(tf1);
        add(lb2);
        add(tf2);
        add(lb3);
        add(tf3);


        //Set TextField Editable False
        tf1.setEditable(false);
        tf2.setEditable(false);
        tf3.setEditable(false);

    }

    public void actionPerformed(ActionEvent e) {
        //Create DataBase Coonection and Fetching Records

        //  First  panel dispalyed only the student below information.

        try {
            String str = tf5.getText();

            Datestri = tfd.getText();//Getting the unable to convert String to Date error

            System.out.println(str);
            System.out.println(stri);

            Class.forName("oracle.jdbc.driver.OracleDriver");
            Connection con = DriverManager.getConnection("jdbc:oracle:thin:@//host:port/servicename","username","password");
            PreparedStatement st = con.prepareStatement("select Name,Fathername,State from student_db where roll_number=? and medium=?");
            System.out.println(st);
            st.setString(1, str);
            st.setDate(2, stri);



            //Excuting Query
            ResultSet rs = st.executeQuery();
            System.out.println(rs);

            if (rs.next()) {
                String s = rs.getString(1);
                String s1 = rs.getString(2);
                String s2 = rs.getString(3);


                //Sets Records in TextFields.
                tf1.setText(s);
                tf2.setText(s1);
                tf3.setText(s2);

            } else {
                JOptionPane.showMessageDialog(null, "Student not Found");
            }

            //Create Exception Handler
        } catch (Exception ex) {

            System.out.println(ex);
        }
    }

    public void actionPerformed(ActionEvent e) {
        //Create DataBase Coonection and Fetching Records

    //  Second panel dispalyed only the teacher information.
        //Teacher information should be retrieved from the db

        }

//Running Constructor

    public static void main(String args[]) {
        new Searchdb();
    }
}

感谢您提前提供的任何帮助。

最佳答案

将其添加到您的构造函数中,然后您可以根据需要自定义它:

JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
tabbedPane.setBounds(10, 211, 464, 240);
getContentPane().add(tabbedPane);

JPanel panel = new JPanel();
tabbedPane.addTab("New tab", null, panel, null);
panel.setLayout(null);

JLabel lblNewLabel_1 = new JLabel("New label");
lblNewLabel_1.setBounds(43, 35, 46, 14);
panel.add(lblNewLabel_1);

JPanel panel_1 = new JPanel();
tabbedPane.addTab("New tab", null, panel_1, null);
panel_1.setLayout(null);

JLabel lblNewLabel = new JLabel("New label");
lblNewLabel.setBounds(50, 149, 46, 14);
panel_1.add(lblNewLabel);

此外,我认为您应该使用其他布局,而不是绝对的这种形式,如果您调整窗口大小,组件将保持在相同的位置相同的尺寸。

关于java - 如何将Java选项卡式面板添加到自定义布局中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41442723/

相关文章:

java - 不安全操作、未经检查的转换

java - 从 Python 调用非 native Java 代码

java - 如何使用 GridLayout 使 JScrollPane 上的 JPanel 仅填充宽度而不填充高度?

java - Android 上的简单 MVVM 架构以及 Java 上的 AndroidX

java - JTextField 事件监听器

java - 如何在字符串后命名对象引用

java - 如何在 Android P 上使用 apache http

java - 识别 AWT 线程

java - 将焦点放在 JLayeredPane 中的 JPanel

java - 在 Java 中制作一个不可聚焦的窗口