Java实现简单小画板

news2024/11/14 13:49:05

Java制作简单画板,包括两个类,一个主要画板类Drawpad,一个画板监听器DrawListener类。

1、Drawpad类,包括画板,画板功能设计,保存图片等

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

306

307

308

309

310

311

312

313

314

315

316

317

318

319

320

321

322

323

324

325

326

327

328

329

330

331

332

333

334

335

336

337

338

339

340

341

342

343

344

345

346

347

348

349

350

351

352

353

354

355

356

357

358

359

360

361

362

363

364

365

366

367

368

369

370

371

372

373

374

375

376

377

378

379

380

381

package Java课程设计;

import java.awt.Graphics;

import javax.imageio.ImageIO;

import javax.print.DocFlavor.STRING;

import javax.swing.ImageIcon;

import javax.swing.JDialog;

import javax.swing.JFileChooser;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JTextArea;

import javax.swing.JTextField;

import javax.swing.UIManager;

import javax.swing.UnsupportedLookAndFeelException;

import java.awt.AWTException;

import java.awt.BasicStroke;

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Component;

import java.awt.Container;

import java.awt.Dimension;

import java.awt.Font;

import java.awt.Graphics2D;

import java.awt.Rectangle;

import java.awt.Robot;

import java.awt.Shape;

import java.awt.Window;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.image.BufferedImage;

import java.awt.image.ColorModel;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.util.ArrayList;

import javax.swing.JButton;

import javax.swing.filechooser.FileNameExtensionFilter;

