0

私はしばらく Java でコマンド ライン プログラムを開発しており、GUI ソリューションを実装する方法を調査しています。私はこれに慣れていないので、どんな助けも非常に役に立ちます。前もって感謝します。最近、ボタンについて別の質問をしましたが、今は別の質問があります。

アクションリスナーを使用してボタンに基づいてアクションを実行する方法を本から学んでいます。ただし、この本では、ボタンは単にテキスト出力を生成するメソッドを呼び出していました。

ユーザーが別のボタン/オプションを備えた新しいウィンドウに移動するボタンを押すことができるようにする方法が必要です。ユーザーが別のボタンを押して前のウィンドウに戻ることができる場合。誰かが以下の私の例の説明を含むスケルトンソリューションを見せてくれたら:

ユーザーが「ライブラリ メニュー」を押すと、「ライブラリ メニュー」と「アカウント メニュー」の 2 つのボタンが表示され、書籍の追加、書籍の削除などのオプションを含むウィンドウが表示され、最後のボタンでホームに戻ることができます。画面。ユーザーが「アカウントメニュー」を押すと、追加、削除、名前変更などのボタンと、ホーム画面/メインメニューに戻る最後のボタンを含む新しいウィンドウ/メニューが表示されます。

コマンド ラインでは、ライブラリを選択するとライブラリ クラスのメソッドが呼び出されるため、これは簡単でした。そのメソッドには、ユーザー入力に基づいてさまざまなメソッドを呼び出す switch ケースがあり、ユーザーが「e」を入力した場合、たとえば、switch ケースにはメソッドから戻るオプションがありました。つまり、return ステートメントにより、ユーザーはそのメソッドに戻りました。最初は(ホーム画面で)それを呼び出しました。

これに関するヘルプ/アドバイス/情報に非常に感謝しています!!!!

4

4 に答える 4

2

複数のウィンドウやフレームをユーザーに提示することは一般的にお勧めできません。

通常、ビューを切り替えたい場合は、CardLayoutを使用する必要があります。これにより、ユーザーのメイン ディスプレイの内容を変更できます。

ユーザーが好きなように異なるビュー間を移動できるJTabbedPaneを使用することもできます

于 2012-12-05T08:50:35.353 に答える
1

すべての「ウィンドウ」に JPanel を作成し、それを JFrame に切り替えることができます。将来変更できる同じデザインにするためには、ある種のモデリングが必要です: ボタンを追加するための生成ステップなどです。

Action-s (AbstractAction) を使用すると、Model-View-Controller 内のすべてを切り離して切り離すことができます。

実際のアプリは、おそらく 1 つのメイン JFrame であり、おそらくいくつかの JFrame を呼び出します。これは、@MadProgrammer によって提案されたアイデアです。JPanels は、JTabbedPane、JInternalFrame などにプラグインできます。

アクションを管理する JPanel を提供する MVC クラスを作成します。

于 2012-12-05T08:55:46.407 に答える
0

最初にすべてのウィンドウ(新しいウィンドウ)を作成し、ボタンをクリックしたときにのみ表示することをお勧めします。そうすれば、同じウィンドウのインスタンスが多くなることはありません。

public MainWindow extends JFrame
{
    private LibraryWindow libWin;
    private AccountsWindow accWin;

    public MainWindow()
    {
        libWin = new LibraryWindow();
        libWin.setParent(this);
        accWin = new AccountsWindow();
        accWin.setParent(this);

        ...

        this.show();
    }

    btnLib.addMouseListener( new MouseAdapter() { // Adding a mouseListener to your component
    // Mouse is pressed in this component
    @Override
    public void mousePressed( MouseEvent e ){
        libWin.show(); //shows your window on top of the main window

        //if you want to switch windows you can hide the parent
        this.hide();
    }
});


public LibraryWindow extends JFrame
{


    public LibraryWindow()
    {
        //create/design the window

        ...

        //don't show the window, the main window will do that
    }

    btnExit.addMouseListener( new MouseAdapter() { // Adding a mouseListener to your component
    // Mouse is pressed in this component
    @Override
    public void mousePressed( MouseEvent e ){

        //if you want to switch windows you can show the parent
        this.parent.show();

        this.hide(); //only hide the window in order to reuse it
        //restore the window to its initial state
    }
});
于 2012-12-05T09:07:35.683 に答える
0

actionListener を認識しているので、おそらく JFrame の作成方法を知っていて、ロジックは問題ないようです。私が間違っていたら訂正してください。必要なのは ActionListener のスケルトンだけですか?
ボタンの mouseListener の場合、これはおそらく問題なく機能するはずです。

JButton btnExit = new JButton("Exit"); // Creating the button

btnExit.addMouseListener( new MouseAdapter() { // Adding a mouseListener to your component
    // Mouse is pressed in this component
    @Override
    public void mousePressed( MouseEvent e ){
        yourFrame.dispose() // Closes your JFrame
    }
});

于 2012-12-05T08:50:03.517 に答える