import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import javax.swing.Box;
import javax.swing.ButtonGroup;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JRadioButton;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
public class SwingComponent {
JFrame f=new JFrame("測試");
//定義一個按鈕,并為之指定圖示
Icon okIcon=new ImageIcon("ico/ok.png");
JButton ok=new JButton("确認",okIcon);
//定義一個單選按鈕,初始處于選中狀态
JRadioButton male=new JRadioButton("男",true);
//定義一個單選按鈕,初始處于沒有選中狀态
JRadioButton female=new JRadioButton("女",false);
//定義一個ButtonGroup,用于将上面兩個JRadioButton組合在一起
ButtonGroup bg=new ButtonGroup();
//定義一個複選框,初始處于沒有選中狀态
JCheckBox married=new JCheckBox("是否已婚?",false);
String[] colors=new String[]{"紅色","綠色","藍色"};
//定義一個下拉選擇框
JComboBox<String> colorChooser=new JComboBox<>(colors);
//定義一個清單選擇框
JList<String> colorList=new JList<>(colors);
//定義一個8行、20列的多行文本域
JTextArea ta=new JTextArea(,);
//定義一個40列的單行文本域
JTextField name=new JTextField();
JMenuBar mb=new JMenuBar();
JMenu file=new JMenu("檔案");
JMenu edit=new JMenu("編輯");
//建立“建立"菜單項,并為之指定圖示
Icon newIcon=new ImageIcon("ico/new.png");
JMenuItem newItem=new JMenuItem("建立",newIcon);
//建立“儲存"菜單項,并為之指定圖示
Icon saveIcon=new ImageIcon("ico/save.png");
JMenuItem saveItem=new JMenuItem("儲存",saveIcon);
//建立"退出"菜單項,并為之指定圖示
Icon exitIcon=new ImageIcon("ico/exit.png");
JMenuItem exitItem=new JMenuItem("退出",exitIcon);
JCheckBoxMenuItem autoWrap=new JCheckBoxMenuItem("自動換行");
//建立“複制"菜單項,并為之指定圖示
JMenuItem copyItem=new JMenuItem("複制",new ImageIcon("ico/copy.png"));
//建立"粘貼"菜單項,并為之指定圖示
JMenuItem pasteItem=new JMenuItem("粘貼",new ImageIcon("ico/paste.png"));
JMenu format=new JMenu("格式");
JMenuItem commentItem=new JMenuItem("注釋");
JMenuItem cancelItem=new JMenuItem("取消注釋");
//定義一個右鍵菜單用于設定程式風格
JPopupMenu pop=new JPopupMenu();
//用于組合3個風格菜單項的ButtonGroup
ButtonGroup flavorGroup=new ButtonGroup();
//建立5個單選按鈕,用于設定程式的外觀風格
JRadioButtonMenuItem metalItem=new JRadioButtonMenuItem("Metal風格",true);
JRadioButtonMenuItem nimbusItem=new JRadioButtonMenuItem("Nimbus風格");
JRadioButtonMenuItem windowsItem=new JRadioButtonMenuItem("Windows風格");
JRadioButtonMenuItem classicItem=new JRadioButtonMenuItem("Windows經典風格");
JRadioButtonMenuItem motifItem=new JRadioButtonMenuItem("Motif風格");
public void init(){
//建立一個裝載了文本框、按鈕的JPanel
JPanel bottom=new JPanel();
bottom.add(name);
bottom.add(ok);
f.add(bottom,BorderLayout.SOUTH);
//建立一個裝載了下拉選擇框、三個JCheckBox的JPanel
JPanel checkPanel=new JPanel();
checkPanel.add(colorChooser);
bg.add(male);
bg.add(female);
checkPanel.add(male);
checkPanel.add(female);
checkPanel.add(married);
//建立一個垂直排列元件的Box,盛裝多行文本域JPanel
Box topLeft=Box.createVerticalBox();
//使用JScrollPane作為普通元件的JViewPort
JScrollPane taJsp=new JScrollPane(ta);
topLeft.add(taJsp);
topLeft.add(checkPanel);
//建立一個水準排列元件的Box,盛裝topLeft、colorList
Box top=Box.createHorizontalBox();
top.add(topLeft);
top.add(colorList);
//将top Box容器添加到視窗的中間
f.add(top);
//--------------下面開始組合菜單,并為 菜單添加監聽器------------------
//為newItem設定快捷鍵,設定快捷鍵時要使用大寫字母
newItem.setAccelerator(KeyStroke.getKeyStroke('N',InputEvent.CTRL_MASK));
/* newItem.addActionListener(e -> ta.append("使用者單擊了”建立“菜單\n"));*/
//為file菜單添加菜單項
file.add(newItem);
file.add(saveItem);
file.add(exitItem);
//為edit菜單添加菜單項
edit.add(autoWrap);
//使用addSeparator方法添加菜單分割線
edit.addSeparator();
edit.add(copyItem);
edit.add(pasteItem);
//為commentItem元件添加提示資訊
commentItem.setToolTipText("将程式代碼注釋起來!");
//為format菜單添加菜單項
format.add(commentItem);
format.add(cancelItem);
//使用添加new JMenuItem("-")的方式不能添加菜單分隔符
edit.add(new JMenuItem("-"));
//将format菜單組合到edit菜單中,進而形成 二級菜單
edit.add(format);
//将file、edit菜單添加到mb菜單條中
mb.add(file);
mb.add(edit);
//為f視窗設定 菜單條
f.setJMenuBar(mb);
//-------------------下面開始組合右鍵菜單,并安裝右鍵菜單----------------
flavorGroup.add(metalItem);
flavorGroup.add(nimbusItem);
flavorGroup.add(windowsItem);
flavorGroup.add(classicItem);
flavorGroup.add(motifItem);
pop.add(metalItem);
pop.add(nimbusItem);
pop.add(windowsItem);
pop.add(classicItem);
pop.add(motifItem);
//為5個風格菜單建立事件監聽器
/*ActionListener flavorListener= e -> {
try{
}catch(Exception ee){
ee.printStackTrace();
}
}*/
ta.setComponentPopupMenu(pop);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setVisible(true);
}
public static void main(String [] args){
//設定Swing視窗使用Java風格
//JFrame.setDefaultLookAndFeelDecorated(true);
new SwingComponent().init();
}
}
AWT元件的Swing實作