1

こんにちは私はMainFrameクラスを持っています:

public class MainFrame extends JFrame{

    private JLabel originalLabel;
    private JLabel filteredImage;

    public MainFrame(){
        setExtendedState(JFrame.MAXIMIZED_BOTH);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());
        initComponents();
        setVisible(true);
    }

    private void initComponents(){
        ImageFilterMenuBar menuBar = new ImageFilterMenuBar();

        originalLabel = new JLabel("Test1");
        filteredImage = new JLabel("Test2");

        Component verticalStrut = Box.createVerticalStrut(10);

        JPanel central = new JPanel();
        central.add(originalLabel);
        central.add(verticalStrut);
        central.add(filteredImage);


        add(new RadioButtonsPanel(), BorderLayout.SOUTH);
        add(central, BorderLayout.CENTER);

        setJMenuBar(menuBar);
    }

}

MenuBarクラス:

public class ImageFilterMenuBar extends JMenuBar{

    private JMenu fileMenu;
    private JMenuItem openImage;
    private JMenuItem exit;


    public ImageFilterMenuBar(){
        initCompoments();
    }

    private void initCompoments() {
        fileMenu = new JMenu("File");
        setMenuItems();
        add(fileMenu);
    }

    private void setMenuItems(){
        openImage = new JMenuItem("Open Image");
        exit = new JMenuItem("Exit");

        openImage.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,
                InputEvent.CTRL_MASK));

        exit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_CANCEL,InputEvent.SHIFT_MASK));

        openImage.addActionListener(new OpenListener());
        exit.addActionListener(new ExiteListener());

        fileMenu.add(openImage);
        fileMenu.add(exit);
    }

}

MenuBarクラスでは、OpenButtonをシーイングできます。JFileChooserを開いて、選択したファイルのURLを返します。そのため、このURLをメインフレームクラスに送信して、このファイルを表示する方法がわかりません。何かアイデアはありますか?

4

2 に答える 2

4

MainFrame最も簡単な解決策は、への参照を渡すことですImageFilterMenuBar

ImageFilterMenuBar menuBar = new ImageFilterMenuBar(this);

次に、メインフレームに以下のようなメソッドを追加します。

public void setImageFile(File file) {
  // do whatever here
}

では、メンバー変数内のImageFilterMenuBarへの参照を保持し、それを使用して、がファイルを返したら呼び出します。MainFramesetImageFile()JFileChooser

ソリューションを実装するのがより難しいのは、オブザーバーパターンを実装することです。これは、リスナーがSwingで作業する方法です。メインフレームをリスナーとして登録し、他のクラスがファイル選択の変更について通知するクラスになります。

ファイルチューザを開いて、選択したファイルを取得するには、次の手順に従います。

JFileChooser chooser = new JFileChooser(path);
int result = chooser.showOpenDialog(mainFrame);
File file = chooser.getSelectedFile();
if (result == JFileChooser.APPROVE_OPTION && file != null && file.exists()) {
  mainFrame.setImageFile(file);
}
于 2012-09-21T11:47:43.300 に答える
2

メニューバーやフレームを拡張せず、同じアプリでそれらへの参照を保持するだけです。..

「URLクラス属性を持つ」を追加しようとしていました。ただし、URLをどのように使用しているかは明確ではありません。Iの場合JEditorPaneは、URL属性の代わりにそのインスタンスを宣言し、リスナーでの選択時にページを直接設定する場合があります。

于 2012-09-21T11:59:11.470 に答える