- ベストアンサー
swingについて
私は現在swingのリッチクライアントについて勉強しているのですが 本を読んでも中々思った通りの画面を作成することができません。 そこでお願いなのですが http://scaw.net/products/pr_seisan.htm のホームページに表示されているような画面を swingで作れるでしょうか。また、このような画面の ソースを作って回答して頂けるか方いらっしゃいませんでしょうか どうか、宜しくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
全部の部品をつけるとソースが長くなるので とりあえずこんな雰囲気でしょうか? 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"); } }
その他の回答 (3)
- lailai2580
- ベストアンサー率64% (16/25)
テーブルに関してはAPIを見てそのまんま作りました。 今までJTableなんて使ったことありませんでしたので、 私もどんなメソッドが用意されているかなど知りませんでした。 ただ、表を扱うからにはセルに文字列を埋め込んだり 値を取得するメソッドくらい用意されてるはずなので、 それっぽいメソッドを適当に使っただけです。 表が大規模になるようならAbstractTableModelを継承したクラスを作って そこでセルデータを作成してもいいかなぁなどとは思いますね。 API見ても理解できなければGoogleなどで検索して 使い方を学ぶのも良いのではないでしょうか?
お礼
何度もご回答いただきありがとうございます 私もさんのようにAPIを見ながらサクサクと プログラミングができるようになりたいです。 他人の書いたプログラミングは読めるように なってきたのですが、自分で新しいプログラミング を組む事はまだ難しいのです。 これからも頑張っていきたいです。 色々とありがとうございました。
- lailai2580
- ベストアンサー率64% (16/25)
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"); } }
お礼
お忙しいところ度々、ご回答頂きありがとうございます lailai2580さんは書籍に載っていないようなプログラム を教えてくださいましたが、やはりJAVAのAPIリファレンス を見て試行錯誤しながら作成されたのでしょうか どのようにすれば本に載っていないクラスやメソッドを 使いこなしたり把握できるようになるのでしょうか
- lailai2580
- ベストアンサー率64% (16/25)
エクセルの表のようなものは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"); } }
お礼
お忙しいところご回答頂きありがとうございます。 ソースを実行してみたらエクセルの表の様な画面 になりました。ありがとうございました。 度々の質問で申しわけないのですが、タイトルの 箇所がABCDEFGHIJKLMNOとなっているのですがその 部分を自分で設定する事は可能でしょうか たとえば、名前、住所、電話番号 etcというような タイトルに変更したいのですがどうすればいいでしょうか また、表の部分にデータを表示させたいのですが どうすればいいでしょうか。例えば、名前のタイトル の箇所に鈴木一郎や住所の欄に東京都世田谷区という 様なデータを埋め込みたいのですが。 度々で申し訳ないのですがご存じでしたらご回答 いただけないでしょうか。宜しくお願いいたします。
お礼
お忙しいところご回答頂きありがとうございます。 やはり、各コンポーネットを一つずつ位置の指定と サイズの指定を行う方法なんですね。 それともうひとつお願いなのですがデータの一覧 表示をしている部分(エクセルの表みたいな部分) があると思うのですがそれは、どのように プログラミングしているのでしょうか。 もし、お時間があるようでしたらご回答いただけると ありがたいのですが。