Java - 一个接一个地加载 JTabbedPane
Posted
技术标签:
【中文标题】Java - 一个接一个地加载 JTabbedPane【英文标题】:Java - Load JTabbedPane one tab after another 【发布时间】:2013-11-08 10:29:02 【问题描述】:我有一个带有 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);
【问题讨论】:
请发布所有相关代码...就目前的问题而言,我们无法为您提供帮助。 添加了一些代码,想知道它是否有帮助。 :) 您可能需要更多关于如何访问数据库的信息。您发布的代码显示同时添加了四个新选项卡,其中没有任何内容。您是否暗示数据检索非常耗时,并且您希望在每次数据可用时都显示?请发布有关您的问题的更多信息/代码。还要解释这个“数据库被锁定”的来源。 【参考方案1】:基于此example,下面的sscce 只需为每次单击添加 按钮创建一个新面板并填充结果。在实际程序中,您可能希望使用SwingWorker
来管理延迟和资源。
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://***.com/a/19860170/230513
* @see https://***.com/a/15715096/230513
* @see https://***.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的主要内容,如果未能解决你的问题,请参考以下文章
Java 脚本 - 当尝试按顺序一个接一个地播放音频时(通过 for 循环),一次播放所有音频
如何在 mvn clean install 中配置 maven hbm2hbmxml 和 hbm2java 一个接一个地运行