Java JFileChooserでファイルのフィルタリング方法について

このQ&Aのポイント
  • Java JFileChooserを使用してファイルのフィルタリングを行う方法について教えてください。
  • Windows7のペイントと同様に、JFileChooserを使ってファイルをフィルタリングすることはできるのでしょうか?
  • フィルタリング方法について詳しく教えてください。
回答を見る
  • ベストアンサー

Java JFileChooser

こんにちは。趣味でプログラミングをしているものです。 さっそくですが、質問させていただきます。 まず、以下のコードをみていただきたいのですが・・・ public class test03 extends JFrame { DrawPanel dp01; test03() { super("filedialog test"); setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); dp01 = new DrawPanel(); add( dp01 ); setResizable( false ); setLocation( 170,300 ); pack(); setVisible( true ); } /** * @param args */ public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ new test03(); } } -------------------------------------------------------- class DrawPanel extends JPanel implements ActionListener { JButton btOpen; JButton btSave; DrawPanel() { super(); setLayout( null ); setPreferredSize( new Dimension( 200, 240 )); setBackground( new Color( 220,240, 230 )); btOpen = new JButton( "open"); btSave = new JButton( "save"); btOpen.addActionListener( this ); btSave.addActionListener( this ); add( btOpen ); add( btSave ); btOpen.setBounds( 0,0, 100,40 ); btSave.setBounds( 100,0, 100, 40 ); } public void actionPerformed( ActionEvent ae01 ) { if( ae01.getSource() == btOpen ) { JFileChooser jfc = new JFileChooser(); FileNameExtensionFilter filter = new FileNameExtensionFilter( "jpg and gif files","jpg","gif"); jfc.setFileFilter( filter ); int retvalue = jfc.showOpenDialog( null ); if( retvalue == JFileChooser.APPROVE_OPTION ) { //System.out.println( "you choosed a file : "); System.out.println( jfc.getCurrentDirectory().getName() ); System.out.println( jfc.getSelectedFile().getName() ); System.out.println( jfc.getSelectedFile().getAbsolutePath()); } } } } DrawPanel クラスの中の FileNameExtensionFilter についてなのですが、 コンストラクタの引数をこのように指定すると、 jpg と gif のファイルが同時にフィルターされ抽出されるのですが、 Windows7 に標準で付属しているペイントだと、 拡張子一種類ずつのファイルがフィルターにより抽出されます。 JFileChooser を用いても、ペイントのようなファイルの フィルタリングはできるものでしょうか? ご存知のかた、教えていただけないでしょうか? よろしくお願いします。

noname#173931
noname#173931
  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.1

未確認ですが。 JFileChooser jfc = new JFileChooser(); jfc.setFileFilter( new FileNameExtensionFilter( "jpg files","jpg") ); jfc.addChoosableFileFilter( new FileNameExtensionFilter( "gif files","gif") ); とすればいけそうな気がします。

noname#173931
質問者

お礼

こちらの質問にも答えていただきありがとうございます。 さっそく指摘していただいた addChoosableFileFilter を使わせていただき一種類ごとの フィルタリングができました。 貴重な時間をさいての回答、ありがとうございました。

関連するQ&A

  • Java BufferedImage

    こんにちは。趣味でプログラミングをしている者です。 さっそくですが質問させていただきます。 JFileChooser から gif ファイルを取得し その画像上に文字列を重ねるようなツールのようなものを 作っているのですが、 加工された状態の画像を表示したいのですが、 もとの画像が表示されてしまいます。 以下のコードをみていただいて、どこが悪いのか 教えていただけないでしょうか? よろしくお願いします。 import java.awt.*; import java.awt.event.*; import java.awt.image.*; import java.io.*; import javax.imageio.ImageIO; import javax.swing.*; import javax.swing.filechooser.*; class DrawPanel extends JPanel implements ActionListener { JButton btOpen; JButton btSave; JFileChooser chooser; FileNameExtensionFilter filter01; FileNameExtensionFilter filter02; BufferedImage newImage; DrawPanel() { super(); setLayout( null ); setPreferredSize( new Dimension( 200, 240 )); setBackground( new Color( 220,240, 230 )); btOpen = new JButton( "open"); btSave = new JButton( "save"); btOpen.addActionListener( this ); btSave.addActionListener( this ); add( btOpen ); add( btSave ); btOpen.setBounds( 0,0, 100,40 ); btSave.setBounds( 100,0, 100, 40 ); chooser = new JFileChooser(); filter01 = new FileNameExtensionFilter( "gif files", "gif" ); filter02 = new FileNameExtensionFilter( "jpg files", "jpg" ); chooser.setFileFilter( filter01 ); chooser.addChoosableFileFilter( filter02 ); newImage = null; } public void actionPerformed( ActionEvent ae01 ) { if( ae01.getSource() == btOpen ) { int retvalue = chooser.showOpenDialog( null ); if( retvalue == JFileChooser.APPROVE_OPTION ) { String filename = (String) chooser.getSelectedFile().getAbsolutePath(); try { newImage = ImageIO.read( new File( filename ) ); } catch( Exception e01 ) { e01.printStackTrace(); newImage = null; } // (a) if( newImage != null) { Graphics2D g2D = newImage.createGraphics(); g2D.setColor( Color.red ); Font font01 = new Font( "Monospaced", Font.ITALIC, 18 ); g2D.setFont( font01 ); g2D.drawString( "AC", 5, 5 ); } // (a) の終わり repaint(); } } } public void paintComponent( Graphics g ) { super.paintComponent(g); Graphics2D drawG2D = (Graphics2D) g; if( newImage == null ) { drawG2D.setColor( Color.green ); drawG2D.fillRect( 15, 50, 55, 70 ); } else { drawG2D.drawImage( newImage, 15, 50, this ); } } } ------------------------------------------------------ class test03 extends JFrame { DrawPanel dp01; test03() { super("filedialog test"); setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); dp01 = new DrawPanel(); add( dp01 ); setResizable( false ); setLocation( 170,300 ); pack(); setVisible( true ); } public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ new test03(); } } ------------------------------------------- (a) のところが悪いのだと思うのですが どのようにしたらよいのかわかりません 長文になり申しわけありませんが、 よろしくお願いします。

    • ベストアンサー
    • Java
  • javaのJTextFieldにマウスフォーカス

    お世話になります。 Q1)下記のコードに於きまして、JTextFieldにマウスフォーカス が当りますと、その旨、System.out.println("JTextField_tt")と表示する方法をお教えください。 import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.border.LineBorder; public class EObjectTest extends JFrame implements ActionListener { public static JButton b1; public static JButton b2; public static JTextField tt; static EObjectTest frame; public static void main(String args[]){ frame=new EObjectTest("AAAA"); frame.setVisible(true); } EObjectTest(String title) { setTitle(title); setBounds(100, 100, 300, 250); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel p = new JPanel(); // ボタン作成・追加 b1 = new JButton("One"); b2 = new JButton("Two"); tt = new JTextField("aaa"); LineBorder border = new LineBorder(Color.RED, 2, true); tt.setBorder(border); tt.setColumns(15); p.add(b1); p.add(b2); p.add(tt); Container contentPane = getContentPane(); contentPane.add(p, BorderLayout.CENTER); // リスナ登録 b1.addActionListener(this); b2.addActionListener(this); tt.addActionListener(this); } public void actionPerformed(ActionEvent e) { // getSource() でイベントソースのオブジェクトを獲得し // Button クラスにキャストする JButton b = (JButton)e.getSource(); // JTextField ttt = (JTextField)e.getSource(); if (b==b1) { System.out.println("Oneのボタン"); } if (b==b2) { System.out.println("Twoのボタン"); } /* if (ttt==tt) { System.out.println("JTextField_tt"); } */ } } 以上

    • ベストアンサー
    • Java
  • java起動時にボタンが表示されない

    Javaの初心者です。以下のプログラムを起動するとJTextAreaとJLabel は、表示されるのですが、JButtonが表示されません。起動後にボタンの配置したところを触るとボタンが表示されるようになるのですが、ボタンのアクションリスナーが動作してしまいます。起動時にボタンも表示できるようにするには、どうしたらよいでしょうか? public class test_pro extends JFrame{ private static final long serialVersionUID = 1L; private JLabel label1;     JButton buton1,button2;     public JTextArea lt1; public test_pro() { this.setUndecorated(true);    GraphicsDevice device = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); device.setFullScreenWindow(this); Container contentPane = getContentPane(); contentPane.setLayout(null); label1 = new JLabel("menu"); Font f1=new Font("Serif",1,22); label1.setFont(f1); label1.setForeground(Color.red);     contentPane.add(label1); lt1=new JTextArea(3,3); JScrollPane pane=new JScrollPane(lt1); pane.setBounds(new Rectangle(50,300,550,150)); contentPane.add(pane);     button1 = new JButton("SendRequestTest!"); button2 = new JButton("ReceiveResponseTest!"); label1.setBounds(new Rectangle(50,20,200,20)); button1.setBounds(new Rectangle(50,80,230,20)); button2.setBounds(new Rectangle(50,110,230,20));  contentPane.add(button1); contentPane.add(button2); button1.addActionListener(new MyJsendActionAdapter()); button2.addActionListener(new MyJreceiveActionAdapter());     this.setDefaultCloseOperation(EXIT_ON_CLOSE);     this.setVisible(true);    } /*以下省略*/

  • Javaのメモリ・リークについて

    Javaのメモリ・リークについて 以下のコードはスレッド内で、無限ループをしています。 コンストラクタで呼び出し、ずっとこのままにしておいてもフリーズするか否かが知りたいです。 (jconsole.jarというツールがありますが、まだ理解に至っておりません。) ご存知の方がおられましたら教えてください。 よろしくお願いいたします。 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; public class ActioneventRoopTest extends JFrame implements Runnable, ActionListener { JButton start = new JButton(); JButton change = new JButton("切り替え"); Boolean flag = true; public static void main(String[] args) { new ActioneventRoopTest(); } public ActioneventRoopTest() { change.addActionListener(this); start.addActionListener(this); this.add(change); this.pack(); this.setVisible(true); Thread thread = new Thread(this); thread.start(); } public void actionPerformed(ActionEvent e) { if (e.getSource() == change) { if (flag) { flag = false; } else if (!flag) { flag = true; } } } public void run() { while (true) { while (flag) { System.out.println("リンゴ"); } while (!flag) { System.out.println("ミカン"); } } } }

    • ベストアンサー
    • Java
  • javaのプログラムの通常起動について

    今日は 下記のコードは、フォームがapplet形式となります、また起動しますと例外エラーを発生します。 Q1)通常のForm(applet形式でない)で、正常に起動するための変更をお教えて、   頂けますと大変有難いです。 注)フォームがapplet形式のものは、差当たり考えていません。 お手数ですが、宜しくお願いします。 //================================= import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; public class ObjectTest extends JFrame implements ActionListener { JButton b1; JButton b2; ObjectTest() { // ボタン作成・追加 b1 = new JButton("One"); b2 = new JButton("Two"); add(b1); add(b2); // リスナ登録 b1.addActionListener(this); b2.addActionListener(this); } public void actionPerformed(ActionEvent e) { // getSource() でイベントソースのオブジェクトを獲得し // Button クラスにキャストする JButton b = (JButton)e.getSource(); // getActionCommand() でボタンのラベルを獲得する System.out.println("Label : "+e.getActionCommand()); // getSource() で獲得したオブジェクトとはじめに作った // ボタンのオブジェクトが一致するか調べる if (b==b1) { System.out.println("Oneのボタン"); } if (b==b2) { System.out.println("Twoのボタン"); } // ボタンのラベルで比較する場合には // String クラスの文字列比較用のメソッド equals() を使って // if ( e.getActionCommand().equals("One") ) とします } }

    • ベストアンサー
    • Java
  • javaで起こったバグ?!

    私が普段プログラムを書いてコンパイルすると、ほぼ確実といってもいいくらいにおかしなことが起きます。 ボタンを配置して、処理を書きます(ここではJTableが現れるという処理にします)、そしてコンパイルします、コンパイルは通ります、ウィンドウが現れます、ボタンを押したら処理が起きてJTableが現れるはずなのですが、ボタンを押すとコマンドプロンプトでわけわからん英語や数字が現れます(出力される)。 自分の書いたプログラムをeclipseでコピペしても、問題はありませんでした。 コマンドプロンプトを一度消して、直ったプログラムもあります。また、その逆に何度やっても直らないものもあります。 ↓私の書いたプログラムです。おかしいところ等がありましたらご指摘下さい。また解答者様のPCでコピペして、試してみて下さい。 import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Sukejuru extends JFrame implements ActionListener { JPanel p; public static void main(String args[]) { Sukejuru ske = new Sukejuru(); ske.setBounds(200,200,600,300); //大きさ&ウィンドウの位置 ske.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//クローズ ske.setVisible(true); } Sukejuru() { super("Myスケジュール"); JPanel p = new JPanel(); p.setBackground(Color.green); add(p); JButton b1 = new JButton("一月"); b1.addActionListener(this); b1.setActionCommand("b1"); p.add(b1); JButton b2 = new JButton("二月"); b2.addActionListener(this); b2.setActionCommand("b2"); p.add(b2); JButton b3 = new JButton("三月"); b3.addActionListener(this); b3.setActionCommand("b3"); p.add(b3); } public void actionPerformed(ActionEvent e) { JTable table = new JTable(5,5); JScrollPane sp = new JScrollPane(table); p.add(sp); } }

    • ベストアンサー
    • Java
  • ActionListener について

    JFrame の上に JPanel があり、JPanel の上に JButton があるとします。 JButton が押されたことを JFrame に知らせるにはどうしたらいいでしょうか。 わかるところまで書いてみました。 class MyFrame extends JFrame implements ActionListener { MyPanel myPanel = new MyPanel(); MyFrame() { myPanel.addActionListener(this); add(myPanel); } public void actionPerformed(ActionEvent e) { System.out.println("The button on the MyPanel was pressed!"); } public static void main(String[] args) { new MyFrame(); } } class MyPanel extends JPanel implements ActionListener { JButton button1 = new JButton(); MyPanel() { button1.addActionListener(this); add(button1); } public void actionPerformed(ActionEvent e) { } }

    • ベストアンサー
    • Java
  • javaについて質問

    import javax.swing.*; import java.awt.Color; import java.awt.Graphics; import java.awt.event.*; public class tt extends JFrame { public tt(){ setTitle("hogehoge"); setBounds( 10, 10, 300, 200); JButton btn1 = new JButton("続ける"); final JPanel p = new JPanel(); p.setBackground(Color.white); btn1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event){ } } ); p.add(btn1); getContentPane().add(p); } public static void main(String[] args){ tt test = new tt(); test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); test.setVisible(true); /* 実際に表示する */ } } Graphics g; g.drawString("ほげさんじょう",130,120);を追加しても コンパイルが通りません。 どうすれば画面に文字列を表示するんですか? あとテキストフィールドを追加するさいに、座標していとかして追加できないんですか?

  • javaのmainの中のループに割込を掛ける

    毎度、お世話になります。 javaのmainの中のループに割込を掛ける方法をお教えください。 添付コードの『Thread.currentThread().interrup()』は、旨く機能しません。 以上、宜しくお願いします。 =========== import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class T_try_loop extends JFrame{ JFrame frame=new JFrame(); T_try_loop(){ System.out.println("aaaa"); JPanel p1=new JPanel(); JButton button1=new JButton("button1"); button1.addActionListener(new TimButton1()); p1.add(button1); getContentPane().add(p1, BorderLayout.CENTER); } public static void main(String args[]){ T_try_loop frame=new T_try_loop(); frame.setTitle("TTTT"); frame.setBounds(10,10,400,300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); for(int j = 0;j < 80; j++){ try{ Thread.sleep(80); System.out.print("*"); } catch(InterruptedException e){ System.out.println(": main_loopに、今割り込まれました"); } } }//public static void main public class TimButton1 implements ActionListener{ @Override public void actionPerformed(ActionEvent ae){ String cmd =ae.getActionCommand(); if(cmd.equals("button1")){ Thread.currentThread().interrupt(); System.out.println("Button clicked"); } } }//public class TimButton1 }

    • ベストアンサー
    • Java
  • JFileChooserで選択したファイルをテーブルに追加したい

    現在未完成ですが、このような感じでボタンを押してJFileChooserを開いて選択したものをテーブルに格納するものを作ろうとしていますが、テーブルモデルに関する知識が浅く困っています。テーブルに格納するのは、String columnName[] = { "名前","サイズ","更新日時","拡張子" }; でそれぞれの項目に該当する内容をテーブルの各セルに出力したいです。 AbstractTableModelを使ってこのコードにさらに拡張しちゃんとしたものにしたいのですが、どこにどのようなコードを追加していったらよいでしょうか? また直す点がありましたら、教えていただけると嬉しく思います。お願いいたします。(一部コード略) public class Test extends JFrame {        : private JButton getJButton() {    : jButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { JFileChooser fileChooser = new JFileChooser(".");int state = fileChooser.showOpenDialog(null); File file = fileChooser.getSelectedFile(); if(state != JFileChooser.APPROVE_OPTION || file == null){ return; }}});} return jButton; } private JTable getJTable() {    : return jTable; } private JScrollPane getJScrollPane() {    : return jScrollPane; } public static void main(String[] args) {} public Test() { super(); initialize(); } private void initialize() { this.setSize(300,200); this.setContentPane(getJContentPane()); this.setTitle("テーブル"); } private javax.swing.JPanel getJContentPane() {   : return jContentPane; }

    • ベストアンサー
    • Java

専門家に質問してみよう