public class Drawpad {

?? ? static Color color1;

public static void main(String[] args) {

?? ?Drawpad dp = new Drawpad();

?? ?dp.initUI();

?? ??

} ?

? ?//创建一个JFrame图形窗口

?? ?public void initUI() {

?? ??? ?JFrame jf = new JFrame();

?? ??? ?jf.setTitle("创意画图板(勿拖动)");

?? ??? ?jf.setSize(1500,1000);

?? ??? ?jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭时退出

?? ??? ?jf.setLocationRelativeTo(null);//居中,不用定位窗口大小

?? ??? ?//创建字体,之后所有的字体为该字体

?? ??? ?Font f=new Font("方正仿宋简体", Font.BOLD, 20);

?? ??? ?//创建画笔监听器

?? ??? ?DrawListener ?dl = new DrawListener();

?? ??? ?//创建读取图片BufferedImage(将图片加载到drawPanel面板中)和画笔g,画笔g为在保存图片上进行图画。

?? ??? ??? ? ? ?BufferedImage bi = new BufferedImage(1300,800, BufferedImage.TYPE_INT_ARGB);

?? ??? ??? ? ? ?Graphics2D g = bi.createGraphics();

?? ??? ??? ? ? ?//初始化时填充白色

?? ??? ??? ? ? ?g.setColor(Color.WHITE);

?? ??? ??? ? ? ?//先将图片填充为白色

?? ??? ??? ??? ?g.fillRect(0, 0, 1300,800);

?? ??? ??? ??? ?

?? ??? ??? ??? ?

?? ??? ?//设置增加菜单栏,包括保存和新建两个按钮

?? ??? ?JMenuBar box=new JMenuBar();

?? ??? ?//在窗体上加菜单条,做一个菜单条,是菜单条,不是工具栏

?? ??? ?//创建menubtn1保存按钮,并加上监听器,以图片的形式保存绘画板上的内容

?? ??? ?JButton menubtn1=new JButton("保存");

?? ??? ?//为保存按钮注册监听器

?? ??? ? ?menubtn1.addActionListener(new ActionListener(){

? ? ??? ??? ??? ?@Override

? ? ??? ??? ??? ?public void actionPerformed(ActionEvent arg0) {

? ? ??? ??? ??? ??? ?//创建文件保存窗口

? ? ??? ??? ??? ??? ?JFileChooser f=new JFileChooser("保存");

? ? ??? ??? ??? ??? ?int returnVal = f.showSaveDialog(null);

? ? ??? ??? ??? ??? ?

?? ??? ??? ??? ??? ?File?? ?file1=null;

?? ??? ??? ??? ??? ?if(returnVal == JFileChooser.APPROVE_OPTION) {

?? ??? ??? ??? ??? ? ? ?file1 =f.getSelectedFile();

?? ??? ??? ??? ??? ??? ?String name = f.getName(file1);

?? ??? ??? ??? ??? ??? ?try {

?? ??? ??? ??? ??? ??? ??? ?

?? ??? ??? ??? ??? ??? ??? ?ImageIO.write(bi, "PNG", new File(f.getCurrentDirectory(),name+".png"));

?? ??? ??? ??? ??? ??? ?} catch (IOException e) {

?? ??? ??? ??? ??? ??? ??? ?//需抛出异常

?? ??? ??? ??? ??? ??? ??? ?// TODO Auto-generated catch block

?? ??? ??? ??? ??? ??? ??? ?e.printStackTrace();

?? ??? ??? ??? ??? ??? ?}

?? ??? ??? ??? ??? ?}

? ? ??? ??? ??? ?}

? ? ??? ??? ? });

?? ??? ? /*JButton menubtn2=new JButton("打开");

?? ??? ? ?//为打开按钮注册监听器

?? ??? ? ?menubtn1.addActionListener(new ActionListener(){

? ??? ??? ??? ?@Override

? ??? ??? ??? ?//获取当前画笔粗细

? ??? ??? ??? ?public void actionPerformed(ActionEvent arg0) {

? ??? ??? ??? ??? ?BufferedImage bimg = null;

? ??? ??? ??? ??? ?JFileChooser f=new JFileChooser("打开");

??? ??? ??? ??? ?int returnVal = f.showOpenDialog(null);

??? ??? ??? ??? ?

?? ??? ??? ??? ?File?? ?file1=null;

?? ??? ??? ??? ?if(returnVal == JFileChooser.APPROVE_OPTION) {

?? ??? ??? ??? ? ? ?file1 =f.getSelectedFile();

?? ??? ??? ??? ??? ?String name = f.getName(file1);

?? ??? ??? ??? ??? ?try {

? ? ? ? ? ? ? ? ? ? ??

?? ??? ??? ??? ??? ?} catch (IOException e) {

?? ??? ??? ??? ??? ??? ?// TODO Auto-generated catch block

?? ??? ??? ??? ??? ??? ?e.printStackTrace();

?? ??? ??? ??? ??? ?}

?? ??? ??? ??? ?}

? ??? ??? ??? ??? ?

? ??? ??? ??? ??? ?

? ??? ??? ??? ?}

? ??? ??? ? });*/

?? ??? ? ?

?? ??? ?//创建menubtn3退出按钮,并加上监听器,退出程序

?? ??? ? ?JButton menubtn3=new JButton("退出");

?? ??? ? ?menubtn3.addActionListener(new ActionListener(){

?? ? ? ?? ??? ??? ?@Override

?? ? ? ?? ??? ??? ?//获取当前画笔粗细

?? ? ? ?? ??? ??? ?public void actionPerformed(ActionEvent arg0) {

?? ? ? ?? ??? ??? ??? ?int ret=JOptionPane.showConfirmDialog(null, "你确定要退出吗", "确认退出", JOptionPane.YES_NO_OPTION);

?? ? ? ?? ??? ??? ??? ?if(ret==JOptionPane.YES_OPTION){

?? ? ? ?? ??? ??? ??? ??? ?//“确认”退出程序

?? ? ? ?? ??? ??? ??? ??? ?System.exit(0);

?? ? ? ?? ??? ??? ??? ?}

?? ? ? ?? ??? ??? ?}

?? ? ? ?? ??? ? });

?? ??? ? ?box.add(menubtn1);

?? ??? ? // box.add(menubtn2);

?? ??? ? ?box.add(menubtn3);

?? ??? ?//jf.setJMenuBar(box);

?? ??? ?

?? ??? ?jf.setJMenuBar(box);

?? ??? ?

?? ??? ?//jf用BorderLayout布局

?? ??? ?

?? ??? ?//北边,画板模式功能栏

?? ??? ?JPanel funcPanel=new JPanel();

?? ??? ?jf.add(funcPanel,BorderLayout.NORTH);

?? ??? ?

?? ??? ?//中间,画布

?? ??? ?JPanel drawPanel=new JPanel();

?? ??? ?jf.add(drawPanel,BorderLayout.CENTER);

?? ??? ?drawPanel.setPreferredSize(new Dimension(1000,700));

?? ??? ?drawPanel.setBackground(dl.background);

?? ??? ?//一定要在画布上加上监听器!!1若画布没有加上监听器,无法显示

?? ??? ?drawPanel.addMouseListener(dl);

?? ??? ?drawPanel.addMouseMotionListener(dl);

?? ??? ?

?? ??? ?//南边,为画笔颜色选择按钮

?? ??? ?JPanel colorPanel=new JPanel();

?? ??? ?jf.add(colorPanel,BorderLayout.SOUTH);

?? ??? ?

?? ??? ?//右边,为选择背景颜色按钮、画笔粗细选择按钮

?? ??? ?JPanel backgroundPanel=new JPanel();

?? ??? ?jf.add(backgroundPanel,BorderLayout.EAST);

?? ??? ?backgroundPanel.setPreferredSize(new Dimension(150,1000));

?? ??? ?

?? ??? ?//左边,获取当前状态如:背景颜色、画笔颜色、画笔性质

?? ??? ?JPanel nowPanel=new JPanel();

?? ??? ?jf.add(nowPanel,BorderLayout.WEST);

?? ??? ?nowPanel.setPreferredSize(new Dimension(180,1000));

?? ??? ?

?? ??? ?//左边放入当前状态Panel

?? ??? ?nowPanel.setBackground(Color.WHITE);

?? ??? ? JLabel label2=new JLabel("当前背景颜色");

?? ??? ? ?label2.setFont(f);

?? ??? ? ? nowPanel.add(label2);

?? ??? ? ? //放入当前背景颜色

?? ??? ? ? JButton nowbackgroundColor=new JButton();

? ? ? ? ? ?nowbackgroundColor.setPreferredSize(new Dimension(60,60));

? ? ? ? ? ?nowbackgroundColor.setBackground(Color.WHITE);//背景初始化为灰色

?? ??? ? ? nowPanel.add(nowbackgroundColor);

?? ??? ? ? //放入当前画笔

?? ??? ? ? JLabel label3=new JLabel("请选择画笔模式");

?? ??? ??? ? ?label3.setFont(f);

?? ??? ??? ? ? nowPanel.add(label3);

?? ??? ? ? //放入当前画笔颜色

?? ??? ? ? JButton nowColor=new JButton();

? ? ? ? ? ?nowColor.setPreferredSize(new Dimension(60,60));

? ? ? ? ? ?nowColor.setBackground(Color.BLACK);//画笔颜色初始化为黑色色

?? ??? ? ? nowPanel.add(nowColor);

?? ??? ? ?

?? ??? ??? ?//获取当前画笔模式

?? ??? ??? ?JLabel label4=new JLabel("当前画笔模式");

?? ??? ??? ? ?label4.setFont(f);

?? ??? ??? ? ? nowPanel.add(label4);

?? ??? ??? ? ? JTextField text=new JTextField(dl.btncontent); //获得选择画笔模式的按钮内容,得到当前画笔模式

?? ??? ??? ? ? text.setPreferredSize(new Dimension (160,60));

?? ??? ??? ? ? text.setFont(f);

?? ??? ??? ? ? text.setEditable(false); ?//不可改

?? ??? ??? ?nowPanel.add(text);

?? ??? ??? ?//获取当前画笔粗细状态

?? ??? ??? ?JLabel label6=new JLabel("当前画笔粗细(中)"); ?//默认粗细为中

?? ??? ??? ? ?label6.setFont(f);

?? ??? ??? ? ? nowPanel.add(label6);

?? ??? ??? ? ? JTextField text1=new JTextField("请选择画笔粗细");

?? ??? ??? ? ? text1.setPreferredSize(new Dimension (160,60));

?? ??? ??? ? ? text1.setFont(f);

?? ??? ??? ? ? text1.setEditable(false); //不可编辑

?? ??? ??? ?nowPanel.add(text1);

?? ??? ??? ?//输入需要添加的文字

?? ??? ??? ?JLabel label7=new JLabel("请输入文字:");

?? ??? ??? ? ?label7.setFont(f);

?? ??? ??? ? ? nowPanel.add(label7);

?? ??? ??? ? ? JTextField text2=new JTextField();

?? ??? ??? ? ? text2.setPreferredSize(new Dimension (160,60));

?? ??? ??? ? ? text2.setFont(f);

?? ??? ??? ? ? nowPanel.add(text2);?

?? ??? ??? ? ? JLabel label8=new JLabel("请输入文字样式:");

?? ??? ??? ??? ? ?label8.setFont(f);

?? ??? ??? ??? ? ? nowPanel.add(label8);

?? ??? ??? ??? ? ? JTextField text3=new JTextField("方正仿宋简体");

?? ??? ??? ??? ? ? text3.setPreferredSize(new Dimension (160,60));

?? ??? ??? ??? ? ? text3.setFont(f);

?? ??? ??? ??? ? ? nowPanel.add(text3);

?? ??? ??? ??? ? ? JLabel label9=new JLabel("请输入文字大小:");

?? ??? ??? ??? ??? ? ?label9.setFont(f);

?? ??? ??? ??? ??? ? ? nowPanel.add(label9);

?? ??? ??? ??? ??? ? ? JTextField text4=new JTextField("20");

?? ??? ??? ??? ??? ? ? text4.setPreferredSize(new Dimension (160,60));

?? ??? ??? ??? ??? ? ? text4.setFont(f);

?? ??? ??? ??? ??? ? ? nowPanel.add(text4);

?? ??? ??? ?//为获取文字内容加一个按钮并加上监听器

?? ??? ??? ? ? JButton getcontent=new JButton("获取文字");

?? ??? ??? ? ? getcontent .setFont(f);

?? ??? ??? ??? ?getcontent.setBackground(Color.YELLOW);

?? ??? ??? ??? ?getcontent.addActionListener(new ActionListener(){

?? ??? ??? ??? ??? ?@Override

?? ??? ??? ??? ??? ?public void actionPerformed(ActionEvent e) {

?? ??? ??? ??? ??? ??? ? String content=text2.getText();

?? ??? ??? ??? ??? ??? ?String mode=text3.getText();

?? ??? ??? ??? ??? ??? ?String size=text4.getText();

?? ??? ??? ??? ??? ??? ?dl.mode=mode; //获取文字样式

?? ??? ??? ??? ??? ??? ? ? dl.content=content; //获取文字内容

?? ??? ??? ??? ??? ??? ? ? dl.size=size; //获取文字大小

?? ??? ??? ??? ??? ?}

?? ??? ??? ??? ? });

?? ??? ??? ??? ?nowPanel.add(getcontent);

?? ??? ??? ??? ?

?? ??? ??? ??? ?//最后在当前状态画板中加一个清除画布内容的功能

?? ??? ??? ??? ?JButton clear=new JButton("清除");

?? ??? ??? ??? ? ?clear.setFont(f);

?? ??? ??? ??? ??? ?clear.setBackground(Color.RED);

?? ??? ??? ??? ??? ?clear.addActionListener(dl);

?? ??? ??? ??? ??? ?nowPanel.add(clear);

?? ??? ??? ??? ??? ?

?? ??? ?//添加按钮到北边(每个按钮写两行代码太多,通过数组方式添加按钮)

?? ??? ??? ??? ?//加入标签(选择画笔模式)

?? ??? ??? ??? ?JLabel labelh =new JLabel("选择画笔模式");

?? ??? ??? ??? ?labelh.setFont(f);

?? ??? ??? ??? ?funcPanel.add(labelh);

?? ??? ??? ??? ?//将按钮名字保存在数组中,后依次存储

?? ??? ?String[] btnstr= {"画笔","直线","矩形","填充矩形","圆","填充圆","弧线","喷枪","波形","分形","长方体","九宫格递归","文字","橡皮"};

?? ??? ?//将画笔状态按钮防置panel中

?? ??? ?for( int i=0;i<btnstr.length;i++) {

?? ??? ??? ?JButton btn=new JButton(btnstr[i]);

?? ??? ??? ?funcPanel.add(btn);

?? ??? ??? ?btn .setFont(f);

?? ??? ??? ?btn.setBackground(Color.white);

?? ??? ??? ?//加上画笔监听器

?? ??? ??? ?btn.addActionListener(dl);

?? ??? ??? ?//加上监听器:获取当前 画笔模式

?? ??? ??? ?btn.addActionListener(new ActionListener(){

?? ??? ??? ??? ?@Override

?? ??? ??? ??? ?public void actionPerformed(ActionEvent e) {

?? ??? ??? ??? ??? ?text.setText(btn.getText()); //在当前模式加入选取的画笔模式

?? ??? ??? ??? ?}

?? ??? ??? ? });

?? ??? ??? ?

?? ??? ?};

?? ??? ?

?? ??? ?//在BrderLayout布局SOUTH添加选择颜色按钮

?? ??? ?JLabel label =new JLabel("选择画笔(橡皮)颜色");

?? ??? ?label.setFont(f);

?? ??? ?colorPanel.add(label);

?? ??? ?

?? ??? ? //添加颜色按钮

?? ??? ?Color[] colorArray = { Color.BLUE, Color.GREEN, Color.RED,?

? ? ? ? ? ? ? ? Color.BLACK,Color.ORANGE,Color.PINK,Color.CYAN,

? ? ? ? ? ? ? ? Color.MAGENTA,Color.DARK_GRAY,Color.GRAY,

? ? ? ? ? ? ? ? Color.LIGHT_GRAY,Color.YELLOW,Color.WHITE};

?? ??? ?

?? ??? ?//在布局管理器中添加颜色按钮

? ? ? ? for( int i=0;i<colorArray.length;i++) {

?? ??? ??? ?

? ? ? ? ?? ?JButton button = new JButton();

? ? ? ? ? ? button.setBackground(colorArray[i]);

? ? ? ? ? ? button.setPreferredSize(new Dimension(50, 50));

? ? ? ? ? ? button.addActionListener(dl);

? ? ? ? ? ? colorPanel.add(button);

? ? ? ? ? ? //获取当前状态的画笔颜色

? ? ? ? ? ? button.addActionListener(new ActionListener(){

?? ??? ??? ??? ?@Override

?? ??? ??? ??? ?public void actionPerformed(ActionEvent e) {

?? ??? ??? ??? ??? ?nowColor.setBackground(button.getBackground()); ?//在当前画笔颜色按钮加入选择的按钮颜色

?? ??? ??? ??? ?}

?? ??? ??? ? });

?? ??? ?};

?? ??? ?

?? ? ?funcPanel.setBackground(Color.gray);

?? ? ?

?? ? ?//添加背景主板颜色按钮,并设置监听器(背景颜色为按钮颜色)

?? ? ?JLabel label1=new JLabel("选择背景颜色");

?? ? ?label1.setFont(f);

?? ? ? backgroundPanel.add(label1);

?? ? ?Color[] backgroundArray= { Color.GREEN, Color.RED,

? ? ? ? ? Color.ORANGE,Color.PINK,Color.CYAN,

? ? ? ? ? ? ? Color.MAGENTA,Color.DARK_GRAY,Color.GRAY,

? ? ? ? ? ? ? Color.LIGHT_GRAY,Color.YELLOW,Color.WHITE,Color.BLACK};

?? ? ?//将按钮加入进去

?? ? ?for( int i=0;i<backgroundArray.length;i++) {

?? ??? ??? ?

? ? ? ?? ?JButton button = new JButton();

? ? ? ? ? button.setBackground(backgroundArray[i]);

? ? ? ? ? button.setPreferredSize(new Dimension(50, 50));

? ? ? ? ? backgroundPanel.add(button);

? ? ? ? ? //添加监听器,按下按钮改变背景颜色,同时体现当前状态

?? ??? ?button.addActionListener(new ActionListener(){

?? ??? ??? ?@Override

?? ??? ??? ?public void actionPerformed(ActionEvent arg0) {

?? ??? ??? ??? ?drawPanel.setBackground(button.getBackground()); //将背景颜色改为选取的背景颜色

?? ??? ??? ??? ?color1=button.getBackground();

?? ??? ??? ??? ?dl.background=color1; ?//将背景颜色传给DrawListener中的变量

?? ??? ??? ? ? ?System.out.println(color1);

?? ??? ??? ??? ?g.setColor(color1);

?? ??? ??? ??? ?g.fillRect(0, 0, 1300,800); ?//图片画笔填充背景颜色

?? ??? ??? ??? ?nowbackgroundColor.setBackground(button.getBackground());

?? ??? ??? ?}

?? ??? ? });

?? ??? ?};

?? ??? ?

?? ??? ?//添加选择画笔粗细的按钮,可选择画笔的粗细

?? ??? ?JLabel label5=new JLabel("选择画笔粗细");

?? ??? ? ?label5.setFont(f);

?? ??? ? ? backgroundPanel.add(label5);

?? ??? ? ? String[] Size={"细","中","粗"};

?? ??? ? ? //选择画笔模式的按钮

?? ??? ? ? for(int i=0;i<3;i++){

?? ??? ??? ? ? JButton graphsize=new JButton(Size[i]);

?? ??? ??? ? ? graphsize.setFont(new Font("宋体", Font.BOLD, 15));

?? ??? ??? ? ? graphsize.setBackground(Color.WHITE);

?? ??? ? ? ? ? graphsize.setPreferredSize(new Dimension(50, 50));

?? ??? ? ? ? ? backgroundPanel.add(graphsize);

? ? ? ? ? ? ? ?graphsize.addActionListener(dl);

? ? ? ? ? ? ? ?graphsize.addActionListener(new ActionListener(){

? ? ? ??? ??? ??? ?@Override

? ? ? ??? ??? ??? ?//获取当前画笔粗细

? ? ? ??? ??? ??? ?public void actionPerformed(ActionEvent e) {

? ? ? ??? ??? ??? ??? ?text1.setText(graphsize.getText()); //获取当前画笔模式

? ? ? ??? ??? ??? ?}

? ? ? ??? ??? ? });

?? ??? ? ? }

?? ??? ?jf.setVisible(true);

?? ??? ?// 获取这个界面的graphics属性, 画笔 g

?? ??? ?//Graphics2D g = (Graphics2D) drawPanel.getGraphics();

?? ??? ?//drawPanel.paintComponent(g);

?? ??? ? Graphics2D g1= (Graphics2D) drawPanel.getGraphics();

?? ??? ?

?? ??? ?//为画笔添加监听器

?? ??? ?drawPanel.addMouseListener(dl);

?? ??? ?dl.g = ?g1;// 右传左?

?? ??? ?dl.g3 = g;// 右传左

?? ??? ?

?? ?}

}

