Java Swing实现一个简单而优美的记事本( 较详细注释 )

时间:2022-09-05 11:59:18

Java Swing实现具有基本功能的记事本

目前实现了:

文件

  • 新建
  • 打开
  • 保存
  • 退出前保存询问

编辑

  • 剪切
  • 复制
  • 粘贴
  • 清除
  • 撤销

格式

  • 字体选择
  • 字体颜色选择

帮助

  • 关于 (样式采用了css与html来描绘)

工具栏

图标形式的:

  • 保存
  • 复制
  • 粘贴
  • 剪切
  • 文字加粗
  • 文字斜体

底部状态栏

  • 文本字数实时统计
  • 日期显示
  • 编码显示(其实是假的哈哈)

右键弹出菜单

  • 复制
  • 粘贴
  • 剪切

工具栏和右键弹出菜单共享了一些图标,特别地,右键弹出菜单使用了鼠标监听器来实时报告鼠标的坐标,从而绘制弹出菜单。

图标我已经打包了,只要解压到源文件同一个目录下就行。

下载好的Project可以直接用IntelliJ IDEA导入

其中比较有意思的是,我模仿了一些笔记本应用,在文本区没有文字的时候将对应的功能项或图标设置成不可用,也就是灰色状态,直到键入了文本。粗体与斜体之间的可用性影响也写了个逻辑判断函数。

部分核心实现是搬运别人的代码,但是有点杂。。。。大部分框架是自己写的。

注:监听器注册使用了Lambda表达式,看起来更简洁

程序由三个文件组成:

  1. Launcher.java 主方法
  2. MyFrame.java 框架实现
  3. AboutDialog.java 单独用一个文件写「关于」对话框

主界面预览:

Java Swing实现一个简单而优美的记事本( 较详细注释 )

Java Swing实现一个简单而优美的记事本( 较详细注释 )

废话不多说,show the code:

Launcher.java :

public class Launcher{
public static void main(String[] args){
new MyFrame("Untitled");
}
}

MyFrame.java :

