import javax.swing.*;
import javax.swing.border.*;
import javax.swing.text.*;
import javax.swing.event.*;
import java.awt.event.*;
import java.awt.*;
import java.util.*;
import java.io.*;
import java.lang.*;
import javax.swing.undo.*;
public class MainFrame
{
JDesktopPane desktop;
JFrame topFrame;
JMenuBar menuBar;
JPopupMenu popupMenu;
public MainFrame()
{
topFrame = new JFrame("MainFrame-Look and Feel");
topFrame.setBounds(100,100,630,400); // --- setBounds(x座標,y座標,寬,高)
buildContent();
buildMenuBar();
buildToolBar();
popupMenu = buildPopupMenu();
topFrame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}); //end of addWindowListener
topFrame.setVisible(true);
} //end of MainFrame()
public void buildContent()
{
desktop = new JDesktopPane();
topFrame.getContentPane().add(desktop);
}//end of buildContent()
public void buildMenuBar()
{
String menuName;
menuBar = new JMenuBar();
menuName = "File";
String[] fileFunctions = {"New", "Open", "Close", "Exit"};
char[] fileMnemonic = {'N', 'O', 'L', 'X'};
JMenu mfile = buildMenu(menuName,fileFunctions,fileMnemonic);
menuName = "Edit";
JMenuItem item;
JMenu medit = new JMenu(menuName);
item = medit.add(new ActionSet("Undo",null));
item.setActionCommand("Undo");
item.setMnemonic('Z');
item.setAccelerator( KeyStroke.getKeyStroke('Z',java.awt.Event.CTRL_MASK,false));
item = medit.add(new ActionSet("Redo",null));
item.setActionCommand("Redo");
item.setMnemonic('Y');
item.setAccelerator( KeyStroke.getKeyStroke('Y',java.awt.Event.CTRL_MASK,false));
medit.addSeparator();
Action action = new DefaultEditorKit.CopyAction();
action.putValue(Action.NAME, "Copy");
item = medit.add(action);
item.setMnemonic('T');
item.setAccelerator( KeyStroke.getKeyStroke('T',java.awt.Event.CTRL_MASK,false));
action = new DefaultEditorKit.CutAction();
action.putValue(Action.NAME, "Cut");
item = medit.add(action);
item.setMnemonic('C');
item.setAccelerator( KeyStroke.getKeyStroke('C',java.awt.Event.CTRL_MASK,false));
action = new DefaultEditorKit.PasteAction();
action.putValue(Action.NAME, "Paste");
item = medit.add(action);
item.setMnemonic('P');
item.setAccelerator( KeyStroke.getKeyStroke('P',java.awt.Event.CTRL_MASK,false));
JMenu malign = buildAlignMenu();
menuName = "Insert";
String[] insertFunctions = {"Picture", "Object"};
char[] insertMnemonic = null;
JMenu minsert = buildMenu(menuName,insertFunctions,insertMnemonic);
menuName = "Demo";
String[] demoFunctions = {"Slider", "Tree Structure", "Table Structure", "Password"};
char[] demoMnemonic = {'S', 'T', 'A', 'P'};
JMenu mdemo = buildMenu(menuName,demoFunctions,demoMnemonic);
menuName = "Help";
String[] helpFunctions = {"About this Program", "Open Help Window"};
char[] helpMnemonic = {'B', 'H'};
JMenu mhelp = buildMenu(menuName,helpFunctions,helpMnemonic);
//設定Hot Key Alt+'?'
mfile.setMnemonic('F');
medit.setMnemonic('E');
malign.setMnemonic('A');
minsert.setMnemonic('I');
mdemo.setMnemonic('D');
mhelp.setMnemonic('H');
menuBar.add(mfile); //將 File 選項加到MenuBar中
menuBar.add(medit); //將 Edit 選項加到MenuBar中
menuBar.add(malign); //將 Align 選項加到MenuBar中
menuBar.add(mdemo); //將 Demo 選項加到MenuBar中
menuBar.add(mhelp); //將 Help 選項加到MenuBar中
topFrame.setJMenuBar(menuBar);
}//end of buildMenuBar()
public JMenu buildMenu(String menuName, String[] functions, char[] mnemonic)
{
ActionSet action;
JMenuItem item;
JMenu menu = new JMenu(menuName);
for (int i=0; i<functions.length; i++)
{
item = menu.add(new ActionSet(functions[i],null));
item.setActionCommand(functions[i]);
if (mnemonic != null)
{
item.setMnemonic(mnemonic[i]);
item.setAccelerator( KeyStroke.getKeyStroke(mnemonic[i],java.awt.Event.CTRL_MASK,false));
}
}
return menu;
}//end of buildMenu()
public JMenu buildAlignMenu()
{
JRadioButtonMenuItem aL;
JRadioButtonMenuItem aC;
JRadioButtonMenuItem aR;
JMenu malign = new JMenu("Align");
aL = new JRadioButtonMenuItem("Align Left");
aC = new JRadioButtonMenuItem("Align Center");
aR = new JRadioButtonMenuItem("Align Right");
SimpleAttributeSet attrset = new SimpleAttributeSet();
aL.addItemListener(new HandleItemEvent("LEFT",attrset));
aC.addItemListener(new HandleItemEvent("CENTER",attrset));
aR.addItemListener(new HandleItemEvent("RIGHT",attrset));
ButtonGroup buttonGroup = new ButtonGroup();
buttonGroup.add(aL);
buttonGroup.add(aC);
buttonGroup.add(aR);
JCheckBoxMenuItem demo1 = new JCheckBoxMenuItem("demo1", true);
JCheckBoxMenuItem demo2 = new JCheckBoxMenuItem("demo2");
JCheckBoxMenuItem demo3 = new JCheckBoxMenuItem("demo3");
malign.add(aL);
malign.add(aC);
malign.add(aR);
malign.addSeparator();
malign.add(demo1);
malign.add(demo2);
malign.add(demo3);
return malign;
}//end of buildAlignMenu()
class HandleItemEvent implements ItemListener
{
String align;
SimpleAttributeSet attrset;
HandleItemEvent(String align, SimpleAttributeSet attrset)
{
this.align = align;
this.attrset = attrset;
}
public void itemStateChanged(ItemEvent e)
{
NewFrame currentFrame = (NewFrame)desktop.getSelectedFrame();
JTextPane pane = currentFrame.getTextPane();
StyledDocument docs = pane.getStyledDocument();
int offset = pane.getSelectionStart();
int end = pane.getSelectionEnd();
int selected_length = end - offset;
if(currentFrame == null) { return;}
if (align.equals("LEFT"))
StyleConstants.setAlignment(attrset, StyleConstants.ALIGN_LEFT);
if (align.equals("CENTER"))
StyleConstants.setAlignment(attrset, StyleConstants.ALIGN_CENTER);
if (align.equals("RIGHT"))
StyleConstants.setAlignment(attrset, StyleConstants.ALIGN_RIGHT);
docs.setParagraphAttributes(offset, selected_length, attrset, true);
}//end of itemStateChanged()
}//end of HandleItemEvent class
public void buildToolBar()
{
JToolBar toolBar = new JToolBar();
toolBar.setFloatable(true);
String[] newFunctions = {"New"};
String[] newPics = {"icons/new16.gif"};
buildToolButton(toolBar,newFunctions,newPics);
toolBar.addSeparator();
String[] editFunctions = {"Cut","Copy","Paste"};
String[] editPics = {"icons/cut16.gif","icons/copy16.gif","icons/paste16.gif"};
bu
Java Swing是Java GUI(图形用户界面)库的一部分,它提供了丰富的组件和工具,用于构建桌面应用程序。本教程包含了100个使用Swing编写的GUI小程序,这些程序可以帮助初学者和有经验的开发者深入理解Swing的工作原理以及如何在实践中应用它。 1. **Java Swing基础** - Swing是Java AWT(Abstract Window Toolkit)的扩展,提供了轻量级的组件,这些组件在性能和可定制性上优于AWT。 - Swing组件基于JavaBeans架构,使得它们可以方便地进行属性设置和事件处理。 2. **核心组件** - JFrame:这是Swing应用程序的主要窗口,包含其他组件。 - JPanel:用于添加和组织其他组件的容器。 - JButton:用于创建按钮,可以响应用户点击。 - JLabel:用于显示文本或图像。 - JTextField:提供单行文本输入。 - JTextArea:用于多行文本输入和显示。 - JCheckBox和JRadioButton:用于实现选择选项。 - JComboBox:下拉选择框,可以包含文本项或自定义对象。 - JList和JTable:用于展示列表和表格数据。 3. **布局管理器** - Swing提供了多种布局管理器,如FlowLayout、BorderLayout、GridLayout、BoxLayout和GridBagLayout,用于控制组件在容器中的排列方式。 4. **事件处理** - ActionEvent:按钮点击、菜单选择等事件处理的基础。 - ActionListener接口:用于添加事件监听器到触发动作的组件。 - MouseListener和MouseListenerAdapter:处理鼠标事件,如点击、进入和离开。 5. **对话框(Dialogs)** - JDialog:用于创建模态和非模态对话框。 - JOptionPane:提供预定义的对话框,如信息提示、确认、输入对话框等。 6. **外观(Look and Feel)** - Swing支持更改应用程序的视觉风格,这称为LookAndFeel。可以切换到系统默认的LookAndFeel,或者使用自定义的LookAndFeel。 7. **Swing utilities** - SwingUtilities类:提供了多线程渲染、组件定位和其他实用方法。 8. **Swing应用程序框架(Application Framework)** - javax.swing.SwingApplication和javax.swing.SwingApplicationFrame:简化创建Swing应用程序的流程。 9. **示例程序的意义** - 通过实践这些小程序,你可以学习如何创建基本的窗口,添加组件,设置布局,处理用户输入,以及如何实现复杂的交互。 10. **学习资源** - Java官方文档:提供了详细的API参考和教程。 - 开源社区:如GitHub上的项目,提供了丰富的Swing应用实例。 - 在线教程和书籍:提供深入的理论和实践指导。 本教程中的100个Swing小程序将涵盖上述各个知识点,每个程序都是一个独立的学习点,通过逐步分析和实践,你将能掌握Java Swing开发的全面技能。




















































































































- 1
- 2
- 3
- 4
- 5
- 6
- 9

- 粉丝: 3
- 资源: 3
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助



最新资源
- VDA 6.8_2024 黄皮 中英对照自我翻译版_3.zip
- YOLO葡萄叶片病害检测数据集(含1000张图片)+对应voc、coco和yolo三种格式标签+划分脚本+训练教程.rar
- YOLO葡萄叶片病害检测数据集(含1000张图片)+对应voc、coco和yolo三种格式标签+划分脚本+训练教程.rar
- YOLO葡萄叶片病害检测数据集(含1000张图片)+对应voc、coco和yolo三种格式标签+划分脚本+训练教程.rar
- 电力系统中1.5MW双馈风电机组虚拟同步机VSG控制策略解析及其应用
- 基于MATLAB的KMeans聚类与肘部法确定最佳聚类个数的技术实现及应用场景
- 桌面壁纸批量下载,精美桌面壁纸更换
- 基于粒子群算法的含风光燃储微网优化调度MATLAB代码解析
- 基于蒙特卡洛抽样的电动汽车充电负荷计算及其MATLAB实现
- Openpyxl中文文档
- 宿舍管理系统 2025免费JAVA微信小程序毕设
- 员工日志管理信息系统 2025免费JAVA微信小程序毕设
- 数据分析中双峰高斯分布的蒙特卡洛模拟及PDF、CDF绘制与参数调整(Matlab实现)
- 机器人状态估计中IMU与GPS融合定位的C++实现:基于扩展卡尔曼滤波
- 校园生活服务系统 2025免费JAVA微信小程序毕设
- 西门子Smart200 PLC与变频器Modbus RTU通讯实现及应用



- 1
- 2
- 3
- 4
- 5
- 6
前往页