📄 paintboard.java
字号:
toolsGroup.add(pencilButton);
toolsGroup.add(selectedButton);
toolsGroup.add(unSelectedButton);
toolsGroup.add(deletedButton);
newButton.setBorder(new BevelBorder(BevelBorder.RAISED));
openButton.setBorder(new BevelBorder(BevelBorder.RAISED));
saveButton.setBorder(new BevelBorder(BevelBorder.RAISED));
exitButton.setBorder(new BevelBorder(BevelBorder.RAISED));
helpButton.setBorder(new BevelBorder(BevelBorder.RAISED));
cutButton.setBorder(new BevelBorder(BevelBorder.RAISED));
copyButton.setBorder(new BevelBorder(BevelBorder.RAISED));
pasteButton.setBorder(new BevelBorder(BevelBorder.RAISED));
textButton.setBorder(new BevelBorder(BevelBorder.RAISED));
/*brushButton.setBorder(new BevelBorder(BevelBorder.RAISED));
moveButton.setBorder(new BevelBorder(BevelBorder.RAISED));
resizeButton.setBorder(new BevelBorder(BevelBorder.RAISED));
selectAreaButton.setBorder(new BevelBorder(BevelBorder.RAISED));
fillButton.setBorder(new BevelBorder(BevelBorder.RAISED));*/
eraserButton.setBorder(new BevelBorder(BevelBorder.RAISED));
lineButton.setBorder(new BevelBorder(BevelBorder.RAISED));
circleButton.setBorder(new BevelBorder(BevelBorder.RAISED));
rectangleButton.setBorder(new BevelBorder(BevelBorder.RAISED));
pencilButton.setBorder(new BevelBorder(BevelBorder.RAISED));
selectedButton.setBorder(new BevelBorder(BevelBorder.RAISED));
unSelectedButton.setBorder(new BevelBorder(BevelBorder.RAISED));
deletedButton.setBorder(new BevelBorder(BevelBorder.RAISED));
//初始化工具栏
setTitle("画板");
editToolBar.add(newButton);
editToolBar.add(openButton);
editToolBar.add(saveButton);
editToolBar.add(exitButton);
editToolBar.add(helpButton);
/*editToolBar.add(copyButton);
editToolBar.add(cutButton);
editToolBar.add(pasteButton);*/
imageToolBar.setLayout(new GridLayout(3, 3, 5, 5));
imageToolBar.add(lineButton);
imageToolBar.add(circleButton);
imageToolBar.add(rectangleButton);
imageToolBar.add(pencilButton);
imageToolBar.add(eraserButton);
imageToolBar.add(selectedButton);
imageToolBar.add(unSelectedButton);
imageToolBar.add(deletedButton);
imageToolBar.add(textButton);
/*imageToolBar.add(brushButton);
imageToolBar.add(moveButton);
imageToolBar.add(resizeButton);
imageToolBar.add(fillButton);
imageToolBar.add(selectAreaButton);*/
//初始化控制栏
ctrlPanel.setLayout(new java.awt.GridBagLayout());
ctrlPanel.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
mediumPanel1.setLayout(new javax.swing.BoxLayout(mediumPanel1, javax.swing.BoxLayout.Y_AXIS));
imageToolBar.setBorder(new javax.swing.border.TitledBorder("Drawing Tools"));
mediumPanel1.add(imageToolBar);
colorPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 20, 5));
colorPanel.setBorder(new javax.swing.border.TitledBorder("Color Settings"));
fgButton.setBackground(canvases[0].getForeground());
fgButton.setToolTipText("Change Drawing Color");
fgButton.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0)));
fgButton.setPreferredSize(new java.awt.Dimension(30, 30));
fgButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
fgButtonActionPerformed(evt);
}
});
colorPanel.add(fgButton);
bgButton.setBackground(canvases[0].getBackground());
bgButton.setToolTipText("Change Board Background Color");
bgButton.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0)));
bgButton.setPreferredSize(new java.awt.Dimension(30, 30));
bgButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
bgButtonActionPerformed(evt);
}
});
colorPanel.add(bgButton);
mediumPanel1.add(colorPanel);
brButton.setBackground(Color.BLACK);
brButton.setText("Brush Color");
brButton.setToolTipText("Change Brush Background Color");
brButton.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0)));
brButton.setPreferredSize(new java.awt.Dimension(100, 25));
brButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
brButtonActionPerformed(evt);
}
});
brColorPanel.setBorder(new javax.swing.border.TitledBorder("Brush Color Settings"));
brColorPanel.add(brButton);
mediumPanel1.add(brColorPanel);
sizePanel.setLayout(new java.awt.BorderLayout(0, 3));
weightCombo.setFont(new java.awt.Font("Dialog", 0, 10));
weightCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Stroke Weight 1.0px", "Stroke Weight 2.0px", "Stroke Weight 5.0px", "Stroke Weight 7.5px", "Stroke Weight 10.0px" }));
weightCombo.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
weightComboActionPerformed(evt);
}
});
sizePanel.setBorder(new javax.swing.border.TitledBorder("Size Setttings"));
sizePanel.add(weightCombo, java.awt.BorderLayout.NORTH);
eraserCombo.setFont(new java.awt.Font("Dialog", 0, 10));
eraserCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Eraser Size 15px", "Eraser Size 20px", "Eraser Size 30px", "Eraser Size 50px", "Eraser Size 100px" }));
eraserCombo.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
eraserComboActionPerformed(evt);
}
});
sizePanel.add(eraserCombo, java.awt.BorderLayout.SOUTH);
mediumPanel1.add(sizePanel);
fillPanel.setLayout(new java.awt.FlowLayout(BoxLayout.Y_AXIS, 4, 4));
fillPanel.setBorder(new javax.swing.border.TitledBorder("Fill Settings"));
//创建当选钮将其增加到按钮组
//为每个单选按钮指定一个事件监听这者
ButtonGroup radioGroup = new ButtonGroup();
emptyButton.addChangeListener(new Item_FillChanged());
filledButton.addChangeListener(new Item_FillChanged());
radioGroup.add(emptyButton);
radioGroup.add(filledButton);
fillPanel.add(emptyButton);
fillPanel.add(filledButton);
mediumPanel1.add(fillPanel);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(10, 5, 5, 5);
ctrlPanel.add(mediumPanel1, gridBagConstraints);
copyleft.setFont(new java.awt.Font("Verdana", 0, 10));
copyleft.setForeground(new java.awt.Color(255, 153, 0));
copyleft.setText("CopyLeft 2007 NJUPT");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 15, 5);
ctrlPanel.add(copyleft, gridBagConstraints);
/********初始化tab页面板和组件间的分隔栏*********/
canvasTabbedPane.addTab("Image1", canvasScrollPanes[0]);
canvasTabbedPane.addChangeListener(new Act_ChangeTab());
//文件目录树和Flash之间的分隔栏
toolFlashSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, true, flashLabel, ctrlPanel);
//文件文本域面板与指示光标所在行文本域面板之间的分隔栏
tabbedStatusSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, true, canvasTabbedPane, statusScrollPane);
//左边大面板与右边大面板之间的分隔栏
leftCenterSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, toolFlashSplitPane, tabbedStatusSplitPane);
// 设置分隔栏两边面板显示的宽度,如果分割条是左右分割,则参数表示分割条的横坐标
// 如果分割条是上下分割,则参数表示分割条的纵坐标
leftCenterSplitPane.setDividerLocation(150);
tabbedStatusSplitPane.setDividerLocation(460);
toolFlashSplitPane.setDividerLocation(120);
//初始化帮助
initHelp();
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(editToolBar, BorderLayout.NORTH);
this.getContentPane().add(leftCenterSplitPane);
}
/**
* 初始化帮助信息
*/
private void initHelp(){
//帮助信息主要显示菜单的快捷方式
// field存放JTable的表头信息,即表的标题
String[] field = { "MenuItem", "ShortCut Key" };
// data存放JTable的数据。
Object[][] data = { { " New ", " Ctrl+N " },
{ " Open ", " F12 " },
{ " Save ", " Ctrl+S " },
{ " Exit ", " Ctrl+X " },
{ " Help ", " Ctrl+H " }, };
// 用表头和数据构造一个表
JTable help_Table = new JTable(data, field);
help_Table.setFont(font);
//不可编辑帮助信息表
help_Table.setEnabled(false);
// 为表和文本域设置背景和前景颜色
helpTextArea.setFont(new Font("Courier", Font.TRUETYPE_FONT, 16));
helpFrame.getContentPane().setLayout(new BorderLayout());
help_Table.setForeground(Color.pink);
helpTextArea.setForeground(Color.pink);
help_Table.setBackground(new Color(70, 80, 91));
help_Table.setSelectionBackground(new Color(70, 80, 91));
helpTextArea.setBackground(new Color(70, 80, 91));
helpTextArea.setText(" If you want to use this software with all functions,\n"
+ " You must do the things following:\n"
+ " 1: install jdk_1.3 or Higher than it ;\n"
+ " 2: set your classpath and path correctly;\n"
+ " 3: if you want to use the compile and build functions,\n"
+ " you should save your edited File in the save directory\n"
+ " with this software.\n ");
// 将文本域和表加到窗体中
helpFrame.getContentPane().add(
new JScrollPane(help_Table,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED), BorderLayout.CENTER);
helpFrame.getContentPane().add(
new JScrollPane(helpTextArea,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED), BorderLayout.NORTH);
}
//退出画板
private void exitPaintBoard(){
if(JOptionPane.showConfirmDialog(this, "你确定退出画板?", "退出", JOptionPane.YES_NO_OPTION)== JOptionPane.YES_OPTION){
// 如果选择YES,则退出。
//dispose方法用于释放资源
//释放由此 Window、其子组件及其拥有的所有子组件所使用的所有本机屏幕资源。
//即这些 Component 的资源将被破坏,它们使用的所有内存都将返回到操作系统,并将它们标记为不可显示。
//通过随后对 pack 或 show 的调用重新构造本机资源,可以再次显示 Window 及其子组件。
//重新创建的 Window 及其子组件的状态在移除 Window 的点上与这些对象的状态将是一样的(不考虑这些操作之间的其他更改)。
dispose();
System.exit(0);
}
}
/**
* 键盘事件处理器
*/
public class MyKeyListener extends KeyAdapter{
//覆盖父类的keyPressed方法,处理键被按下时的事件。
public void keyPressed(KeyEvent e){
//按F12打开文件
if(e.getKeyCode() == KeyEvent.VK_F12){
(new Act_OpenFile()).actionPerformed(null);
}
// 按Ctrl加S键保存文件
else if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_S){
(new Act_SaveFile()).actionPerformed(null);
}
// 按Ctrl加N新建文件
else if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_N){
(new Act_NewFile()).actionPerformed(null);
}
// 按Ctrl加E退出编辑器
else if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_E){
(new Act_ExitEditor()).actionPerformed(null);
}
// 按Ctrl加H显示帮助
else if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_H){
(new Act_Help()).actionPerformed(null);
}
}
}
/**
* 窗口事件侦听器
*/
public class WindowListener extends WindowAdapter{
//处理关闭窗口事件
public void windowClosing(WindowEvent e){
dispose();
System.exit(0);
}
}
/**
* 切换tab页事件
*/
class Act_ChangeTab implements ChangeListener{
public void stateChanged(ChangeEvent e){
//切换tab页时,更新canvas_control的值。
canvas_control = canvasTabbedPane.getSelectedIndex();
}
}
/**
* 打开文件事件
*/
class Act_OpenFile implements ActionListener{
public void actionPerformed(ActionEvent e_ji1){
//打开已有文件
if (filechooser1 == null) {
filechooser1 = new JFileChooser();
filechooser1.setFileFilter(fileFilter);
filechooser1.setMultiSelectionEnabled(false);
filechooser1.setAcceptAllFileFilterUsed(false);
filechooser1.setCurrentDirectory(new File("./"));
}
int retVal = filechooser1.showOpenDialog(canvases[canvas_control]);
if (retVal != JFileChooser.APPROVE_OPTION)
return;
//获取待打开的文件名
String filename = filechooser1.getSelectedFile().getName();
//新建一个tab页,用于装新打开的文件
canvasTabbedPane.addTab(filename, canvasScrollPanes[tb]);
canvasTabbedPane.setSelectedIndex(tb);
//将当前文本域设置到新打开的文件上
canvas_control = tb;
tb++;
//获取待打开的文件所在的目录,将目录保存至数组,这样在保存文件的时候,能够将文件名保存到目录中
directory[canvas_control] = filechooser1.getCurrentDirectory().toString();
try {
//将文件内容显示到画板中
canvases[canvas_control].OpenFile(directory[canvas_control] + "/" + filename);
} catch (Exception e_open) {
JOptionPane.showMessageDialog(dialogFrame.getContentPane(), "读取发生错误");
}
}
}
/**
* 新建文件事件
*/
class Act_NewFile implements ActionListener{
public void actionPerformed(ActionEvent e_ji10){
// 切换tab页时,更新canvas_control的值。
canvasTabbedPane.addTab("Image" + (tb + 1), canvasScrollPanes[tb]);
canvasTabbedPane.setSelectedIndex(tb);
canvas_control = tb;
tb++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -