リスナーとブロードキャスター
このチュートリアルでは、JUCEの重要なコンセプトであるリスナーとブロードキャスターのシステムを紹介します。ボタンのクリックに応答する簡単なアクションの実装を通して、この概念を見ていきます。
レベル初心者
プラットフォーム:Windows, macOS, Linux, iOS, Android
クラス: Button,TextButton,Button::Listener,Time
スタート
このチュートリアルのデモ・プロジェクトのダウンロードはこちらから:PIP|ZIP.プロジェクトを解凍し、最初のヘッダーファイルをProjucerで開く。
このステップにヘルプが必要な場合は、以下を参照してください。Tutorial: Projucer Part 1: Getting started with the Projucer.
デモ・プロジェクト
このチュートリアルのデモ・プロジェクトでは、1つのボタンと1つのラベルを持つシンプルなユーザー・インタフェースを紹介します。インタフェースは次のスクリーンショットに似ているはずです:

インタフェースは提供された状態では何もしない。ボタンをクリックすると、ラベルに現在の日付と時刻が表示されるようにコードを追加する。
インタフェースの設定
についてMainContentComponent
クラスは2つの子コンポーネントで構成されています。TextButtonオブジェクトとLabelオブジェクトATextButtonオブジェクトは、特定のテキストを含むボタンを表示できます。Labelオブジェクトはテキストを表示できる。
についてTextButtonクラスは1種類のボタンを実装している。ボタンの種類はたくさんある。ButtonクラスはJUCEで利用可能です。のAPIリファレンスドキュメントを参照してください。ToggleButton,ShapeButton,ImageButton,DrawableButtonそしてArrowButtonのクラスがある。
を宣言した。MainContentComponent
クラスは以下の通りである:
class MainContentComponent : public juce::Component
{
public:
//==============================================================================
MainContentComponent()
{
// ...
}
~MainContentComponent()
{
// ...
}
void resized() override
{
// ...
}
private:
juce::TextButton checkTheTimeButton;
juce::Label timeLabel;
//==============================================================================
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainContentComponent)
};
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR#define JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(className)This is a shorthand way of writing both a JUCE_DECLARE_NON_COPYABLE and JUCE_LEAK_DETECTOR macro for ...Definition juce_PlatformDefs.h:262
ボタンとラベルはMainContentComponent
オブジェクトに表示される。MainContentComponent
ビルダー
MainContentComponent()
{
addAndMakeVisible (checkTheTimeButton);
checkTheTimeButton.setButtonText ("Check the time...");
addAndMakeVisible (timeLabel);
timeLabel.setColour (juce::Label::backgroundColourId, juce::Colours::black);
timeLabel.setColour (juce::Label::textColourId, juce::Colours::white);
timeLabel.setJustificationType (juce::Justification::centred);
setSize (600, 110);
}
ここでは、ボタンのテキストを設定し、ラベルの特定の外観を設定します。これにより、ラベルは黒い背景に白いテキストを表示します。デフォルトでは、ラベルはテキストを表示しません。
リスナー・ベース・クラスの追加
JUCEでは、ボタンやスライダーなど、他のオブジェクトに状態の変化を知らせる必要のあるコントロールの多くはブロード キャスターオブジェクトの変更に対応するために、他のクラスがブロードキャスター・オブジェクトの変更に応答するためには、他のクラスがリスナーリスナーは、そのブロードキャスターの特定のタイプに登録する必要があります。リスナーはまた、そのタイプの少なくとも1つの特定のブロードキャスターオブジェクトに登録される必要があります。(JUCEのブロードキャスター・リスナーシステムはobserver pattern.)多くの放送局オブジェクトは、ネストされたListener
クラスを継承することで、そのタイプのブロードキャスターのリスナーになることができる。例えばButtonクラスは、ネストされたクラスButton::Listenerそのためである。
についてButton::Listenerクラスのインスタンスを含む、さまざまなボタンタイプをリッスンするために使用できます。TextButtonクラスは次のようになる。
を使用する。Button::Listenerクラスをベース・クラスとして追加する必要がある。私たちの場合はButton::Listenerクラスをベース・クラスとしている。MainContentComponent
クラス[1]:
class MainContentComponent : public juce::Component,
public juce::Button::Listener // [1]
{
public:
カスタム・クラスは、同じようにリスナー・ベース・クラスを追加することで、異なるタイプのブロードキャスターのリスナーになることができる。