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

目前实现了:

文件

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

编辑

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

格式

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

帮助

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

工具栏

图标形式的:

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

底部状态栏

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

右键弹出菜单

  • 复制
  • 粘贴
  • 剪切

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

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

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

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

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

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

程序由三个文件组成:

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

主界面预览:

废话不多说,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.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. hello随笔

    初次来到博客园,都试一下 我明白了,随笔就是博客咯.日记自对自己可见.再试试分类吧

  2. Docker(2):使用Dockerfile创建支持SSH服务的镜像

    1.创建工作目录 # mkdir sshd_ubuntu # ls 在其中,创建Dockerfile和run.sh文件 # cd sshd_ubuntu/ # touch Dockerfile run ...

  3. linux 网卡的混杂模式的取消

    1.Linux下网卡常用的几种模式说明: 广播方式:该模式下的网卡能够接收网络中的广播信息. 组播方式:设置在该模式下的网卡能够接收组播数据. 直接方式:在这种模式下,只有目的网卡才能接收该数据. 混 ...

  4. 函数rand,randn,randi

    1,rand 生成均匀分布的伪随机数.分布在(0~1)之间主要语法:rand(m,n)生成m行n列的均匀分布的伪随机数rand(m,n,‘double’)生成指定精度的均匀分布的伪随机数,参数还可以是 ...

  5. .net后台以post方式调用http接口[转]

    string strResult = ""; try { HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create( ...

  6. 从 0 到 1 实现 React 系列 —— 1.JSX 和 Virtual DOM

    看源码一个痛处是会陷进理不顺主干的困局中,本系列文章在实现一个 (x)react 的同时理顺 React 框架的主干内容(JSX/虚拟DOM/组件/生命周期/diff算法/setState/ref/. ...

  7. Python + Tornado 搭建自动回复微信公众号

    1 通过 pip 安装 wechat-python-sdk , Requests 以及 Tornado pip install tornado pip install wechat-sdk pip i ...

  8. Linux利用mysql建立数据库

    安装数据库: sudo   apt-get  install  mysql-server   启动服务: sudo  service  mysql  start  连接数据库:sudo    mysq ...

  9. 如何查杀stopped进程

    在Linux系统下面,top命令可以查看查看stopped进程.但是不能查看stopped进程的详细信息.那么如何查看stopped 进程,并且杀掉这些stopped进程呢? ps -e j | gr ...

  10. PS调出韩式米黄色室内婚纱照片

    原图: Camera Raw打开原图. 光线调整,压暗白色,保留高光细节,少量对比黑色压暗. 降低整体饱和. 曲线调整,压暗高光明度. 减红加青(融合色彩). 中间调,靠近暗部区域加蓝,靠近亮部区域加 ...