dreamcenter 2023-11-12 23:42:49 +08:00
commit b648749ded
3 changed files with 88 additions and 0 deletions

3
.gitignore vendored 100644
View File

@ -0,0 +1,3 @@
out/*
.idea/*
note.iml

BIN
src/note.png 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

View File

@ -0,0 +1,85 @@
package top.dreamcenter.note;
import javax.swing.*;
import javax.swing.text.BadLocationException;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.net.URL;
public class Main {
public static void main(String[] args) {
JFrame jf = new JFrame("日记本");
jf.setSize(800, 1020);
jf.setResizable(false);
jf.setLocationRelativeTo(null);
jf.getContentPane().setLayout(null);
jf.setBackground(Color.WHITE);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 内容面板穿透
JPanel imPanel=(JPanel) jf.getContentPane();
imPanel.setOpaque(false);
// 设置背景图片
URL bkPath = Main.class.getClassLoader().getResource("note.png");
assert bkPath != null;
ImageIcon backgroundImage = new ImageIcon(bkPath);
Image image = backgroundImage.getImage();
Image newimg = image.getScaledInstance(jf.getWidth() - 50, jf.getHeight(), java.awt.Image.SCALE_SMOOTH);
JLabel backgroundLabel = new JLabel(new ImageIcon(newimg));
backgroundLabel.setBounds(0, 0, jf.getWidth() , jf.getHeight());
// 文本行
JTextArea textArea = new JTextArea();
textArea.setFont(new Font(null, Font.PLAIN, 36));
textArea.setOpaque(false); // 透明背景
textArea.setLineWrap(true); // 自动换行
textArea.setTabSize(2);
textArea.setBounds(20, 90, jf.getWidth() - 40, jf.getHeight() - 140);
int maxRows = 19;
textArea.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
try {
int len = textArea.getText().length();
Rectangle rec = textArea.modelToView(len);
// 最大行数
int line = rec.y / rec.height + 1;
// 超出部分逻辑判断
if (line > maxRows) {
int i = len - 1;
for (; i >= 0; i--) {
Rectangle rec0 = textArea.modelToView(i);
int tmpLine = rec0.y / rec0.height + 1;
if (tmpLine <= maxRows){
i++;
break;
}
}
System.out.println("超出行数字符串内容:" + textArea.getText(i, len - i));
textArea.setText(textArea.getText(i, len - i));
}
} catch (BadLocationException badLocationException) {
badLocationException.printStackTrace();
}
}
});
// 添加组件
jf.getLayeredPane().add(backgroundLabel, Integer.valueOf(Integer.MIN_VALUE));
jf.getContentPane().add(textArea);
jf.setVisible(true);
}
}