GUIプログラミング3
28828 ワード
16.ツリー(JTree)の使用例
例16.1 JTreeの例を作成する.
例16.2 JTreeにノードを追加した例.
17.メニュー使用例
完全なメニューは、通常、メニューバー(JMemuBar)、ドロップダウンメニュー(JMemu)、メニュー項目(JMemuItem)の3つの部分から構成される.
例17.1メニュー使用例.
文字メニュー項目の中間の区切り線は、file Menu.addSeparator().
注意:配列を簡略化できます.
最後に,JPopupMenuの利用について議論する.その作成はJMenuの作成と何の違いもありません.ただし、JMenuBarに追加する必要はありません.たとえば、前例のJTextAreaなどのコンポーネントにバインドする必要があります.これは、コンポーネントのsetComponentPopupMenu(JPopupMenu popup)メソッドを使用して、ユーザーがこのコンポーネントを右クリックすると、メニューが自動的にポップアップされ、プログラマーがメニュー表示の位置を計算する必要がありません.
18.レイアウト管理
18.1フローレイアウト(FlowLayout)
18.2ボーダーレイアウト(BorderLayout)
18.3グリッドレイアウト(GridLayout)
18.4カードレイアウト(CardLayout)
カードは一度に1枚しか見られず、カードを任意に切り替えることができないため、CardLayoutは分類操作や複数の操作ステップがあり、各ステップに前後関係がある場合に適しています.最初のステップが完了したら、2枚目のカードに切り替え、3枚目のカードに切り替えます.典型的な例は、プログラムのインストールウィザードです.
注意:複数のカード間を切り替える必要がある場合は、JTablePaneを選択し、そのラベルでカードを選択するのが一般的です.
例一般的なソフトウェアインストールプロセスをシミュレートするカードレイアウトの使用例.
18.5グリッドレイアウトの強化(GridBagLayout)
GridLayoutに似ていますが、後者よりも強力で、使用も複雑です.行と列にまたがるセルを作成できます.
例拡張メッシュレイアウトの使用例.
例16.1 JTreeの例を作成する.
package GUI1;
import java.awt.BorderLayout;
import java.awt.Container;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.*;
public class demoJTree implements TreeSelectionListener {
JFrame jf;
JLabel jl;
Container con;
JTree jt;
JScrollPane jsp;
DefaultMutableTreeNode node,root;
public demoJTree(){
jf = new JFrame("JTree ");
jl = new JLabel();
con = jf.getContentPane();
root = new DefaultMutableTreeNode("Option");
node = new DefaultMutableTreeNode("A");
root.add(node);
node.add(new DefaultMutableTreeNode("a1"));
node.add(new DefaultMutableTreeNode("a2"));
node = new DefaultMutableTreeNode("B");
root.add(node);
node.add(new DefaultMutableTreeNode("b1"));
node.add(new DefaultMutableTreeNode("b2"));
node.add(new DefaultMutableTreeNode("b3"));
node.add(new DefaultMutableTreeNode("b4"));
jt = new JTree(root);
jt.addTreeSelectionListener(this);
jsp = new JScrollPane(jt);
con.add(jsp, BorderLayout.CENTER);
con.add(jl, BorderLayout.SOUTH);
jf.setSize(500, 400);
jf.setLocation(300, 200);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void valueChanged(TreeSelectionEvent e) {
jl.setText(e.getPath().toString());
}
public static void main(String[] args) {
new demoJTree();
}
}
例16.2 JTreeにノードを追加した例.
package GUI1;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.*;
public class addNodeInJTree implements TreeSelectionListener,ActionListener {
JFrame jf;
JLabel jl;
JPanel jp;
Container con;
JTree jt;
JScrollPane jsp;
JTextField jtf;
JButton jbtn;
private DefaultMutableTreeNode node,root;
private DefaultTreeModel dtm;
public addNodeInJTree(){
jf = new JFrame("JTree ");
jl = new JLabel();
jp = new JPanel();
jtf = new JTextField();
jtf.setColumns(11);
jbtn = new JButton(" ");
jbtn.addActionListener(this);
con = jf.getContentPane();
root = new DefaultMutableTreeNode("Option");
node = new DefaultMutableTreeNode("A");
root.add(node);
node.add(new DefaultMutableTreeNode("a1"));
node.add(new DefaultMutableTreeNode("a2"));
node = new DefaultMutableTreeNode("B");
root.add(node);
node.add(new DefaultMutableTreeNode("b1"));
node.add(new DefaultMutableTreeNode("b2"));
node.add(new DefaultMutableTreeNode("b3"));
node.add(new DefaultMutableTreeNode("b4"));
dtm = new DefaultTreeModel(root);
jt = new JTree(dtm);
jt.addTreeSelectionListener(this);
jsp = new JScrollPane(jt);
jp.setLayout(new FlowLayout());
jp.add(jl);
jp.add(jtf);
jp.add(jbtn);
con.add(jsp, BorderLayout.CENTER);
con.add(jp, BorderLayout.SOUTH);
jf.setSize(500, 400);
jf.setLocation(300, 200);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
DefaultMutableTreeNode rdmt;
public void valueChanged(TreeSelectionEvent e) {
jl.setText(e.getPath().toString());
rdmt = (DefaultMutableTreeNode)jt.getLastSelectedPathComponent();
}
public void actionPerformed(ActionEvent e) {
DefaultMutableTreeNode dmt;
if(e.getSource()==jbtn){
dmt = new DefaultMutableTreeNode(jtf.getText());
dtm.insertNodeInto(dmt,rdmt,0);
}
}
public static void main(String[] args) {
new addNodeInJTree();
}
}
17.メニュー使用例
完全なメニューは、通常、メニューバー(JMemuBar)、ドロップダウンメニュー(JMemu)、メニュー項目(JMemuItem)の3つの部分から構成される.
例17.1メニュー使用例.
package GUI1;
import java.awt.BorderLayout;
import java.awt.Container;
import javax.swing.*;
public class demoJMenu {
JFrame jf;
JScrollPane jsp;
JTextArea jta;
Container con;
JMenuBar jmb;
JMenu file,edit,format,check,help;
//
JMenuItem newItem,open,save,saveas,page,print,exit;
//
JMenuItem undo,cut,copy,paste,find,replace,selectall;
//
JMenuItem font;
JCheckBoxMenuItem wrap;
//
JMenuItem state;
//
JMenuItem helpItem,about;
public demoJMenu(){
jf = new JFrame("JMenu ");
jta = new JTextArea();
jsp = new JScrollPane(jta);
con = jf.getContentPane();
createMenu();
jf.setJMenuBar(jmb);
con.add(jsp, BorderLayout.CENTER);
jf.setSize(500, 400);
jf.setLocation(300, 200);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void createMenu() {
jmb = new JMenuBar();
file = new JMenu(" ");
edit = new JMenu(" ");
format = new JMenu(" ");
check = new JMenu(" ");
help = new JMenu(" ");
// newItem,open,save,saveas,page,print,exit
newItem = new JMenuItem(" ");
open = new JMenuItem(" ..");
save = new JMenuItem(" ..");
saveas = new JMenuItem(" ..");
page = new JMenuItem(" ..");
print = new JMenuItem(" ..");
exit = new JMenuItem(" ");
file.add(newItem);
file.add(open);
file.add(save);
file.add(saveas);
file.add(page);
file.add(print);
file.add(edit);
jmb.add(file);
// undo,cut,copy,paste,find,replace,selectall;
undo = new JMenuItem(" ");
cut = new JMenuItem(" ");
copy = new JMenuItem(" ");
paste = new JMenuItem(" ");
find = new JMenuItem(" ..");
replace = new JMenuItem(" ..");
selectall = new JMenuItem(" ");
edit.add(undo);
edit.addSeparator();
edit.add(cut);
edit.add(copy);
edit.add(paste);
edit.addSeparator();
edit.add(find);
edit.add(replace);
edit.addSeparator();
edit.add(selectall);
jmb.add(edit);
// JMenuItem font;JCheckBoxMenuItem wrap;
wrap = new JCheckBoxMenuItem(" ");
font = new JMenuItem(" ");
format.add(wrap);
format.add(font);
jmb.add(format);
// JMenuItem state;
state = new JMenuItem(" ");
check.add(state);
jmb.add(check);
// JMenuItem helpItem,about;
helpItem = new JMenuItem(" ");
about = new JMenuItem(" ..");
help.add(helpItem);
help.add(about);
jmb.add(help);
}
public static void main(String[] args) {
new demoJMenu();
}
}
文字メニュー項目の中間の区切り線は、file Menu.addSeparator().
注意:配列を簡略化できます.
最後に,JPopupMenuの利用について議論する.その作成はJMenuの作成と何の違いもありません.ただし、JMenuBarに追加する必要はありません.たとえば、前例のJTextAreaなどのコンポーネントにバインドする必要があります.これは、コンポーネントのsetComponentPopupMenu(JPopupMenu popup)メソッドを使用して、ユーザーがこのコンポーネントを右クリックすると、メニューが自動的にポップアップされ、プログラマーがメニュー表示の位置を計算する必要がありません.
18.レイアウト管理
18.1フローレイアウト(FlowLayout)
18.2ボーダーレイアウト(BorderLayout)
18.3グリッドレイアウト(GridLayout)
18.4カードレイアウト(CardLayout)
カードは一度に1枚しか見られず、カードを任意に切り替えることができないため、CardLayoutは分類操作や複数の操作ステップがあり、各ステップに前後関係がある場合に適しています.最初のステップが完了したら、2枚目のカードに切り替え、3枚目のカードに切り替えます.典型的な例は、プログラムのインストールウィザードです.
注意:複数のカード間を切り替える必要がある場合は、JTablePaneを選択し、そのラベルでカードを選択するのが一般的です.
例一般的なソフトウェアインストールプロセスをシミュレートするカードレイアウトの使用例.
package GUI1;
import java.awt.CardLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class demoCardLayout implements ActionListener {
JFrame jf;
JPanel jp1,jp2,jp3;
JLabel jl1,jl2,jl3;
JButton nextBtn1,prevBtn1,nextBtn2,prevBtn2,OKBtn;
Container con;
CardLayout cl;
public demoCardLayout(){
jf = new JFrame("CardLayout ");
cl = new CardLayout();
con = jf.getContentPane();
con.setLayout(cl);
jl1 = new JLabel(" ");
nextBtn1 = new JButton(" ");
nextBtn1.addActionListener(this);
jp1 = new JPanel();
jp1.add(jl1);
jp1.add(nextBtn1);
con.add("first",jp1);
jl2 = new JLabel(" ");
prevBtn1 = new JButton(" ");
prevBtn1.addActionListener(this);
nextBtn2 = new JButton(" ");
nextBtn2.addActionListener(this);
jp2 = new JPanel();
jp2.add(jl2);
jp2.add(prevBtn1);
jp2.add(nextBtn2);
con.add("second", jp2);
jl3 = new JLabel(" ");
prevBtn2 = new JButton(" ");
prevBtn2.addActionListener(this);
OKBtn = new JButton(" ");
OKBtn.addActionListener(this);
jp3 = new JPanel();
jp3.add(jl3);
jp3.add(prevBtn2);
jp3.add(OKBtn);
con.add("third", jp3);
jf.setSize(500, 400);
jf.setLocation(300, 200);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e) {
Object obj = e.getSource();
if(obj==nextBtn1||obj==nextBtn2)
cl.next(con);
if(obj==prevBtn1||obj==prevBtn2)
cl.previous(con);
if(obj==OKBtn)
jf.dispose();
}
public static void main(String[] args) {
new demoCardLayout();
}
}
18.5グリッドレイアウトの強化(GridBagLayout)
GridLayoutに似ていますが、後者よりも強力で、使用も複雑です.行と列にまたがるセルを作成できます.
例拡張メッシュレイアウトの使用例.
package GUI1;
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.*;
public class demoGridBagLayout {
JFrame jf;
Container con;
GridBagLayout gbl;
private void makebutton(String name,GridBagLayout gbl,GridBagConstraints c){
JButton btn = new JButton(name);
// c
gbl.setConstraints(btn, c);
con.add(btn);
}
public demoGridBagLayout(){
jf = new JFrame(" ");
con = jf.getContentPane();
GridBagConstraints c = new GridBagConstraints();
gbl = new GridBagLayout();
con.setLayout(gbl);
c.fill = GridBagConstraints.BOTH;
//
c.weightx = 1.0;
makebutton("Button1",gbl,c);
makebutton("Button2",gbl,c);
makebutton("Button3",gbl,c);
c.gridwidth = GridBagConstraints.REMAINDER; //
makebutton("Button4",gbl,c);
//
c.weightx = 0.0; //
// gridwidth REMINDER,
makebutton("Button5",gbl,c);
//
c.gridwidth = GridBagConstraints.RELATIVE; // ,
makebutton("Button6",gbl,c);
c.gridwidth = GridBagConstraints.REMAINDER; //
makebutton("Button7",gbl,c);
//
c.gridwidth = 1; //
c.gridheight = 2;
c.weighty = 1;
makebutton("Button8",gbl,c);
// ,
c.weighty = 0.0;
c.gridwidth = GridBagConstraints.REMAINDER; //
c.gridheight = 1; //
makebutton("Button9",gbl,c);
makebutton("Button10",gbl,c);
//
jf.setSize(500, 400);
jf.setLocation(300, 200);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new demoGridBagLayout();
}
}