2、DrawListner类,画板功能监听器

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

306

307

308

309

310

311

312

313

314

315

316

317

318

319

320

321

322

323

324

325

326

327

328

329

330

331

332

333

334

335

336

337

338

339

340

341

342

343

344

345

346

package Java课程设计;

import java.awt.BasicStroke;

import java.awt.Color;

import java.awt.Container;

import java.awt.Dimension;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.RenderingHints;

import java.awt.Shape;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.MouseMotionListener;

import java.awt.geom.AffineTransform;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JTextField;

import java.awt.Color;

import java.util.ArrayList;

import java.util.Random;

import Java课程设计.Drawpad;

public class DrawListener implements MouseListener,ActionListener,MouseMotionListener {

?? ?//获取画笔

?? ?Graphics2D g;

?? ?//获取在保存图片上的画笔

?? ??? ?Graphics2D g3;

?? ?//获取按钮内容

?? ?String btnstr;

?? ?Color background=Color.white; //背景颜色默认为白色

?? ?Color graphcolor=Color.BLACK; //画笔颜色默认为黑色

?? ?JButton btn;

?? ?int x1, y1, x2, y2;// 声明坐标变量?

?? ?int x3=400;

?? ?int y3=0;

?? ?int graphsize=3;//默认为中等画笔

?? ?String btncontent="画笔"; //默认画笔模式为画笔

?? ?String content; ?//获取文字中的文字内容

?? ?String mode="方正仿宋简体"; ?//文字样式默认为“方正仿宋简体”

?? ?String size="20";

?? ?

?? ?//九宫格递归方法,画出九宫格

?? ?public void dg(int x,int y,int width,int height) {

?? ??? ?//九宫格函数,九宫格的实现

?? ??? ? if(width<3) {

?? ??? ??? ??? ?return;

?? ??? ??? ? ? ?}

?? ??? ?if(width>90) {

?? ??? ?g.fillRect(x+width/3, y+height/3, width/3, height/3);

?? ??? ?g3.fillRect(x+width/3, y+height/3, width/3, height/3);

?? ??? ?dg(x, y, width/3, height/3);

?? ??? ?dg(x+width/3, y, width/3, height/3);

?? ??? ?dg(x+(width/3)*2, y, width/3, height/3);

?? ??? ?dg(x, y+height/3, width/3, height/3);

?? ??? ?dg(x, y+(height/3)*2, width/3, height/3);

?? ??? ?

?? ??? ?dg(x+width/3, y+height/3, width/3, height/3);

?? ??? ?dg(x+width/3, y+(height/3)*2, width/3, height/3);

?? ??? ?

?? ??? ?dg(x+(width/3)*2, y+height/3, width/3, height/3);

?? ??? ?dg(x+(width/3)*2, y+(height/3)*2, width/3, height/3);

?? ??? ?

?? ??? ?}

?? ? ?//九宫格的实现

?? ? ? else {

?? ??? ? ? g.drawOval(x+width/3, y+height/3, width/3, height/3);

?? ??? ? ? g3.drawOval(x+width/3, y+height/3, width/3, height/3);

?? ??? ? ? dg(x, y, width/3, height/3);

?? ??? ? ? dg(x+width/3, y, width/3, height/3);

?? ??? ??? ?dg(x+(width/3)*2, y, width/3, height/3);

?? ??? ??? ?dg(x, y+height/3, width/3, height/3);

?? ??? ??? ?dg(x, y+(height/3)*2, width/3, height/3);

?? ??? ??? ?

?? ??? ??? ?dg(x+width/3, y+height/3, width/3, height/3);

?? ??? ??? ?dg(x+width/3, y+(height/3)*2, width/3, height/3);

?? ??? ??? ?

?? ??? ??? ?dg(x+(width/3)*2, y+height/3, width/3, height/3);

?? ??? ??? ?dg(x+(width/3)*2, y+(height/3)*2, width/3, height/3);

?? ? ? }?? ?

?? ?

?? ?}

?? ?//判断是颜色按钮还是画笔按钮,改变的全部是画笔按钮

?? ?public void actionPerformed(ActionEvent e) {

?? ??? ?btnstr=e.getActionCommand(); ?//获取按钮的文字内容

?? ??? ?//g.setColor(Color.black);

?? ??? ?//如果为颜色按钮,将画笔改颜色

?? ??? ?if(btnstr.equals("清除")){

?? ??? ??? ?//重新填充背景,同时将画笔置为背景颜色

?? ??? ??? ? System.out.println(background);

?? ??? ??? ?g.setColor(background);//保存图片画笔填充背景颜色

?? ? ? ??? ?g.fillRect(0, 0, 1300, 800);

?? ? ? ??? ?g3.setColor(background);//画笔重新填充背景

?? ? ? ??? ?g3.fillRect(0, 0, 1300, 800);

?? ? ? ??? ?g.setColor(graphcolor);

?? ? ? ??? ?g3.setColor(graphcolor);

?? ??? ?}

?? ??? ?else{

?? ??? ?if(btnstr.equals("")) {

?? ??? ??? ?//获取点击内容,将其内容强制转换成JButton

?? ??? ? ? btn=(JButton) e.getSource();

?? ??? ??? ?//获取颜色按钮颜色

?? ??? ? ? graphcolor=btn.getBackground();

?? ??? ??? ?

?? ??? ?}

?? ??? ?//若为画笔粗细,获取粗细大小

?? ??? ?else if(btnstr.equals("细")){

?? ??? ??? ?graphsize=1; ?//画笔大小为细,大小size为1

?? ??? ?}

?? ??? ?else if(btnstr.equals("中")){

?? ??? ??? ?graphsize=3;

?? ??? ?}

?? ??? ?else if(btnstr.equals("粗")){

?? ??? ??? ?graphsize=5;

?? ??? ?}

?? ??? ?else{

?? ??? ??? ?btncontent=btnstr; //获取画笔模式按钮的内容

?? ??? ?}

?? ??? ?}

?? ?}

?? ?//鼠标点击方法

?? ?@Override

?? ?public void mouseClicked(MouseEvent e) {

?? ??? ?System.out.println("点击");

?? ?}

? ?//鼠标按下方法

?? ?@Override

?? ?public void mousePressed(MouseEvent e) {

?? ??? ?System.out.println("按下");

?? ??? ?x1=e.getX();

?? ??? ?y1 =e.getY();

?? ?}

? ? //重写鼠标释放时的方法

?? ?@Override

?? ?public void mouseReleased(MouseEvent e) {

?? ??? ?g.setColor(graphcolor);//获取保存画笔的颜色

?? ??? ?g3.setColor(graphcolor); //获取画板画笔的颜色

?? ??? ?

?? ??? ?x2=e.getX();

?? ??? ?y2 =e.getY();

?? ??? ?//选取画笔模式为直线时

?? ??? ?if(btncontent.equals("直线")) {

?? ??? ??? ?g.setStroke(new BasicStroke(graphsize)); //保存画笔进行画图

?? ??? ?g.drawLine(x1, y1, x2, y2);//画笔画直线

?? ??? ?g3.setStroke(new BasicStroke(graphsize));//置画笔大小

?? ??? ?g3.drawLine(x1, y1, x2, y2);

?? ??? ?}

?? ??? ?//选取画笔模式为波形时

?? ??? ?else if(btncontent.equals("波形")) {

?? ??? ??? ?//波形函数

?? ??? ??? ?g.setStroke(new BasicStroke(graphsize)); //置画笔大小

?? ??? ??? ?g3.setStroke(new BasicStroke(graphsize));

?? ??? ??? ?double x4 = 0,y4 = 0;

?? ??? ??? ?double a2=1.40,b2=1.56,c2=1.40,d2=-6.56;

?? ??? ??? ?//波形函数

?? ??? ??? ?for(int i=0;i<5000;i++) {

?? ??? ??? ??? ?double x5=Math.sin(a2*x4)-Math.cos(b2*y4);

?? ??? ??? ??? ?double y5=Math.sin(c2*x4)-Math.cos(d2*y4);

?? ??? ??? ??? ?x4=x5;

?? ??? ??? ??? ?y4=y5;

?? ??? ??? ??? ?int px=(int)(x5*100+x1);

?? ??? ??? ??? ?int py=(int)(y5*100+y1);

?? ??? ??? ??? ?//画波形

?? ??? ??? ??? ?g.drawLine(px, py, px, py);

?? ??? ??? ??? ?g3.drawLine(px, py, px, py);

?? ??? ??? ??? ?}

?? ??? ?}

?? ??? ?//选取画笔模式为矩形时

?? ??? ?else if(btncontent.equals("矩形")) {

?? ??? ??? ?g.setStroke(new BasicStroke(graphsize)); //获取矩形画笔的大小

?? ??? ??? ?g.drawRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2-x1), Math.abs(y2-y1));//画矩形

?? ??? ??? ?g3.setStroke(new BasicStroke(graphsize));?

?? ??? ??? ?g3.drawRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2-x1), Math.abs(y2-y1));