import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.undo.UndoManager;
import java.awt.*;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.event.*;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
...................
Created by HengyiYu
...................
*/
class MyFrame extends JFrame {
private static final int DEFAULT_WIDTH = 700; // 窗口默认宽度
private static final int DEFAULT_HEIGHT = 450; // 窗口默认高度
private static final int DEFAULT_FONTSIZE = 20; // 默认字体大小
private JTextArea tv_area = null; // 多行文本框
private JScrollPane s_pane = null; // 带滚动条的面板
private JMenuBar mb = null; // 菜单栏
private JToolBar toolBar1 = null; // 顶部工具栏
private JToolBar toolBar2 = null; // 底部status栏
private JMenu m_file = null; // 文件菜单
private JMenu m_edit = null; // 编辑菜单
private JMenu m_format = null; // 格式菜单
private JMenu m_help = null; // 帮助菜单
private JPopupMenu popupMenu = null; // 右键弹出式菜单
private Icon toolBar_Save = null; // 工具栏保存图标
private Icon toolBar_Cut = null; // 工具栏剪切图标
private Icon toolBar_Copy = null; // 工具栏复制图标
private Icon toolBar_Paste = null; // 工具栏粘贴图标
private Icon statusBar_status = null; // 状态栏图标
private Icon toolBar_more_font = null; // 工具栏字体图标
private Icon m_help_icon = null; // 关于菜单项图标
private JFileChooser chooser = null; // 文件选择对象
private File file = null; // 文件对象
private UndoManager manager = null; // 撤销操作管理对象
private String codestyle = "UTF-8"; // 编码格式 /*----------------文件菜单项---------------------*/
private JMenuItem file_new = null; // 新建
private JMenuItem file_open = null; // 打开
private JMenuItem file_save = null; // 保存
private JMenuItem file_exit = null; // 退出
/*----------------文件菜单项---------------------*/ /*----------------编辑菜单项---------------------*/
private JMenuItem edit_cut = null; // 剪切
private JMenuItem edit_copy = null; // 复制
private JMenuItem edit_paste = null; // 粘贴
private JMenuItem edit_clear = null; // 清空当前内容
private JMenuItem edit_undo = null; // 撤销
/*----------------编辑菜单项---------------------*/ /*----------------格式菜单项---------------------*/
private JMenuItem format_chooseFontColor = null; // 选择字体颜色
private JMenuItem format_chooseFont = null; // 选择字体
/*----------------格式菜单项---------------------*/ /*----------------帮助菜单项---------------------*/
private JMenuItem help_about = null; // 关于
/*----------------帮助菜单项---------------------*/ /*----------------工具栏项目---------------------*/
private JButton button_save = null;
private JButton button_copy = null;
private JButton button_paste = null;
private JButton button_cut = null;
private JLabel moreOption = null;
private JCheckBox check_bold = null; // 加粗选项
private JCheckBox check_italic = null; // 斜体选项
/*----------------工具栏项目---------------------*/ /*----------------弹出菜单项---------------------*/
private JMenuItem popCut = null;
private JMenuItem popCopy = null;
private JMenuItem popPaste = null;
/*----------------弹出菜单项---------------------*/ /*----------------状态栏项----------------------*/
private JLabel label = null;
private JLabel labelTime = null;
private JLabel labelCodeStyle = null;
/*----------------状态栏项----------------------*/ public MyFrame(String title){
super(title); //窗体标题
init();
registerListener();
} //初始化相关组件
private void init(){
tv_area = new JTextArea(); // 创建一个多行文本框
tv_area.setFont(new Font("Courier Prime", Font.PLAIN, 18));
tv_area.setCaretColor(Color.GREEN); // 光标颜色
tv_area.setSelectedTextColor(Color.ORANGE); // 选中字体颜色
tv_area.setSelectionColor(Color.CYAN); // 选中背景颜色
tv_area.setLineWrap(true); // 自动换行
tv_area.setTabSize(4);
tv_area.getDocument().
addUndoableEditListener(manager); // 设置文本框编辑监听(可撤销)
s_pane = new JScrollPane(tv_area,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); // 创建一个滚动条面板
s_pane.setOpaque(false); // 设置面板透明
s_pane.getViewport().setOpaque(false);
mb = new JMenuBar(); //初始化菜单栏
manager = new UndoManager(); // 创建一个撤销管理对象
Container cpan = this.getContentPane(); // 用Container对象获取当前框架的内容面板
cpan.add(s_pane,BorderLayout.CENTER); // 将多行文本框添加到面板*
this.setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT); // 设置窗体大小 /*----------------设置图标----------------------*/
toolBar_Save = new ImageIcon("src/ToolBar_Save.png");
toolBar_Cut = new ImageIcon("src/ToolBar_Cut.png");
toolBar_Copy = new ImageIcon("src/ToolBar_Copy.png");
toolBar_Paste = new ImageIcon("src/ToolBar_Paste.png");
toolBar_more_font = new ImageIcon("src/more_font.png");
statusBar_status = new ImageIcon("src/statusBar.png");
m_help_icon = new ImageIcon("src/info.png");
/*----------------设置图标----------------------*/ /*----------------文件菜单----------------------*/
m_file = new JMenu("文件(F)");
m_file.setMnemonic('F');
file_new = new JMenuItem("新建(N)");
file_new.setAccelerator(KeyStroke.getKeyStroke("ctrl N"));
file_new.setMnemonic('N');
file_open = new JMenuItem("打开(O)");
file_open.setAccelerator(KeyStroke.getKeyStroke("ctrl O"));
file_save = new JMenuItem("保存(S)");
file_save.setEnabled(false);
file_save.setAccelerator(KeyStroke.getKeyStroke("ctrl S"));
file_exit = new JMenuItem("退出");
m_file.add(file_new);
m_file.add(file_open);
m_file.add(file_save);
m_file.addSeparator();
m_file.add(file_exit);
/*----------------文件菜单----------------------*/ /*----------------编辑菜单----------------------*/
m_edit = new JMenu("编辑(E)");
m_file.setMnemonic('E');
edit_cut = new JMenuItem("剪切(X)");
edit_cut.setEnabled(false);
edit_cut.setAccelerator(KeyStroke.getKeyStroke("ctrl X"));
edit_copy = new JMenuItem("复制(C)");
edit_copy.setEnabled(false);
edit_copy.setAccelerator(KeyStroke.getKeyStroke("ctrl C"));
edit_paste = new JMenuItem("粘贴(V)");
edit_paste.setAccelerator(KeyStroke.getKeyStroke("ctrl V"));
edit_clear = new JMenuItem("清除");
edit_clear.setEnabled(false);
edit_undo = new JMenuItem("撤销(Z)");
edit_undo.setAccelerator(KeyStroke.getKeyStroke("ctrl Z"));
m_edit.add(edit_cut);
m_edit.add(edit_copy);
m_edit.add(edit_paste);
m_edit.addSeparator();
m_edit.add(edit_clear);
m_edit.addSeparator();
m_edit.add(edit_undo);
/*----------------编辑菜单----------------------*/ /*----------------格式菜单----------------------*/
m_format = new JMenu("格式(M)");
m_file.setMnemonic('M');
format_chooseFont = new JMenuItem("字体选择");
format_chooseFontColor = new JMenuItem("字体颜色");
m_format.add(format_chooseFont);
m_format.add(format_chooseFontColor);
/*----------------格式菜单----------------------*/ /*----------------帮助菜单----------------------*/
m_help = new JMenu("帮助(H)");
m_file.setMnemonic('H');
help_about = new JMenuItem("关于",m_help_icon);
m_help.add(help_about);
/*----------------帮助菜单----------------------*/ /*----------------右键菜单----------------------*/
popupMenu = new JPopupMenu();
popCut = new JMenuItem("剪切",toolBar_Cut);
popCopy = new JMenuItem("复制",toolBar_Copy);
popPaste = new JMenuItem("粘贴",toolBar_Paste);
popupMenu.add(popCut);
popupMenu.add(popCopy);
popupMenu.add(popPaste);
/*----------------右键菜单----------------------*/ mb.add(m_file); // 菜单栏添加相应菜单file
mb.add(m_edit); // 菜单栏添加相应菜单edit
mb.add(m_format); // 菜单栏添加相应菜单format
mb.add(m_help); // 菜单栏添加相应菜单help /*----------------工具栏-----------------------*/
toolBar1 = new JToolBar();
toolBar1.setMargin(new Insets(1,1,1,1));
// 设置按钮间距
button_save = new JButton(toolBar_Save);
button_save.setEnabled(false);
button_save.setToolTipText("保存当前内容");
button_copy = new JButton(toolBar_Copy);
button_copy.setEnabled(false);
button_copy.setToolTipText("复制选中内容");
button_paste = new JButton(toolBar_Paste);
button_paste.setToolTipText("粘贴");
button_cut = new JButton(toolBar_Cut);
button_cut.setEnabled(false);
button_cut.setToolTipText("剪切选中内容");
moreOption = new JLabel("更多-->",toolBar_more_font,SwingConstants.CENTER);
check_bold = new JCheckBox("<html><p style=\"font-weight:bold;\">加粗</p><html>");
check_bold.setEnabled(false);
check_bold.setSelected(false);
check_italic = new JCheckBox("<html><i>斜体</i></html>");
check_italic.setEnabled(false);
check_italic.setSelected(false);
toolBar1.addSeparator();
toolBar1.add(button_save);
toolBar1.addSeparator(new Dimension(20,2));
toolBar1.add(button_copy);
toolBar1.addSeparator(new Dimension(20,2));
toolBar1.add(button_paste);
toolBar1.addSeparator(new Dimension(20,2));
toolBar1.add(button_cut);
toolBar1.addSeparator(new Dimension(290,2));
toolBar1.add(moreOption);
toolBar1.add(check_bold);
toolBar1.add(check_italic);
toolBar1.setFloatable(false); /*----------------工具栏-----------------------*/ /*----------------状态栏-----------------------*/
toolBar2 = new JToolBar();
toolBar2.setFloatable(false); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); label = new JLabel("当前字数:0",statusBar_status,SwingConstants.CENTER);
labelTime = new JLabel("日期: "+sdf.format(new Date()));
labelCodeStyle = new JLabel("编码: "+codestyle); toolBar2.add(label);
toolBar2.addSeparator(new Dimension(180,5));
toolBar2.add(labelTime);
toolBar2.addSeparator(new Dimension(180,5));
toolBar2.add(labelCodeStyle);
/*----------------状态栏-----------------------*/ this.add(toolBar1,BorderLayout.NORTH); // 将工具栏添加到框架中
this.add(toolBar2,BorderLayout.SOUTH); this.setJMenuBar(mb); // 将菜单栏添加到框架中
this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
// 设置关闭时动作
Toolkit kit = Toolkit.getDefaultToolkit(); // 获取工具包
Dimension screenSize = kit.getScreenSize(); // Dimension对象获取尺寸
int screenWidth = screenSize.width; // 获取当前屏幕宽度
int screenHeight = screenSize.height; // 获取当前屏幕高度
int windowsWidth = this.getWidth(); // 获取当前窗体宽度
int windowsHeight = this.getHeight(); // 获取当前窗体高度
this.setLocation((screenWidth-windowsWidth)/2,
(screenHeight-windowsHeight)/2); // 设置窗口位置
this.setVisible(true); // 设置窗体可见
} //监听器注册区
private void registerListener(){
tv_area.addMouseListener(new MouseAdapter() { // 为文本框添加鼠标监听器
@Override
public void mousePressed(MouseEvent e) {
maybeShowPopup(e);
} @Override
public void mouseReleased(MouseEvent e) {
maybeShowPopup(e);
}
}); tv_area.getDocument().addDocumentListener(new DocumentListener() {
@Override // 监听文本区改变
public void insertUpdate(DocumentEvent e) {
isItemsAvalible(); // 一旦文本有改变就设置各按钮的可用性
changeTextLengthStatus(); // 实时显示文本字数
}
@Override
public void removeUpdate(DocumentEvent e) {
isItemsAvalible(); // 一旦文本有改变就设置各按钮的可用性
changeTextLengthStatus(); // 实时显示文本字数
}
@Override
public void changedUpdate(DocumentEvent e) {
changeTextLengthStatus(); // 实时显示文本字数
isItemsAvalible(); // 一旦文本有改变就设置各按钮的可用性
}
});
file_new.addActionListener(e -> newFile()); // 注册新建文件监听器
file_open.addActionListener(e -> openFile()); // 注册打开文件监听器
file_save.addActionListener(e -> saveFile()); // 注册保存文件监听器
file_exit.addActionListener(e -> exit()); // 注册退出程序监听器
edit_clear.addActionListener(e -> clearAll());
edit_undo.addActionListener(e -> undo());
edit_cut.addActionListener(e -> tv_area.cut());
edit_copy.addActionListener(e -> tv_area.copy());
edit_paste.addActionListener(e -> tv_area.paste());
format_chooseFont.addActionListener(e -> setTextFont());
format_chooseFontColor.addActionListener(e -> setTextColor());
help_about.addActionListener(e -> new AboutDialog(MyFrame.this,
"About-NotePad",true));
button_save.addActionListener(e -> saveFile());
button_copy.addActionListener(e -> tv_area.copy());
button_paste.addActionListener(e -> tv_area.paste());
button_cut.addActionListener(e -> tv_area.cut());
check_italic.addActionListener(e -> checkBox_setFont());
check_bold.addActionListener(e -> checkBox_setFont());
popCut.addActionListener(e -> tv_area.cut());
popCopy.addActionListener(e -> tv_area.copy());
popPaste.addActionListener(e -> tv_area.paste());
this.addWindowListener(new WindowAdapter() { //为框架添加退出保存的监视器
@Override
public void windowClosing(WindowEvent e) {
String exitMessage = "需要保存键入的文本吗?";
if(tv_area.getText().equals(""))
System.exit(0);
else{
if(JOptionPane.showConfirmDialog(null, exitMessage,"提示",
JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE)==JOptionPane.YES_OPTION){
saveFile();
System.exit(0);
}else
System.exit(0);
}
}
});
} private void newFile(){ // 新建文件触发函数
if(!tv_area.getText().equals("")){
int res = JOptionPane.showConfirmDialog
(null,"当前内容未保存,需要保存吗?",
"info",JOptionPane.YES_NO_OPTION); // 储存选择结果
if(res==JOptionPane.YES_OPTION){
saveFile();
tv_area.setText("");
this.setTitle("untitled");
file = null;
}else{
tv_area.setText(""); // 取消则清空页面
this.setTitle("untitled");
file = null;
}
}
} private void clearAll(){ // 清空当前页面触发函数
tv_area.setText("");
} // 清空页面触发函数 private void openFile(){ // 打开文件触发函数
try {
chooser = new JFileChooser("/Users/1kasshole/Desktop/");
// 设置打开时的默认目录
chooser.setFileFilter(new filter()); // 设置格式过滤器
int result = chooser.showOpenDialog(null);
if (result == JFileChooser.APPROVE_OPTION) { // 点击打开按钮
file = chooser.getSelectedFile();
int length = (int) file.length();
FileReader reader = new FileReader(file);
char[] ch = new char[length];
reader.read(ch); // 将文件读进char数组
reader.close();
tv_area.setText(new String(ch).trim()); // 删除字符串的头尾空白符
setTitle(file.getName()); // 框架标题设置为文件名
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
} private void saveFile(){ // 文件保存触发函数
if (file == null)
try {
chooser = new JFileChooser(
"/Users/1kasshole/Desktop/");
chooser.setFileFilter(new filter());
int result = chooser.showSaveDialog(null);
if (result == JFileChooser.APPROVE_OPTION) {
File selectfile =
chooser.getSelectedFile(); // 获得文件
String end = chooser.getFileFilter().getDescription();
// 获得被选中的过滤器中的文件扩展名
File newFile;
if (selectfile.getAbsolutePath().toUpperCase().endsWith(end.toUpperCase())) {
// 如果文件是以选定扩展名结束的,则使用原名
newFile = selectfile;
} else { // 否则加上选定的扩展名
newFile = new File(selectfile.getAbsolutePath()+ end);
}
try {
if (!newFile.exists()) {
newFile.createNewFile();
}
FileWriter writer = new FileWriter(newFile);
char[] arry = tv_area.getText().toCharArray();
writer.write(arry);
writer.flush();
writer.close();
setTitle(newFile.getName());
file = newFile;
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
else
try {
FileWriter writer = new FileWriter(file);
char[] arry = tv_area.getText().toCharArray();
writer.write(arry);
writer.flush();
writer.close();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
} private void undo(){ // 撤销触发函数
if (manager.canUndo()){
manager.undo();
}
} private void exit(){ // 退出程序触发函数
newFile();
System.exit(0);
} private void setTextFont(){ // 选择字体触发函数
try{
GraphicsEnvironment ge = GraphicsEnvironment
.getLocalGraphicsEnvironment();
// 获取系统字体
JList<String> fontNames = new JList<>(ge.getAvailableFontFamilyNames());
int response = JOptionPane.showConfirmDialog(null,
new JScrollPane(fontNames), "请选择字体 ( 默认: Courier Prime )",
JOptionPane.OK_CANCEL_OPTION);
Object selectedFont = fontNames.getSelectedValue();
if (response == JOptionPane.OK_OPTION && selectedFont != null)
tv_area.setFont(new Font(fontNames.getSelectedValue(), Font.PLAIN, DEFAULT_FONTSIZE));
}catch (Exception e){
e.printStackTrace();
}
} private void setTextColor(){ // 字体颜色选择触发函数
Color color = JColorChooser.showDialog(null, "**请选择字体颜色**",
Color.WHITE);
tv_area.setForeground(color);
} // 文件格式过滤
private class filter extends javax.swing.filechooser.FileFilter {
public boolean accept(File file) {
String name = file.getName();
name.toLowerCase();
return name.endsWith(".txt") || file.isDirectory();
} public String getDescription() {
return ".txt";
}
} // 监视系统剪切板,暂时无用
private boolean isClipboardEmpty(){
Transferable transferable = Toolkit.getDefaultToolkit().
getSystemClipboard().getContents(null);
// 获取内容
if(transferable!=null && transferable.isDataFlavorSupported(DataFlavor.stringFlavor)){
try{
return false;
}catch (Exception e){
e.printStackTrace();
}
}
return true;
} private void maybeShowPopup(MouseEvent e){ // 监听鼠标
if(e.isPopupTrigger()){
popupMenu.show(e.getComponent(),e.getX(),e.getY());
}
} private void changeTextLengthStatus(){ // 文本监听
String content = tv_area.getText().trim();
label.setText("当前字数:"+content.length());
} private void isItemsAvalible(){ // 监视文本区并设置各功能项是否可用
String content = tv_area.getText();
if(content.equals("")){
edit_cut.setEnabled(false);
edit_clear.setEnabled(false);
edit_copy.setEnabled(false);
file_save.setEnabled(false);
button_save.setEnabled(false);
button_copy.setEnabled(false);
button_cut.setEnabled(false);
check_bold.setEnabled(false);
check_italic.setEnabled(false);
}else{
file_save.setEnabled(true);
edit_cut.setEnabled(true);
edit_clear.setEnabled(true);
edit_copy.setEnabled(true);
button_save.setEnabled(true);
button_copy.setEnabled(true);
button_cut.setEnabled(true);
check_bold.setEnabled(true);
check_italic.setEnabled(true);
}
} private void checkBox_setFont(){ // 复选框监听
if(check_bold.isSelected()){
check_italic.setEnabled(false);
tv_area.setFont(new Font(tv_area.getFont().getName(),Font.BOLD,DEFAULT_FONTSIZE));
}
if(check_italic.isSelected()){
check_bold.setEnabled(false);
tv_area.setFont(new Font(tv_area.getFont().getName(),Font.ITALIC,DEFAULT_FONTSIZE));
}
if(!check_bold.isSelected()){
check_italic.setEnabled(true);
if(!check_italic.isSelected())
tv_area.setFont(new Font(tv_area.getFont().getName(),Font.PLAIN,DEFAULT_FONTSIZE));
}
if(!check_italic.isSelected()){
check_bold.setEnabled(true);
if(!check_bold.isSelected())
tv_area.setFont(new Font(tv_area.getFont().getName(),Font.PLAIN,DEFAULT_FONTSIZE));
}
}
}

AboutDialog.java :

import javax.swing.*;
import java.awt.*;
/*
...................
Created by HengyiYu
...................
*/
class AboutDialog extends JDialog {
private static final int ABOUT_WIDTH = 300; // 窗口默认宽度
private static final int ABOUT_HEIGHT = 220; // 窗口默认高度
private Icon about = new ImageIcon("src/Help_About.png");
private JLabel desc = null; // 文本标签
private JPanel panel = null; // 内容面板
private JButton btn = null; // 按钮
public AboutDialog(Frame frame, String title, boolean modal){
super(frame,title,modal); // 将对话框放进当前框架,设置标题和模态
init();
registerListener();
}
private void init(){
desc = new JLabel(); // 新建文本标签
desc.setText("<html>HAVE FUN~ <font size=\"4px\"><u><a href=https://www.oracle.com> --- Powered by ORACLE --- </a></u></font><br><br>Supports .txt format only<br><br><strong>A BETA VERSION BY HENGYI YU</strong></html>");
desc.setHorizontalAlignment(JLabel.CENTER); // 设置文本标签位置
panel = new JPanel(); // 新建内容面板
btn = new JButton();
btn.setIcon(about);
panel.add(btn);
this.add(desc); // 文本默认在边界管理器*
this.add(panel,BorderLayout.SOUTH); // 将面板放在便捷管理器下方
this.setSize(ABOUT_WIDTH,ABOUT_HEIGHT); // 设置对话框大小
}
private void registerListener(){
btn.addActionListener(e->{
AboutDialog.this.dispose(); // 退出对话框
});
Toolkit kit = Toolkit.getDefaultToolkit(); // 获取工具包
Dimension screenSize = kit.getScreenSize(); // Dimension对象获取尺寸
int screenWidth = screenSize.width; // 获取当前屏幕宽度
int screenHeight = screenSize.height; // 获取当前屏幕高度
int dialogWidth = this.getWidth(); // 获取当前对话框宽度
int dialogHeight = this.getHeight(); // 获取当前对话框高度
this.setLocation((screenWidth-dialogWidth)/2,
(screenHeight-dialogHeight)/2); // 设置窗口位置
this.setVisible(true); // 设置可见
}
}

Java Swing实现一个简单而优美的记事本( 较详细注释 )的更多相关文章

  1. JAVA课程设计——一个简单的教务人事管理系统

    大三上学期期末总结,没错,上学期,写在下学期新学期开始,哈哈哈. 上学期学习了面向对象程序设计,课程设计的题目使用JAVA语言完成一个简单的教务人事管理系统,能够实现访问数据库的登录验证,分别按部门和 ...

  2. 使用JAVA实现的一个简单IOC注入实例

    https://blog.csdn.net/echoshinian100/article/details/77977823 欲登高而望远,勿筑台于流沙 RSS订阅 原 使用JAVA实现的一个简单IOC ...

  3. 使用 jquery 的 上传文件插件 uploadify 3&period;1 配合 java 来做一个简单的文件上次功能。并且在界面上有radio 的选择内容也要上传

    使用 jquery 的 上传文件插件 uploadify 3.1 配合 java 来做一个简单的文件上次功能.并且在界面上有radio 的选择内容也要上传 uploadify 插件的 下载和文档地址  ...

  4. Java RMI 实现一个简单的GFS(谷歌文件系统)——介绍篇

    本系列主要是使用Java RMI实现一个简单的GFS(谷歌文件系统,google file system),首先整体简单介绍下该项目. [为了更好的阅读以及查看其他篇章,请查看原文:https://w ...

  5. Java RMI 实现一个简单的GFS(谷歌文件系统)——背景与设计篇

    目录 背景 系统设计 1. 系统功能 2. Master组件 2.1 命名空间 2.2 心跳机制 2.3 故障恢复和容错机制 3. ChunkServer组件 3.1 本地存储 3.2 内存命中机制 ...

  6. java swing 制作一个登陆界面,亲测有效

    一.介绍 Swing 是一个为Java设计的GUI工具包. Swing是JAVA基础类的一部分. Swing包括了图形用户界面(GUI)器件如:文本框,按钮,分隔窗格和表. Swing提供许多比AWT ...

  7. 【Java】Swing实现一个简单的计算器

    import javax.swing.*; import java.awt.*; /** * 计算器 * @author paul * 2019.11.25 21:43 * */ public cla ...

  8. 【Java】 实现一个简单文件浏览器(1)

    学习Java的Swing的时候写的一个超简单文件浏览器 效果如图: 项目结构: 这里面主要用了两个控件,JTree和JTable 下面先说下左侧的文件树如何实现: 首先是FileTree类,继承于JT ...

  9. Java开发的一个简单截屏工具

    //源代码 import java.awt.*;import java.awt.datatransfer.DataFlavor;import java.awt.datatransfer.Transfe ...

随机推荐

  1. 【BZOJ-4569】萌萌哒 ST表 &plus; 并查集

    4569: [Scoi2016]萌萌哒 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 459  Solved: 209[Submit][Status] ...

  2. zoj 1648 判断线段是否相交

    链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=648 Circuit Board Time Limit: 2 Second ...

  3. docker 感性介绍

    Docker 允许开发者们将他们的应用打包放在云端的“容器”中,无需再修改就可以发布到任何流行的 Linux 机器上.由于采用沙盒机制,各应用之间没有任何接口,所以不用担心它们会相互干扰.也同样因为这 ...

  4. cocos2d-x 添加 libLocalStorage 库&period;&period;&period;

    说明:由于libLocalStorage底层是用sqlite实现的,所以要先按上面官方提供的集成sqlite的文档,将sqlite添加到项目中. 重点还是android的编译配置,加粗的是需要增加的配 ...

  5. 从一到二:利用mnist训练集生成的caffemodel对mnist测试集与自己手写的数字进行测试

    通过从零到一的教程,我们已经得到了通过mnist训练集生成的caffemodel,主要包含下面四个文件: 接下来就可以利用模型进行测试了.关于测试方法按照上篇教程还是选择bat文件,当然python. ...

  6. datagrid、easyui-dialog

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. Android5&period;1源码Xposed框架编译

    介绍 Xposed框架是一款可以在不修改APK的情况下影响程序运行(修改系统)的框架服务,基于它可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作 . 对于Android5.1系统,官方提供 ...

  8. python 实现多层目录文件查找

    本文针对多层目录下文件的查找. 利用 os模块的基本操作,并利用递归的思想实现了目录多层查找. 代码如下: import os #dir_name: 处理文件的起始目录 def count_file( ...

  9. 【转】Android 关于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容问题

    转载地址:http://blog.csdn.net/ouyang_peng/article/details/51168072 Android 设备的CPU类型(通常称为”ABIs”) x86: 平板. ...

  10. &lbrack;sql异常&rsqb;SQL Server 阻止了对组件 &&num;39&semi;Ad Hoc Distributed Queries&&num;39&semi; 的

    //执行远程数据库表查询 SELECT * FROM OPENDATASOURCE('SQLOLEDB', 'Data Source=数据库地址;User ID=sa;password=sa' ).n ...