JavaのCardLayoutクラスとは?その重要性と基本的な使い方をわかりやすく解説
CardLayoutは、コンポーネントをカードのように順番に重ねて配置するレイアウトマネージャーです。このレイアウトでは、一度に表示されるコンポーネントは1つだけであり、追加された各コンポーネントがそれぞれ1枚の「カード」として扱われます。
CardLayoutの特徴
- CardLayoutは、他の一般的なレイアウトマネージャーとは大きく異なります。通常のレイアウトマネージャーはコンテナ内のすべてのコンポーネントを同時に表示しようとしますが、CardLayoutは常に1つのコンポーネントのみを表示します。
- CardLayoutでは、カード(コンポーネント)は通常JPanelなどのコンテナに配置されます。コンポーネントは追加された順序でカードキューに格納され、後から順番に切り替えて表示できます。
- CardLayoutの主要なメソッドには、first()、last()、next()、previous()、show() の5つがあります。これらを使うことで、最初・最後・次・前のカードへの移動や、指定した名前のカードを直接表示することが可能です。
サンプルコード
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CardLayoutTest extends JFrame implements ActionListener {
CardLayout card;
JButton b1,b2,b3;
Container con;
CardLayoutTest() {
con = this.getContentPane();
card = new CardLayout(40,30);
con.setLayout(card);
b1 = new JButton("Java");
b2 = new JButton("Python");
b3 = new JButton("Scala");
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
con.add("a", b1);
con.add("b", b2);
con.add("c", b3);
}
public void actionPerformed(ActionEvent e) {
card.next(con);
}
public static void main(String[] args) {
CardLayoutTest clt = new CardLayoutTest();
clt.setTitle("CardLayout Test");
clt.setSize(350, 275);
clt.setLocationRelativeTo(null);
clt.setDefaultCloseOperation(EXIT_ON_CLOSE);
clt.setVisible(true);
}
}上記の例では、CardLayoutマネージャーを使用しており、ウィンドウが起動した時点で表示されるのは「Java」ボタンという1つのコンポーネントだけです。ウィンドウをクリックすると、残りのコンポーネント(「Python」「Scala」)が順番に表示される仕組みになっています。
このようにCardLayoutを活用することで、限られた画面領域を効率的に使い、タブパネルやウィザード形式の画面など、複数の画面を切り替えるUIを簡単に実装できます。
実行結果

-
JavaのSwingWorkerクラスとは?GUIアプリで非同期処理を行う重要性と使い方を解説
SwingWorkerクラスは、時間のかかる処理(長時間実行タスク)などをワーカースレッド上で非同期に実行し、その結果に基づいてイベントディスパッチスレッド(EDT)からSwingコンポーネントを安全に更新するための仕組みを提供します。このクラスはJava 1.6で導入されました。Swingでは、すべてのUI更新はEDT上で行う必要があります。しかし、EDT上で重い処理を直接実行すると画面がフリーズしてしまい、ユーザー体験を大きく損ないます。SwingWorkerを使えば、バックグラウンドでの処理とUIの更新を適切に分離できるため、応答性の高いデスクトップアプリケーションを実現できます。Swi
-
JavaのSwingUtilitiesクラスとは?invokeAndWait()とinvokeLater()で実現するスレッドセーフなGUI操作
JavaのSwingでは、コンポーネントが画面に表示された後、それらを操作できるのは「イベントディスパッチスレッド(Event Handling Thread)」と呼ばれる単一のスレッドだけです。これはSwingの重要な設計原則であり、複数のスレッドから同時にGUIを操作すると不整合や予期しない動作が発生するため、すべての描画・更新処理をこのスレッドに集約することで安全性を確保しています。開発者は、別途作成したコードブロックの参照をイベントディスパッチスレッドに渡すことができます。SwingUtilitiesクラスには、そのための2つの重要なstaticメソッド、invokeAndWait()