?? ??? ?}

?? ??? ?//选取的画笔模式为填充矩形

?? ??? ?else if(btncontent.equals("填充矩形")){

?? ??? ??? ?//画填充矩形

?? ??? ??? ?g.fillRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2-x1), Math.abs(y2-y1));

?? ??? ??? ?g3.fillRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2-x1), Math.abs(y2-y1));

?? ??? ?}

?? ??? ?//长方体函数

?? ??? ?else if(btncontent.equals("长方体")){

?? ??? ??? ?g.setStroke(new BasicStroke(graphsize));//获取长方体画笔大小

?? ??? ??? ? g.setColor(btn.getBackground());//将画笔颜色置选择画笔颜色按钮颜色

?? ??? ??? ? //长方体函数

?? ? ? ? ? ? ? ?g.fillRect(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x1-x2),Math.abs(y1-y2));

?? ? ? ? ? ? ? ?g3.setStroke(new BasicStroke(graphsize));

?? ??? ??? ??? ? g3.setColor(btn.getBackground());

?? ??? ? ? ? ? ? ? ?g3.fillRect(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x1-x2),Math.abs(y1-y2));

?? ? ? ? ? ? ? ?int a,b,c,d;

?? ? ? ? ? ? ? ?a=Math.min(x1, x2);

