著者 Amy Pearson (IDRsolutions) 翻訳 インターワーク
クラスを作成する
簡単なビューアを作るには、メニュー、ファイル・セレクタ、画像を表示するウィンドウが必要です。
まず、JFrameを継承したViewerというクラスと、コンストラクタから呼び出されるrunメソッドを作ります。
public class Viewer extends JFrame {
int screenWidth = Toolkit.getDefaultToolkit().getScreenSize().width;
int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height;
public Viewer() {
setTitle("Image Viewer");
run();
}
private void run() {
setSize(screenWidth - 100, screenHeight - 100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
Java.awt.ToolKitクラスを使って、画面の幅と高さを取得しています。これらは、後でフレームサイズや画像サイズを設定するのに使います。ビューアの名前は「Image Viewer」にしましたが、自由に変更してください。
私はスクリーンの幅と高さから100を引いて、より大きなビューアを持つことにしましたが、皆さんがどのようなサイズをお望みか、いろいろ試してみてください。
画像を表示するパネルの追加
フレームができたので、次にパネルとラベルを追加します。画像のラベルをScrollPaneの中に入れて、画像を上下にスクロールできるようにします。これは、runメソッドに以下を追加することで実現できます:
JLabel imageLabel = new JLabel();
imageLabel.setBounds(0, 0, getWidth() - 200, getHeight() - 200);
final JScrollPane scrollPane = new JScrollPane(imageLabel);
JPanel window = new JPanel();
//ここでは、ウィンドウレイアウトをborderlayoutに設定しました
// あなたが好きなレイアウトを選ぶことができます
window.setLayout(new BorderLayout());
window.add(scrollPane, BorderLayout.CENTER);
// add the JPanel window to the JFrame
add(window);
addMenu();
setVisible(true);
ここでは、画像ラベルの境界を、画面の幅と高さから200を引いた値に設定しましたが、これらの値は、画像をどの程度大きくしたいのか、あるいは小さくしたいのかに応じて変更できます。
メニューを追加する
ご覧の通りaddMenu()メソッドを呼び出しているのがわかるように、ファイルを開くためにはこのメソッドを作成します。
後でこのメソッドを使う必要があるので、グローバル変数としてJMenuItem openを作成します。
JMenuItem open = new JMenuItem("Open");
private void addMenu() {
JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu("File");
open.addActionListener(this);
fileMenu.add(open);
menuBar.add(fileMenu);
setJMenuBar(menuBar);
}
ここでは、メニュー・バーとアイテムを作成し、それらをフレームに追加してJMenuBarを設定します。
メニューに機能を追加する
ここでは、ViewerクラスがActionListenerを実装していることを確認します。これは、メニュー・アイテムがクリックされたときにファイルを開くためです。したがって、このメソッドを上書きする必要があります:
@Override
public void actionPerformed(ActionEvent e) {
if (e.getsource() == open) {
try {
openFile();
} catch (IOException ex) {
throw new RuntimeException(ex);
}
}
}
最後に、上で呼び出しているopenFileメソッドを作る必要があります。このメソッドはファイル・セレクタを開き、選択されたファイルを使ってimageLabel変数にアイコンを設定するものです。
private void openFile() throws IOException {
final FileDialog fileChooser = new FileDialog((Frame) null, "File chooser");
fileChooser.setMode(FileDialog.LOAD);
fileChooser.setVisible(true);
// ファイルが選択されていることを確認する
if (fileChooser.getDirectory() != null && fileChooser.getFile() != null) {
File file = new File(fileChooser.getDirectory() + fileChooser.getFile());
// このラインにはJDeli jarが必要です
BufferedImage image = JDeli.read(file);
final int imageWidth = image.getWidth(); // image width
final int imageHeight = image.getHeight(); // image height
//ここで、画像がウィンドウに収まるようにする必要があります
final float adjustment;
if (imageWidth > imageHeight) {
adjustment = 1 / (imageWidth / (float) (screenWidth - 200));
} else {
adjustment = 1 / (imageHeight / (float) (screenHeight - 200));
}
imageLabel.setIcon(new ImageIcon(image.getScaledInstance((int)(imageWidth * adjustment),
(int)(imageHeight * adjustment), Image.SCALE_SMOOTH)));
}
}
このコードを実行して、うまく動作すれば次のようになります:
次のステップ
画像を表示させたら、ここからがスタートです。画像の加工機能や注釈、特殊効果を加えるのはとても簡単です。私たちのJDeliのビューアをチェックすれば、たくさんのアイデアを発見することができるでしょう。ぜひ今すぐに無料のトライアルをお試しください。