• ベストアンサー

swingについて

私は現在swingのリッチクライアントについて勉強しているのですが 本を読んでも中々思った通りの画面を作成することができません。 そこでお願いなのですが http://scaw.net/products/pr_seisan.htm のホームページに表示されているような画面を swingで作れるでしょうか。また、このような画面の ソースを作って回答して頂けるか方いらっしゃいませんでしょうか どうか、宜しくお願いいたします。

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

  • ベストアンサー
回答No.1

全部の部品をつけるとソースが長くなるので とりあえずこんな雰囲気でしょうか? import java.awt.Color; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; public class Test extends JFrame implements ActionListener{  private JMenuItem menuItemQuit;  public Test(String title){   super(title);   // ウィンドウサイズ   this.setSize(800, 600);   // レイアウト   this.setLayout(null);   // ウィンドウクローズ時の処理   this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   // メニューバー作成   JMenuBar menuBar = new JMenuBar();   JMenu menuFile = new JMenu("ファイル");   menuItemQuit = new JMenuItem("終了");   menuItemQuit.addActionListener(this);   JMenu menuEdit = new JMenu("編集");   JMenu menuWindow = new JMenu("ウィンドウ");   JMenu menuTool = new JMenu("ツール");   JMenu menuHelp = new JMenu("ヘルプ");   menuFile.add(menuItemQuit);   menuBar.add(menuFile);   menuBar.add(menuEdit);   menuBar.add(menuWindow);   menuBar.add(menuTool);   menuBar.add(menuHelp);   this.setJMenuBar(menuBar);   // "検索条件"ボーダー   LineBorder lineBorder = new LineBorder(Color.BLACK, 1);   TitledBorder titledBorder = new TitledBorder(lineBorder, "検索条件");   JPanel panel = new JPanel();   panel.setLayout(null);   JLabel labelBusiness = new JLabel("事業部");   labelBusiness.setLocation(10, 20);   labelBusiness.setSize(54, 18);   panel.add(labelBusiness);   JComboBox comboBoxBusiness = new JComboBox();   String stringBusinessAll = new String("全て");   comboBoxBusiness.addItem(stringBusinessAll);   comboBoxBusiness.setLocation(90, 20);   comboBoxBusiness.setSize(55, 18);   panel.add(comboBoxBusiness);   JLabel labelOrderType = new JLabel("受注タイプ");   labelOrderType.setLocation(170, 20);   labelOrderType.setSize(72, 18);   panel.add(labelOrderType);   JComboBox comboBoxOrderType = new JComboBox();   String stringOrderTypeAll = new String("全て");   comboBoxOrderType.addItem(stringOrderTypeAll);   comboBoxOrderType.setLocation(270, 20);   comboBoxOrderType.setSize(55, 18);   panel.add(comboBoxOrderType);   JLabel labelProductSection = new JLabel("生産部門");   labelProductSection.setLocation(350, 20);   labelProductSection.setSize(72, 18);   panel.add(labelProductSection);   JComboBox comboBoxProductSection = new JComboBox();   String stringProductSectionAll = new String("全て");   comboBoxProductSection.addItem(stringProductSectionAll);   comboBoxProductSection.setLocation(450, 20);   comboBoxProductSection.setSize(55, 18);   panel.add(comboBoxProductSection);   JLabel labelTrade = new JLabel("取引先");   labelTrade.setLocation(10, 60);   labelTrade.setSize(54, 18);   panel.add(labelTrade);   JTextField textFieldTrade = new JTextField();   textFieldTrade.setLocation(90, 60);   textFieldTrade.setSize(100, 18);   panel.add(textFieldTrade);   panel.setBounds(10, 10, 770, 200);   panel.setBorder(titledBorder);   this.add(panel);   // ウィンドウの表示   this.setVisible(true);  }  public void actionPerformed(ActionEvent e){   if(e.getSource() == menuItemQuit){    System.exit(0);   }  }  public static void main(String[] args) {   new Test("Test");  } }

tkwavek
質問者

お礼

お忙しいところご回答頂きありがとうございます。 やはり、各コンポーネットを一つずつ位置の指定と サイズの指定を行う方法なんですね。 それともうひとつお願いなのですがデータの一覧 表示をしている部分(エクセルの表みたいな部分) があると思うのですがそれは、どのように プログラミングしているのでしょうか。 もし、お時間があるようでしたらご回答いただけると ありがたいのですが。

その他の回答 (3)

回答No.4

テーブルに関してはAPIを見てそのまんま作りました。 今までJTableなんて使ったことありませんでしたので、 私もどんなメソッドが用意されているかなど知りませんでした。 ただ、表を扱うからにはセルに文字列を埋め込んだり 値を取得するメソッドくらい用意されてるはずなので、 それっぽいメソッドを適当に使っただけです。 表が大規模になるようならAbstractTableModelを継承したクラスを作って そこでセルデータを作成してもいいかなぁなどとは思いますね。 API見ても理解できなければGoogleなどで検索して 使い方を学ぶのも良いのではないでしょうか?

tkwavek
質問者

お礼

何度もご回答いただきありがとうございます 私もさんのようにAPIを見ながらサクサクと プログラミングができるようになりたいです。 他人の書いたプログラミングは読めるように なってきたのですが、自分で新しいプログラミング を組む事はまだ難しいのです。 これからも頑張っていきたいです。 色々とありがとうございました。

回答No.3

AbstractTableModelでセルデータを設定すれば可能です。 import java.awt.Color; import java.util.Vector; import javax.swing.*; import javax.swing.border.*; import javax.swing.table.*; public class Test3 extends JFrame{  Vector<String>[] data = new Vector[3];  public Test3(String title){   super(title);   // ウィンドウサイズ   this.setSize(400, 200);   this.setLayout(null);   // ウィンドウクローズ時の処理   this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   // 一覧ボーダー   LineBorder lineBorder = new LineBorder(Color.BLACK, 1);   TitledBorder titledBorderTable = new TitledBorder(lineBorder, "一覧");   JPanel panelTable = new JPanel();   panelTable.setLayout(null);   // セルのデータ作成   for(int i = 0; i < 3; i++){    data[i] = new Vector<String>();   }   // data[0]に名前、data[1]に住所、data[2]に電話番号   data[0].addElement("鈴木一郎");   data[1].addElement("東京都");   data[2].addElement("xxxxxxxxxx");   data[0].addElement("佐藤花子");   data[1].addElement("千葉県");   data[2].addElement("yyyyyyyyyy");   // テーブル作成   TableModel tableModel = new AbstractTableModel(){    // 行数    public int getRowCount(){     return 2;    }    // 列数    public int getColumnCount(){     return 3;    }    // row行column列の値をセット    public Object getValueAt(int row, int column){     return data[column].elementAt(row);    }    // タイトル部の値をセット    public String getColumnName(int column){     switch(column){     case 0:      return "名前";     case 1:      return "住所";     case 2:      return "電話番号";     }     return "";    }   };   JTable table = new JTable(tableModel);   JScrollPane scrollPane = new JScrollPane(table);   scrollPane.setLocation(10, 20);   scrollPane.setSize(350, 100);   scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);   scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);   panelTable.add(scrollPane);   panelTable.setBounds(10, 10, 370, 140);   panelTable.setBorder(titledBorderTable);   this.add(panelTable);   // ウィンドウの表示   this.setVisible(true);  }  public static void main(String[] args) {   new Test3("Test3");  } }

tkwavek
質問者

お礼

お忙しいところ度々、ご回答頂きありがとうございます lailai2580さんは書籍に載っていないようなプログラム を教えてくださいましたが、やはりJAVAのAPIリファレンス を見て試行錯誤しながら作成されたのでしょうか どのようにすれば本に載っていないクラスやメソッドを 使いこなしたり把握できるようになるのでしょうか

回答No.2

エクセルの表のようなものはJTableでそれらしいものができますよ。 import java.awt.Color; import javax.swing.*; import javax.swing.border.*; public class Test2 extends JFrame{  public Test2(String title){   super(title);   // ウィンドウサイズ   this.setSize(800, 250);   // レイアウト   this.setLayout(null);   // ウィンドウクローズ時の処理   this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   // ボーダー作成   LineBorder lineBorder = new LineBorder(Color.BLACK, 1);   TitledBorder titledBorderTable = new TitledBorder(lineBorder, "一覧");   JPanel panelTable = new JPanel();   panelTable.setLayout(null);   // テーブル作成   JTable table = new JTable(10, 15);   JScrollPane scrollPane = new JScrollPane(table);   scrollPane.setLocation(10, 20);   scrollPane.setSize(750, 170);   scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);   scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);   panelTable.add(scrollPane);   panelTable.setBounds(10, 10, 770, 200);   panelTable.setBorder(titledBorderTable);   this.add(panelTable);   // ウィンドウの表示   this.setVisible(true);  }  public static void main(String[] args) {   new Test2("Test2");  } }

tkwavek
質問者

お礼

お忙しいところご回答頂きありがとうございます。 ソースを実行してみたらエクセルの表の様な画面 になりました。ありがとうございました。 度々の質問で申しわけないのですが、タイトルの 箇所がABCDEFGHIJKLMNOとなっているのですがその 部分を自分で設定する事は可能でしょうか たとえば、名前、住所、電話番号 etcというような タイトルに変更したいのですがどうすればいいでしょうか また、表の部分にデータを表示させたいのですが どうすればいいでしょうか。例えば、名前のタイトル の箇所に鈴木一郎や住所の欄に東京都世田谷区という 様なデータを埋め込みたいのですが。 度々で申し訳ないのですがご存じでしたらご回答 いただけないでしょうか。宜しくお願いいたします。

関連するQ&A