?? ? ? ? ? ? ? ?b=Math.max(x1, x2);

?? ? ? ? ? ? ? ?c=Math.min(y1, y2);

?? ? ? ? ? ? ? ?d=Math.max(y1, y2);

?? ? ? ? ? ? ? ?int m=(int)((b-a)*Math.cos(Math.PI/4)*Math.sin(Math.PI/4));

?? ? ? ? ? ? ? ?int n=(int)((b-a)*Math.cos(Math.PI/4)*Math.sin(Math.PI/4));

?? ? ? ? ? ? ? ?//顶面

?? ? ? ? ? ? ? ?g.setColor(btn.getBackground());

?? ? ? ? ? ? ? ?g.fillPolygon(new int[] {a, a+m, b+m,b},new int[] {c,c-n,c-n,c},4);

?? ? ? ? ? ? ? ?//右侧面

?? ? ? ? ? ? ? ?g.setColor(btn.getBackground());

?? ? ? ? ? ? ? ?g.fillPolygon(new int[] {b, b, b+m,b+m},new int[] {c,d,d-n,c-n},4);

?? ? ? ? ? ? ? ?g3.setColor(btn.getBackground());

?? ? ? ? ? ? ? ?g3.fillPolygon(new int[] {a, a+m, b+m,b},new int[] {c,c-n,c-n,c},4);

