Java - 加载 JTabbedPane 一个又一个选项卡

标签 java database swing jdbc jtabbedpane

我有一个带有 4 个选项卡的 JTabbedPane。我想加载 1 个选项卡 1 个,因为选项卡使用、引用和检索同一数据库。这导致我的应用程序中出现“数据库被锁定”的问题。

预先感谢您的帮助和建议:)

这就是我创建 JTabbedPane 的方式

    JTabbedPane tabbedPane = new JTabbedPane();
    tabbedPane.setBounds(0, 0, 450, 300);

    tabbedPane.addTab("tab1", new class1UseDb());
    tabbedPane.setMnemonicAt(0, KeyEvent.VK_1);

    tabbedPane.addTab("tab2", new class2UseDb());
    tabbedPane.setMnemonicAt(1, KeyEvent.VK_2);

    tabbedPane.addTab("tab3", new class3UseDb());
    tabbedPane.setMnemonicAt(2, KeyEvent.VK_3);

    tabbedPane.addTab("tab4", new class());
    tabbedPane.setMnemonicAt(3, KeyEvent.VK_4);

最佳答案

基于此examplesscce下面只是为每次单击添加按钮创建一个新面板并填充结果。在真实的程序中,您可能需要使用 SwingWorker管理延迟和资源。

image

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import org.h2.jdbcx.JdbcDataSource;

/**
 * @see https://stackoverflow.com/a/19860170/230513
 * @see https://stackoverflow.com/a/15715096/230513
 * @see https://stackoverflow.com/a/11949899/230513
 */
public class TabData {

    private int n = 1;

    private void display() {
        JFrame f = new JFrame("TabData");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        final JTabbedPane jtp = new JTabbedPane();
        jtp.add(String.valueOf(n), createPane());
        f.add(jtp, BorderLayout.CENTER);
        JPanel p = new JPanel(new FlowLayout(FlowLayout.RIGHT));
        p.add(new JButton(new AbstractAction("Add") {
            @Override
            public void actionPerformed(ActionEvent e) {
                jtp.add(String.valueOf(++n), createPane());
                jtp.setSelectedIndex(n - 1);
            }
        }));
        f.add(p, BorderLayout.SOUTH);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    private JPanel createPane() {
        JPanel p = new JPanel();
        JLabel l = new JLabel();
        p.add(new JLabel("Result: "));
        p.add(l);
        JdbcDataSource ds = new JdbcDataSource();
        ds.setURL("jdbc:h2:file:~/src/java/jdbc/test;IFEXISTS=TRUE");
        ds.setUser("sa");
        ds.setPassword("");
        try {
            Connection conn = ds.getConnection();
            Statement s = conn.createStatement();
            ResultSet rs = s.executeQuery("SELECT RAND() FROM DUAL");
            rs.next();
            l.setText(rs.getString(1));
        } catch (SQLException ex) {
            ex.printStackTrace(System.err);
        }

        return p;
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new TabData().display();
            }
        });
    }
}

关于Java - 加载 JTabbedPane 一个又一个选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19856793/

相关文章:

java - 将关键监听器添加到 JtextArea

java - Netty:从管道、协议(protocol)封装中动态添加和删除 FrameDecoder

java - 为什么这不是始终如一地绘制?

php - 数据库关系,我看不懂,MYSQL,PHP

database - 带有标签的用户数据库

java - 使用 MenuBar 切换面板

java - Jasper 报告 JAVA Swing

java - 从 JPanel 中删除透明 JPanel

java - 我不断得到无限的 do while 循环

php - php/mysql如何添加单列