?? ? ? ? ? ? ? ?//右侧面

?? ? ? ? ? ? ? ?g3.setColor(btn.getBackground());

?? ? ? ? ? ? ? ?g3.fillPolygon(new int[] {b, b, b+m,b+m},new int[] {c,d,d-n,c-n},4);

?? ??? ?}

?? ??? ?//分形函数

?? ??? ?else if(btncontent.equals("分形")){

?? ??? ??? ?g.setStroke(new BasicStroke(graphsize)); ?//获取画笔大小

?? ??? ??? ?g3.setStroke(new BasicStroke(graphsize));

?? ??? ??? ?double x = 0,y = 0;

?? ??? ??? ?//分形函数实现

?? ??? ??? ?double a1=-1.8,b=-2.0,c=-0.5,d=-0.9;

?? ??? ??? ?for(int i=0;i<5000;i++) {

?? ??? ??? ?double x3=Math.sin(a1*y)-c*Math.cos(a1*x);

?? ??? ??? ?double y3=Math.sin(b*x)-d*Math.cos(b*y);

?? ??? ??? ?x=x3;

?? ??? ??? ?y=y3;

?? ??? ??? ?int px=(int)(x3*100+x1);

?? ??? ??? ?int py=(int)(y3*100+y1);

?? ??? ??? ?g.drawLine(px, py, px, py);

?? ??? ??? ?g3.drawLine(px, py, px, py);

?? ??? ?}

?? ??? ?}

?? ??? ?//画圆

?? ? ? ?else if(btncontent.equals("圆")) {

?? ? ? ??? ?g.setStroke(new BasicStroke(graphsize));//获取画笔大小

?? ??? ??? ?g.drawOval(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2-x1), Math.abs(y2-y1));//画圆

?? ??? ??? ?g3.setStroke(new BasicStroke(graphsize));

?? ??? ??? ?g3.drawOval(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2-x1), Math.abs(y2-y1));

?? ??? ?}

?? ??? ?//画填充圆

?? ? ? ?else if(btncontent.equals("填充圆")){

?? ? ? ??? ?g.fillOval(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2-x1), Math.abs(y2-y1));//画填充圆

?? ? ? ??? ?g3.fillOval(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2-x1), Math.abs(y2-y1));

?? ? ? ?}

?? ??? ?//当选取模式为文字

?? ? ? ?else if(btncontent.equals("文字")){

?? ? ? ??? ?//获取画笔大小

?? ? ? ??? ?g.setStroke(new BasicStroke(15));

? ? ? ? Font font = new Font(mode, Font.BOLD, Integer.parseInt(size)); //获得文字内容,文字大小,文字样式 ? ?

? ? ? ? ?g.setFont(font); //在画笔中置文字样式和大小

?? ? ? ??? ?g.drawString(content, x1, y1); //写上文字内容

?? ? ? ??? ?g3.setStroke(new BasicStroke(15));

?? ? ? ??? ? g3.setFont(font);//放入文字样式和大小

?? ? ? ??? ?g3.drawString(content, x1, y1);

?? ? ? ?}

?? ??? ?//当画笔模式为弧线时

?? ? ? ?else if(btncontent.equals("弧线")){

?? ? ? ??? ?g.setStroke(new BasicStroke(graphsize));//获取画笔大小

?? ? ? ??? ?//弧线函数

?? ??? ??? ? g.drawArc(x1, y1, 100, 60, 0, 180);

?? ??? ??? ? g3.setStroke(new BasicStroke(graphsize));

?? ??? ??? ? g3.drawArc(x1, y1, 100, 60, 0, 180);

?? ? ? ?}

?? ??? ?//九宫格递归,调用九宫格函数

?? ? ? ?else if(btncontent.equals("九宫格递归")) {

?? ? ? ??? ?//九宫格递归实现

?? ? ? ??? ? ?dg(0,50,600,600);

?? ? ? ? ?}

?? ??? ?System.out.println("释放");

?? ??? ?

?? ?}

?? ?@Override

?? ?//鼠标进入方法

?? ?public void mouseEntered(MouseEvent e) {

?? ??? ?System.out.println("进入");

?? ?}

?? ?@Override

?? ?//鼠标离开界面方法

?? ?public void mouseExited(MouseEvent e) {

?? ??? ?System.out.println("离开");

?? ?}

?? ?@Override

?? ?public void mouseMoved(MouseEvent e) {

?? ??? ?

?? ?}

?? ?//重写鼠标移动函数

?? ?@Override

?? ?public void mouseDragged(MouseEvent e) {

?? ??? ?g.setColor(graphcolor); //获取画笔颜色

?? ??? ?g3.setColor(graphcolor);

?? ??? ?// TODO Auto-generated method stub

?? ??? ?x2=e.getX();

?? ??? ?y2 =e.getY();

?? ??? ?//当为画笔时

?? ??? ?if(btncontent.equals("画笔")){

?? ??? ??? ?

?? ??? ?g.setStroke(new BasicStroke(graphsize));?? ?//获取当前画笔大小?? ??? ?

?? ??? ?//画笔实现

?? ??? ??? ??? ?g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

?? ??? ??? ??? ?g.drawLine(x1, y1, x2, y2);

?? ??? ??? ??? ?g3.setStroke(new BasicStroke(graphsize));?? ??? ??? ?

?? ??? ??? ??? ?g3.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

?? ??? ??? ??? ?g3.drawLine(x1, y1, x2, y2);

?? ??? ??? ??? ?x1 = x2;

?? ??? ??? ??? ?y1 = y2;

?? ??? ??? ??? ?}

?? ??? ?//橡皮擦

?? ??? ? if(btncontent.equals("橡皮")){

?? ??? ??? ? //将画笔颜色置为背景颜色

?? ??? ??? ? g.setColor(background);

?? ??? ??? ? g3.setColor(background);

?? ??? ??? ?g.setStroke(new BasicStroke(30));?? ?//将橡皮擦的大小置大小为30?? ??? ??? ??? ??? ??? ?

?? ??? ??? ?g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

?? ??? ??? ?g.drawLine(x1, y1, x2, y2);

?? ??? ??? ?

?? ??? ??? ?g3.setStroke(new BasicStroke(30));?? ??? ??? ??? ??? ??? ??? ?

?? ??? ??? ?g3.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

?? ??? ??? ?g3.drawLine(x1, y1, x2, y2);

?? ??? ??? ?x1 = x2;

?? ??? ??? ?y1 = y2; ??

?? ??? ??? ?//使用过后,将画笔颜色重新置为原来颜色

?? ??? ??? ?g.setColor(graphcolor);

?? ??? ??? ?g3.setColor(graphcolor);

?? ? ? ?}

?? ??? ? //喷枪函数

?? ??? ??

?? ? ? ?else if(btncontent.equals("喷枪")){

?? ??? ??? ??? ?g.setStroke(new BasicStroke(graphsize));?? ? ?//不用加粗,获取画笔大小?? ??? ??? ??? ??? ??? ?

?? ??? ??? ??? ?g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

?? ??? ??? ??? ?g3.setStroke(new BasicStroke(graphsize));?? ? ?//不用加粗?? ??? ??? ??? ??? ??? ?

?? ??? ??? ??? ?g3.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

?? ??? ??? ??? ?//喷枪实现函数

?? ??? ??? ??? ?for(int k=0;k<20;k++){

?? ??? ??? ??? ??? ?Random i=new Random(); ? ? ??

?? ??? ??? ??? ??? ?int a=i.nextInt(10);

?? ??? ??? ??? ??? ?int b=i.nextInt(20);

?? ??? ??? ??? ??? ?g.drawLine(x2+a, y2+b, x2+a, y2+b);

?? ??? ??? ??? ??? ?g3.drawLine(x2+a, y2+b, x2+a, y2+b);

?? ? ? ?}

?? ? ? ?}

?? ??? ?

?? ?}

}

画板演示:

保存图片:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/815666.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Boost开发指南-3.6weak_ptr

weak_ptr weak_ptr是为配合shared_ptr而引入的一种智能指针&#xff0c;它更像是shared_ptr的一个助手而不是智能指针&#xff0c;因为它不具有普通指针的行为&#xff0c;没有重载 operator*和->。它的最大作用在于协助shared_ptr工作&#xff0c;像旁观者那样观测资源的使…

伴伴加速“搭子社交”:确认过眼神,是一起玩游戏的人

最近在年轻人中风靡起了一种新型的社交方式——“搭子”社交。例如饭搭子、学习搭子、游戏搭子、减肥搭子......在搭子社交流行的当下&#xff0c;伴伴抓住了这一点&#xff0c;为年轻人提供了一个线上社交平台&#xff0c;让他们能够找到与自己兴趣相投的搭子。 什么是搭子社…

回归预测 | MATLAB实现SO-CNN-LSTM蛇群算法优化卷积长短期记忆神经网络多输入单输出回归预测

回归预测 | MATLAB实现SO-CNN-LSTM蛇群算法优化卷积长短期记忆神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现SO-CNN-LSTM蛇群算法优化卷积长短期记忆神经网络多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现SO-CNN-LS…

接口自动化测试-Jmeter+ant+jenkins实战持续集成(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、下载安装配置J…

vue sku商品规格多选

vue sku商品规格多选 1.创建一个数据对象&#xff0c;用于存储SKU的选中状态。例如&#xff0c;可以使用一个数组来表示选中的SKU&#xff0c;每个元素代表一个SKU选项的id。 data() {return {selectedOptions: []} }2.在SKU选项列表中&#xff0c;使用v-bind:class绑定一个计…

医疗陪诊小程序开发:为您打造贴心、专业的陪护服务

近年来&#xff0c;随着人们对健康关注度的提高和医疗服务需求的增加&#xff0c;陪诊小程序逐渐崭露头角。陪诊小程序是一种基于互联网技术的应用程序&#xff0c;旨在提供便捷、高效的陪诊服务。下面将介绍陪诊小程序开发的优势。   便捷性&#xff1a;陪诊小程序可以通过手…

类和对象——初始化列表

目录 初始化列表 注意 单/多参数传入 explicit关键字 匿名函数 先前&#xff0c;我们知道有构造函数——用于给各成员变量一个初始值。 但是仍然不能称为是初始化&#xff0c;因为初始化只能初始化一次&#xff0c;但是构造函数里可以多次赋值 初始化列表 以日期类Date…

【Golang】解决Go test执行单个测试文件提示未定义问题

目录 背景 根本原因 解决方法 解决 多级引用或多个引用包的情况 总结 资料获取方法 背景 很多人记录过怎么执行Go test单个文件或者单个函数&#xff0c;但是要么对执行单文件用例存在函数或变量引用的场景避而不谈&#xff0c;要么提示调用了其它文件中的模块会报错。其…

Coremail中睿天下|2023年第二季度企业邮箱安全态势观察

7月24日&#xff0c;Coremail邮件安全联合中睿天下发布《2023第二季度企业邮箱安全性研究报告》&#xff0c;对2023第二季度和2023上半年的企业邮箱的安全风险进行了分析。 一、垃圾邮件同比下降16.38% 根据Coremail邮件安全人工智能实验室&#xff08;以下简称AI实验室&#…

c++(强生成关键字+可变参数模板+emplace)[26]

强制生成 不生成 在C中&#xff0c;可以通过一些方式来控制编译器是否生成某些特殊成员函数&#xff08;如默认构造函数、拷贝构造函数、拷贝赋值运算符、析构函数等&#xff09;。 默认生成&#xff1a;如果你没有显式地定义这些特殊成员函数&#xff0c;编译器会自动生成它们…

GNSS技术知识你知道多少?这些你或许还未掌握

GNSS信号频段 GNSS频谱图展示了不同的GNSS信号及其星座、载波频率、调制方案&#xff0c;以及所有这些信号在同一L波段频段内如何相互关联&#xff0c;是GNSS专业人员的必备工具&#xff0c;包括设计和开发GNSS系统的工程师&#xff0c;以及测试GNSS系统的工程师。 GNSS术语 …

如何清理电脑缓存垃圾

1、手动清理电脑缓存 C:\Users\yangguang\AppData\Local\Temp 注&#xff1a;yangguang 是自己电脑对应的用户目录 2、清理完后&#xff0c;电脑流畅了许多。

C++继承(2)——赋值转换、隐藏特性以及作用域

目录 一.子类和父类对象的赋值转换 子类对象赋值父类对象的另外两种方式&#xff1a; 总结&#xff1a; 二.父类与子类的作用域 1. 在继承体系中基类和派生类都有独立的作用域。 例&#xff1a; 2.作用域练习 练习1&#xff1a; 解决方法: 一.子类和父类对象的赋值转换 …

Reinforcement Learning with Code 【Code 2. Tabular Sarsa】

Reinforcement Learning with Code 【Code 2. Tabular Sarsa】 This note records how the author begin to learn RL. Both theoretical understanding and code practice are presented. Many material are referenced such as ZhaoShiyu’s Mathematical Foundation of Rei…

【C# 6.0】云LIS平台源码

基于云计算的区域LIS平台为医疗机构改善患者服务质量提供了强有力的支持&#xff0c;“以患者为核心”这一理念得到了充分实现&#xff0c;可以解决各医院LIS建设水平参差不齐的现状&#xff0c;并完善各医院内LIS系统的功能&#xff0c;实现数据标准统一、功能完善、性能可靠&…

VR全景旅游,智慧文旅发展新趋势!

引言&#xff1a; VR全景旅游正在带领我们踏上一场全新的旅行体验。这种沉浸式的旅行方式&#xff0c;让我们可以足不出户&#xff0c;却又身临其境地感受世界各地的美景。 一&#xff0e;VR全景旅游是什么&#xff1f; VR全景旅游是一种借助虚拟现实技术&#xff0c;让用户…

go env 配置(环境变量)说明

前提&#xff1a;已经安装好 golang 可正确的运行下面这段命令&#xff0c;来查看 go 的配置&#xff1a; go env 输出示例&#xff1a; 以上是我本地(windows)环境下输出的配置信息(环境变量) 我们这次就针对每个配置信息进行一个说明&#xff0c;具体到每个字段是什么意思…

浅谈Vue3 computed计算属性

什么是computed 官方给出的解释&#xff1a;接受一个 getter 函数&#xff0c;返回一个只读的响应式 ref 对象。该 ref 通过 .value 暴露 getter 函数的返回值。它也可以接受一个带有 get 和 set 函数的对象来创建一个可写的 ref 对象 // 只读 function computed<T>(ge…

远程控制软件安全吗?一文看懂ToDesk、RayLink、TeamViewer、Splashtop相关安全机制

目录 一、前言 二、远程控制中的安全威胁 三、国内外远控软件安全机制 【ToDesk】 【RayLink】 【Teamviewer】 【Splashtop】 四、安全远控预防 一、前言 近期&#xff0c;远程控制话题再一次引起关注。 据相关新闻报道&#xff0c;不少不法分子利用远程控制软件实施网络诈骗&…

直播预告 | 开源运维工具使用现状以及可持续产品的思考

运维平台自上世纪90年代开始进入中国市场&#xff0c;曾形成以传统四大外企&#xff1a;IBM、BMC、CA、HP为代表的头部厂商&#xff0c;还有一众从网管起家的国内厂商。2010年前后&#xff0c;出现了以Zabbix、Nagios、Cacti为代表的开源工具&#xff0c;后来又陆续出现了Prome…