都说Java程序员,如果没有对象,那就new一个,基于这方面的需求,我就来new一个
新手自学1个月上路,多多指教,仅作记录和自我吐槽。真面向百度编程!!!!!。
等new的对象方法不够了,后面再细细琢磨。基友推荐我用electron+vue,说是好看,半天一个项目,可惜=-=前置技能太多了,一时间开不动这个豪车,只能后面从前置技能慢慢学了
欢迎指点江山,等我以后打回来。手动滑稽
首先来一波散装【含白嫖代码】UI类
import javax.swing.*;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import java.awt.*;
import java.util.Enumeration;
public class lili{
public static DefaultMutableTreeNode rootTree = null;
public static JFrame jfMain = null;
public static JPanel panelMain =null;
public static BGDPanel textPanel =null;
public static JTree tree = null ;
public static JScrollPane jScrollPaneText = null;
public static JTextPane textArea = null;
// public static JTextArea textArea = null;
public static JTextArea jTextSelect = null;
public static JTextArea jTextlike = null;
public static PopupMenu popupMenuselect=null;
public static PopupMenu popupMenuCadd =null;
public static ListenerClick listener = new ListenerClick();
public static JScrollPane jScrollPaneleft = null;
public static void main(String args[]){
jfMain = new JFrame("beta 2.0");
jfMain.setBounds(0,0,1600,1000);
jfMain.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//设置右上角图标
Toolkit toolkit = Toolkit.getDefaultToolkit();
Image icon = toolkit.getImage("src/fish.png");
jfMain.setIconImage(icon);
panelMain = new JPanel(new BorderLayout());
textPanel = new BGDPanel();
textPanel.setLayout(new BorderLayout());
JMenuBar bar = new JMenuBar();
JMenu jMenufile = new JMenu("目录");
JMenuItem jMenuItemFileOffShowTree = new JMenuItem("隐藏书目");
listener.menuItemOffShowTree(jMenuItemFileOffShowTree);
JMenuItem jMenuItemFileOpenPath = new JMenuItem("选择书目");
listener.menuItemOpenPathListener(jMenuItemFileOpenPath);
JMenuItem jMenuItemFileShowTree = new JMenuItem("显示书目");
listener.menuItemShowListenter(jMenuItemFileShowTree);
jMenufile.add(jMenuItemFileOpenPath);
jMenufile.add(jMenuItemFileOffShowTree);
jMenufile.add(jMenuItemFileShowTree);
JMenu jMenuDaohang = new JMenu("数据库");
JMenuItem jMenuItemInstallDB = new JMenuItem("导入素材");
listener.menuItemInstallDBListener(jMenuItemInstallDB);
JMenuItem jMenuItemDelValue = new JMenuItem("删除导入");
listener.menuItemDelDBListener(jMenuItemDelValue);
JMenuItem jMenuItemLikeValue = new JMenuItem("收藏列表操作");
listener.menuItemLikeDBListener(jMenuItemLikeValue);
jMenuDaohang.add(jMenuItemLikeValue);
jMenuDaohang.add(jMenuItemInstallDB);
jMenuDaohang.add(jMenuItemDelValue);
JMenu jMenuset = new JMenu("设置");
JMenuItem jMenuItemSetCheckImage = new JMenuItem("背景选择");
listener.menuItemTextBackgroup(jMenuItemSetCheckImage);
JMenuItem jMenuItemSetMianFont = new JMenuItem("字体");
listener.menuItemFontListener(jMenuItemSetMianFont);
JMenuItem jMenuItemsetColor = new JMenuItem("字体颜色");
listener.menuItemsetColorListener(jMenuItemsetColor);
jMenuset.add(jMenuItemSetCheckImage);
jMenuset.add(jMenuItemSetMianFont);
jMenuset.add(jMenuItemsetColor);
JMenu jMenuCaidan = new JMenu("彩蛋");
JMenuItem jMenuItemSnake = new JMenuItem("神秘");
jMenuCaidan.add(jMenuItemSnake);
listener.menuItemShenMi(jMenuItemSnake);
bar.add(jMenufile);
bar.add(jMenuDaohang);
bar.add(jMenuset);
bar.add(jMenuCaidan);
panelMain.add(bar, BorderLayout.NORTH);
// textArea = new JTextArea();
textArea = new JTextPane();
// textArea.setContentType("text; charset=UTF-8");
Dimension textPanelGetSize = textPanel.getSize();
textArea.setSize(textPanelGetSize);
jScrollPaneText = new JScrollPane(textPanel);
jScrollPaneText.setOpaque(false);
jScrollPaneText.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); // 禁用X滚动
// textArea.setLineWrap(true);
textArea.setOpaque(false); // 关闭控件像素显示
Font font = new Font("新宋体",1,18);
textArea.setFont(font);
// jPanelLeft = new JPanel();
JSplitPane sp_v = new JSplitPane(JSplitPane.VERTICAL_SPLIT);//垂直分割面板
sp_v.setDividerSize(5);//分隔条宽度x像素
sp_v.setContinuousLayout(true);//无拖影
sp_v.setDividerLocation(jfMain.getSize().height/2);//分隔条距离上方x像素
jTextSelect = new JTextArea(); // 上 面板 查询结果展示
JScrollPane jScrollPaneTextUp = new JScrollPane(jTextSelect);
jTextSelect.setEditable(false);
jTextSelect.setColumns(30);
jTextSelect.setLineWrap(true);
sp_v.setTopComponent(jScrollPaneTextUp);
jTextlike = new JTextArea(); //下面版 收藏结果
JScrollPane jScrollPaneTextDown = new JScrollPane(jTextlike);
jTextlike.setEditable(false);
jTextlike.setLineWrap(true);
sp_v.setBottomComponent(jScrollPaneTextDown);
panelMain.add(sp_v,BorderLayout.EAST);
popupMenuselect=new PopupMenu(); //创建弹出菜单
MenuItem menuItemOpen = new MenuItem("匹配");
listener.selecttext(menuItemOpen);
popupMenuselect.add(menuItemOpen);
// popupMenu.add(menuItemSCadd);
textArea.add(popupMenuselect);
// textArea.addMouseListener(listener.selectmenuItem(popupMenu));
listener.selectmenuItem(textArea);
popupMenuCadd =new PopupMenu(); //创建弹出菜单
MenuItem menuItemSCadd = new MenuItem("收藏");
listener.likeText(menuItemSCadd);
popupMenuCadd.add(menuItemSCadd);
jTextSelect.add(popupMenuCadd);
listener.likemenuItem(jTextSelect);
textPanel.add(textArea,BorderLayout.CENTER);
panelMain.add(jScrollPaneText, BorderLayout.CENTER);
jfMain.setContentPane(panelMain);
jfMain.setLocationRelativeTo(null);
jfMain.setVisible(true);
}
public static void setTree(DefaultMutableTreeNode Tree){
try{
panelMain.remove(tree);
}catch (NullPointerException e){
}finally {
rootTree = Tree;
tree =new JTree(rootTree);
listener.treeListener(tree);
// 展开所有结点
TreeNode root = (TreeNode) tree.getModel().getRoot();
showExpandAll(tree,new TreePath(root), true);
jScrollPaneleft = new JScrollPane(tree);
jScrollPaneleft.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
panelMain.add(jScrollPaneleft,BorderLayout.WEST);
tree.setRootVisible(false);
jfMain.setContentPane(panelMain);
}
}
// 展开树的所有节点的方法
private static void showExpandAll(JTree tree, TreePath parent, boolean expand)
{
TreeNode node = (TreeNode) parent.getLastPathComponent();
if (node.getChildCount() >= 0)
{
for (Enumeration e = node.children(); e.hasMoreElements();)
{
TreeNode n = (TreeNode) e.nextElement();
TreePath path = parent.pathByAddingChild(n);
showExpandAll(tree, path, expand);
}
}
if (expand)
{
tree.expandPath(parent);
} else
{
tree.collapsePath(parent);
}
}
// 隐藏书目
public static void setoffshowTree(){
try {
jScrollPaneleft.setVisible(false);
jfMain.setVisible(true);
}catch (NullPointerException e){
}
}
// 显示书目
public static void setTreeShow(){
try {
jScrollPaneleft.setVisible(true);
jfMain.setVisible(true);
}catch (NullPointerException e){
}
}
public static void settextFont(String font,int style,int size){
textArea.setFont(new Font(font,style,size));
}
public static void settextColor(Color color){
// textArea.setCaretColor(color);
SimpleAttributeSet attrSet = new SimpleAttributeSet();
StyleConstants.setForeground(attrSet, color);
Document doc = textArea.getDocument();
String str = textArea.getText();
textArea.setText("");
try {
doc.insertString(doc.getLength(), str, attrSet);
} catch (BadLocationException e) {
System.out.println("BadLocationException: " + e);
}
}
public static void setTextBackGroud(Image image){
textPanel.image = image;
}
}
//自定义JPanel继承类,重写添加绘制背景方法
class BGDPanel extends JPanel {
public static Image image = new ImageIcon(ClassLoader.getSystemResource("img/senglin.jpg")).getImage();
public BGDPanel(Image image){
this.image = image;
}
public BGDPanel(){ }
@Override
public void paintComponent(Graphics g) {
int x = 0;
int y = getY()*-1;
g.drawImage(image, x, y, getSize().width,
getSize().height-y +30, this);
}
}
然后一些花里胡哨的监听类,本来想着老老实实把各种功能分开来着,写着写写就···混搭了,懒得调整了。嗯嫖的少多了,大部分自己写。
import play.SnakeFrame;
import javax.swing.*;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class ListenerClick extends lili{
// 树状目录 监听事件
public String strTreePath = "";
public void treeListener(JTree tree){
tree.addTreeSelectionListener(new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent evt) {
// 取得选择状态变化的所有路径
TreePath[] paths = evt.getPaths();
for (int i=0; i<paths.length; i++) {
// 如果处于选择状态
if (evt.isAddedPath(i)) {
// 将路径转化为节点数组
Object[] nodes=paths[i].getPath();
// 得到最后一个节点,即选择的节点
// for (Object str:nodes){
// }
strTreePath = nodes[0].toString();
for (int x = 2;x<nodes.length;x++){
strTreePath = strTreePath + "\\" + nodes[x];
}
DefaultMutableTreeNode node=(DefaultMutableTreeNode)nodes[nodes.length-1];
// 输出节点名
// 判断是否是文件,执行读取
File file = new File(strTreePath);
String textvalue = "";
if(file.getName().endsWith(".txt")) {
Path path = Paths.get(strTreePath);
try{
textvalue = new String(Files.readAllBytes(path));
}catch (IOException e){
JOptionPane.showMessageDialog(null,
"打开'%s'文件失败".formatted(file.getName()),
"异常",JOptionPane.WARNING_MESSAGE);
}finally {
textArea.setText(textvalue);
}
}else {
setTreeShow();
}
}
}
}
});
}
// 打开目录树
public void menuItemOpenPathListener(JMenuItem jMenuItem){
jMenuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String str = new FileClass().getTreePath();
DefaultMutableTreeNode rootTree = new DefaultMutableTreeNode(str);
if (str.equals("0")){
}else {
rootTree.add(new TreeClass().traverseFolder(str));
setTree(rootTree);
}
}
});
}
// 隐藏书目
public void menuItemOffShowTree(JMenuItem jMenuItem){
jMenuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setoffshowTree();
}
});
}
// 显示书目
public void menuItemShowListenter(JMenuItem jMenuItem){
jMenuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setTreeShow();
}
});
}
// 导入素材
public void menuItemInstallDBListener(JMenuItem jMenuItem){
jMenuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
FileClass.fileReader();
}
});
}
// 监听 删除导入记录。
public void menuItemDelDBListener(JMenuItem jMenuItem){
jMenuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new SqliteClass().del_list_sel();
}
});
}
public void menuItemTextBackgroup(JMenuItem jMenuItem){
jMenuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String str = new FileClass().getFilePath();
if (str != null){
Image image = Toolkit.getDefaultToolkit().getImage(str);
setTextBackGroud(image);
}
}
});
}
public void menuItemLikeDBListener(JMenuItem jMenuItem){
jMenuItem.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
JFrame jf = new JFrame("收藏列表操作");
jf.setBounds(500,600,500,600);
JPanel jp = new JPanel(new BorderLayout());
String[] title = {"收藏内容","标签"};
DefaultTableModel jbmd = new DefaultTableModel();
jbmd.setColumnIdentifiers(title);
new SqliteClass().selLikeAll(jbmd);
JTable jt = new JTable();
jt.setDefaultRenderer(Object.class, new TableCellTextAreaRenderer());
ArrayList<String> list = new SqliteClass().selLikeType();
JComboBox jcbb = new JComboBox();
if (list != null){
for(String string:list){
jcbb.addItem(string);
}
}
jcbb.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if(e.getStateChange() == e.SELECTED){
if (jcbb.getSelectedItem() == "默认"){
jbmd.getDataVector().removeAllElements();
new SqliteClass().selLikeAll(jbmd);
}else {
jbmd.getDataVector().removeAllElements(); //清空
new SqliteClass().selLikeTypeValue(jbmd,jcbb.getSelectedItem().toString());
}
}
}
});
JPopupMenu jPopupMenu = new JPopupMenu();
JMenuItem jMenuItemDel = new JMenuItem("删除");
// 表格鼠标删除事件
MouseAdapter mouseAdapter1 = new MouseAdapter(){
public void mouseClicked(MouseEvent event) {
if (event.getButton() == MouseEvent.BUTTON3) {
jPopupMenu.show(jt, event.getX(), event.getY());
}
}
};
// 单机删除
jMenuItemDel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int index = jt.getSelectedRow();
new SqliteClass().del_likeDb(jt.getValueAt(index,0).toString());
jbmd.removeRow(index);
}
});
jt.add(jPopupMenu);
jt.addMouseListener(mouseAdapter1);
jPopupMenu.add(jMenuItemDel);
jt.setModel(jbmd);
jp.add(jcbb,BorderLayout.NORTH);
jp.add(new JScrollPane(jt),BorderLayout.CENTER);
jf.add(jp);
jf.setVisible(true);
}
});
}
public void menuItemFontListener(JMenuItem jMenuItem){
jMenuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String[] fontNames= GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
JFrame jffont = new JFrame("字体选择");
jffont.setBounds(500,600,300,160);
JPanel jPanel_mian = new JPanel(new GridLayout(2,1));
JPanel jPanel = new JPanel(new GridLayout(3,2));
JLabel jLabelfont = new JLabel("字体");
jPanel.add(jLabelfont);
JComboBox jComboBoxfont = new JComboBox(fontNames);
jPanel.add(jComboBoxfont);
JLabel jLabelCSS = new JLabel("样式");
jPanel.add(jLabelCSS);
JComboBox jComboBoxcss = new JComboBox();
jComboBoxcss.addItem("普通");
jComboBoxcss.addItem("斜体");
jComboBoxcss.addItem("加粗");
jComboBoxcss.addItem("加粗斜体");
jPanel.add(jComboBoxcss);
JLabel jLabelFontSize = new JLabel("字号");
jPanel.add(jLabelFontSize);
JComboBox jComboBoxSize = new JComboBox();
for (int i =1 ;i<100;i++){
jComboBoxSize.addItem(i);
}
jPanel.add(jComboBoxSize);
jPanel_mian.add(jPanel);
JButton jButton = new JButton("确认");
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String font = jComboBoxfont.getSelectedItem().toString();
String style = jComboBoxcss.getSelectedItem().toString();
int css = 0;
if (style == "普通"){
css = Font.PLAIN;
}else if (style == "斜体"){
css = Font.ITALIC;
}else if (style == "粗体"){
css = Font.BOLD;
}else if (style == "加粗斜体"){
css =Font.BOLD+ Font.ITALIC;
}
int size = (int)jComboBoxSize.getSelectedItem();
settextFont(font,css,size);
}
});
jPanel_mian.add(jButton);
jffont.add(jPanel_mian);
jffont.setVisible(true);
}
});
}
public void menuItemsetColorListener(JMenuItem jMenuItem){
jMenuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JColorChooser chooser=new JColorChooser(); //实例化颜色选择器
Color color=chooser.showDialog(new JFrame(),"选取颜色",Color.lightGray ); //得到选择的颜色
settextColor(color);
}
});
}
public void menuItemShenMi(JMenuItem jMenuItem) {
jMenuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JFrame jpd = new JFrame("口令");
JTextField Jtxt = new JTextField(15);
Jtxt.setBounds(0, 0, 20, 25);
JPanel jp = new JPanel(new FlowLayout(FlowLayout.CENTER));
JButton jb = new JButton("确认");
JLabel jlb = new JLabel("提示:“无论贫穷还是富有。”");
jp.add(Jtxt);
jp.add(jb);
jp.add(jlb);
jpd.add(jp);
jb.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (Jtxt.getText().equals("我愿意")) {
new SnakeFrame().mainStrat();
} else {
JOptionPane.showMessageDialog(null, "口令错误!");
}
}
});
jpd.setBounds(400, 400, 300, 100);
jpd.setVisible(true);
}
});
}
public void selectmenuItem(JTextPane jTextArea){
jTextArea.addMouseListener( new MouseAdapter() {
public void mouseClicked(MouseEvent event){
if (event.getButton() == MouseEvent.BUTTON3){
popupMenuselect.show(textArea,event.getX(),event.getY());
}
}
});
}
public void likemenuItem(JTextArea jTextArea){
jTextArea.addMouseListener( new MouseAdapter() {
public void mouseClicked(MouseEvent event){
if (event.getButton() == MouseEvent.BUTTON3){
popupMenuCadd.show(jTextArea,event.getX(),event.getY());
}
}
});
}
public void selecttext(MenuItem menuItem){
menuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String str = textArea.getSelectedText(); // 获取选中文字
// JOptionPane.showMessageDialog(null,str);
List<String> select = new SqliteClass().sel(str);
Random random = new Random();
try {
for (int i = 0;i<20;i++){
if (select.size() == 1){
jTextSelect.append(select.get(random.nextInt(select.size())));
jTextSelect.append("\n");
jTextSelect.append("\n");
break;
}
jTextSelect.append(select.get(random.nextInt(select.size())));
jTextSelect.append("\n");
jTextSelect.append("\n");
}
}catch (IllegalArgumentException e1){
}finally {
}
}
});
}
public void likeText(MenuItem menuItem){
menuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String sc = jTextSelect.getSelectedText();
// JOptionPane.showMessageDialog(null,sc);
JFrame jf = new JFrame("添加标签");
jf.setBounds(600,600,400,400);
JTextField jt = new JTextField(8);
jf.add(jt);
JButton enter = new JButton("确认");
enter.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new SqliteClass().instlike(sc,jt.getText());
}
});
jf.add(enter);
jf.setVisible(true);
}
});
}
因为自己写着玩顺便为了new对象,实在是懒得弄mysql,不方便移植,使用sqlite,下面是数据库的一些操作
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class SqliteClass extends org.sqlite.JDBC{
public void inst(List ist,String string){
Connection conn =null;
Statement statement = null;
try{
Class.forName("org.sqlite.JDBC"); // 加载驱动
conn = DriverManager.getConnection("jdbc:sqlite:CMFBOOK.db"); // 创建数据库/建立连接
statement = conn.createStatement();
Iterator iter = ist.iterator();
// 差一个判断是否已存在没写
try{
String sqlBookName = "INSERT INTO booktype (name) " +
"VALUES ('%s');".formatted(string);
statement.executeUpdate(sqlBookName);
while(iter.hasNext()){
Object o = iter.next();
if (o.toString() == "\n" && o.toString() == " "){
continue;
}else {
String sql = "INSERT INTO valueselect (neirong,type) " +
"VALUES ('%s','%s');".formatted(o.toString(),string);
statement.executeUpdate(sql); //执行sql语句
}
}
}catch (Exception e){
JOptionPane.showMessageDialog(null, "素材重复", "素材重复",JOptionPane.WARNING_MESSAGE);
}finally {
statement.close();
// conn.commit(); //提交事务
conn.close();
}
}catch (Exception e){
JOptionPane.showMessageDialog(null, e, "异常",JOptionPane.WARNING_MESSAGE);
}
}
public void instlike(String ist,String type){
Connection conn =null;
Statement statement = null;
try{
Class.forName("org.sqlite.JDBC"); // 加载驱动
conn = DriverManager.getConnection("jdbc:sqlite:CMFBOOK.db"); // 创建数据库/建立连接
statement = conn.createStatement();
String sql = "INSERT INTO valueselect (neirong) " +
"VALUES ('%s');".formatted(" " + ist);
statement.executeUpdate(sql); //执行sql语句
statement.close();
// conn.commit(); //提交事务
conn.close();
}catch (Exception e){
JOptionPane.showMessageDialog(null, e, "异常",JOptionPane.WARNING_MESSAGE);
}
}
public List sel(String str){
Connection conn =null;
Statement statement = null;
List list = new ArrayList<>();
try{
Class.forName("org.sqlite.JDBC"); // 加载驱动
conn = DriverManager.getConnection("jdbc:sqlite:CMFBOOK.db"); // 创建数据库test.db
statement = conn.createStatement();
String sql = "select neirong from valueselect where neirong like '%%%s%%';".formatted(str);
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()){
String neirong = resultSet.getString("neirong");
list.add(neirong);
}
resultSet.close();
statement.close();
conn.close();
}catch (Exception e){
JOptionPane.showMessageDialog(null, e, "异常",JOptionPane.WARNING_MESSAGE);
}finally {
return list;
}
}
public void del_value(String str){
Connection conn = null;
Statement statement = null;
List<String> list = new ArrayList<>();
try{
Class.forName("org.sqlite.JDBC"); // 加载驱动
conn = DriverManager.getConnection("jdbc:sqlite:CMFBOOK.db"); // 创建数据库test.db
statement = conn.createStatement();
statement.executeUpdate("PRAGMA foreign_keys = ON;");
String sql = "DELETE from booktype WHERE name = '%s';".formatted(str);
statement.executeUpdate(sql);
statement.close();
conn.close();
}catch (Exception e){
JOptionPane.showMessageDialog(null, e, "异常",JOptionPane.WARNING_MESSAGE);
}
finally {
}
}
public void del_list_sel(){
Connection conn = null;
Statement statement = null;
List<String> list = new ArrayList<>();
try{
Class.forName("org.sqlite.JDBC"); // 加载驱动
conn = DriverManager.getConnection("jdbc:sqlite:CMFBOOK.db"); // 创建数据库test.db
statement = conn.createStatement();
JFrame frame = new JFrame("选中记录");
frame.setBounds(600,600,300,100);
JPanel jPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
JComboBox jComboBox = new JComboBox();
jComboBox.setSelectedIndex(-1);
JButton jbt = new JButton("确认");
String sql = "select name from booktype;";
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()){
jComboBox.addItem(resultSet.getString("name"));
}
// 未写完
jbt.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new SqliteClass().del_value(jComboBox.getSelectedItem().toString());
JOptionPane.showMessageDialog(null, "删除成功", "提示",JOptionPane.WARNING_MESSAGE);
}
});
jPanel.add(jComboBox);
jPanel.add(jbt);
frame.add(jPanel);
frame.setDefaultCloseOperation(1);
frame.setVisible(true);
resultSet.close();
statement.close();
conn.close();
}catch (Exception e){
JOptionPane.showMessageDialog(null, e, "异常",JOptionPane.WARNING_MESSAGE);
}
finally {
}
}
public void selLikeAll(DefaultTableModel model){
Connection conn =null;
Statement statement = null;
try{
Class.forName("org.sqlite.JDBC"); // 加载驱动
conn = DriverManager.getConnection("jdbc:sqlite:CMFBOOK.db"); // 创建数据库test.db
statement = conn.createStatement();
String sql = "select love,newtype from lililike;";
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()){
String neirong =resultSet.getString("love");
String label = resultSet.getString("newtype");
model.addRow(new Object[]{neirong,label});
}
resultSet.close();
statement.close();
conn.close();
}catch (Exception e){
JOptionPane.showMessageDialog(null, e, "异常",JOptionPane.WARNING_MESSAGE);
}
finally {
}
}
public ArrayList selLikeType(){
Connection conn =null;
Statement statement = null;
ArrayList str =new ArrayList();
try{
Class.forName("org.sqlite.JDBC"); // 加载驱动
conn = DriverManager.getConnection("jdbc:sqlite:CMFBOOK.db"); // 创建数据库/建立连接
statement = conn.createStatement();
String sql = "select newtype from lililike;";
ResultSet rs = statement.executeQuery(sql); //执行sql语句
str.add("默认");
while (rs.next()){
str.add(rs.getString("newtype"));
}
statement.close();
// conn.commit(); //提交事务
conn.close();
}catch (Exception e){
JOptionPane.showConfirmDialog(null,"数据库连接失败",
"异常",JOptionPane.WARNING_MESSAGE);
}finally {
return str;
}
}
public void selLikeTypeValue(DefaultTableModel model,String str){
Connection conn =null;
Statement statement = null;
try{
Class.forName("org.sqlite.JDBC"); // 加载驱动
conn = DriverManager.getConnection("jdbc:sqlite:CMFBOOK.db"); // 创建数据库test.db
statement = conn.createStatement();
String sql = "select love,newtype from lililike where newtype = '%s';".formatted(str);
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()){
String neirong =resultSet.getString("love");
String label = resultSet.getString("newtype");
model.addRow(new Object[]{neirong,label});
}
resultSet.close();
statement.close();
conn.close();
}catch (Exception e){
JOptionPane.showMessageDialog(null, e, "异常",JOptionPane.WARNING_MESSAGE);
}
finally {
}
}
public void del_likeDb(String str){
Connection conn = null;
Statement statement = null;
try{
Class.forName("org.sqlite.JDBC"); // 加载驱动
conn = DriverManager.getConnection("jdbc:sqlite:CMFBOOK.db"); // 创建数据库test.db
statement = conn.createStatement();
// statement.executeUpdate("PRAGMA foreign_keys = ON;");
String sql = "DELETE from lililike WHERE love = '%s';".formatted(str);
statement.executeUpdate(sql);
statement.close();
conn.close();
}catch (Exception e){
JOptionPane.showMessageDialog(null, e, "删除失败",JOptionPane.WARNING_MESSAGE);
}
finally {
JOptionPane.showMessageDialog(null, "删除成功", "异常",JOptionPane.WARNING_MESSAGE);
}
}
}
写完发现吊,这么多重复代码,后面得想办法整合一下··有大佬可以指点一个么······
文件操作类,也是一堆得重复代码···忧伤,网上嫖了好多,我自己已经记不清了。冥冥感谢。
import javax.swing.*;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class FileClass {
public static SqliteClass sqllite = new SqliteClass();
public static String getTreePath() {
String path = "0";
try{
JFileChooser jfile = new JFileChooser();
jfile.setFileSelectionMode(1);
int status = jfile.showOpenDialog(null);//显示打开的文件对话框
if (status == 1) {
} else {
File f = jfile.getSelectedFile();//使用文件类获取选择器选择的文件
path = f.getAbsolutePath();
}
}catch (IllegalArgumentException e){
}finally {
return path;
}
}
public String getFilePath(){
String str = null;
try {
JFileChooser jf = new JFileChooser();
jf.setFileSelectionMode(0);
int status = jf.showOpenDialog(null);
if (status == 1){
}else{
str = jf.getSelectedFile().getAbsolutePath();
}
}catch (IllegalArgumentException e){
}finally {
return str;
}
}
public static void newFile(){
}
public static String replaceBlank(String str) {
String dest = "";
if (str != null) {
Pattern p = Pattern.compile("\\s*|\t|\r|\n");
Matcher m = p.matcher(str);
dest = m.replaceAll("");
}
return dest;
}
public static void fileReader(){
try{
JFileChooser jfile = new JFileChooser();
jfile.setFileSelectionMode(0);
int status = jfile.showOpenDialog(null);//显示打开的文件对话框
Path path = null;
File f = null;
if (status == 1) {
} else {
f = jfile.getSelectedFile();//使用文件类获取选择器选择的文件
path = Paths.get(f.getAbsolutePath());
String str = null;
}
if (path != null){
byte[] data = Files.readAllBytes(path);
String res = replaceBlank(new String(data,"gbk"));
List<String> list = Arrays.asList(res.split("。"));
sqllite.inst(list,f.getName());
}
}catch (IOException e){
JOptionPane.showMessageDialog(null, e, "异常",JOptionPane.WARNING_MESSAGE);
}
}
}
读取目录生成树状Jtree,老实交代是嫖。再次感谢大拿们。
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import java.io.File;
public class TreeClass {
public JTree tree;
public DefaultTreeModel newModel;
public DefaultMutableTreeNode Node;
public DefaultMutableTreeNode temp;
public DefaultMutableTreeNode traverseFolder(String path) {
DefaultMutableTreeNode fujiedian = new DefaultMutableTreeNode(new File(path).getName());
File file = new File(path);
if (file.exists()) {
File[] files = file.listFiles();
if (files.length == 0) {
if(file.isDirectory()) {//如果是空文件夹
DefaultMutableTreeNode dn=new DefaultMutableTreeNode(file.getName(), false);
return dn;
}
}else{
for (File file2 : files) {
if (file2.isDirectory()) {
//是目录的话,生成节点,并添加里面的节点
fujiedian.add(traverseFolder(file2.getAbsolutePath()));
}else{
//是文件的话直接生成节点,并把该节点加到对应父节点上
temp=new DefaultMutableTreeNode(file2.getName());
fujiedian.add(temp);
}
}
}
} else {//文件不存在
return null;
}
return fujiedian;
}
// 删除事件没写····
public void delTree(){
}
}
接下来继续嫖的一个Jtable的自动换行,实现JTextArea的换行方法
import javax.swing.*;
import javax.swing.table.TableCellRenderer;
import java.awt.*;
public class TableCellTextAreaRenderer extends JTextArea implements TableCellRenderer {
public TableCellTextAreaRenderer() {
setLineWrap(true);
setWrapStyleWord(true);
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
setFont(table.getFont());
setText((value == null) ? "" : value.toString());
// 计算当下行的最佳高度
int maxPreferredHeight = 0;
for (int i = 0; i < table.getColumnCount(); i++) {
setText("" + table.getValueAt(row, i));
setSize(table.getColumnModel().getColumn(column).getWidth(), 0);
maxPreferredHeight = Math.max(maxPreferredHeight, getPreferredSize().height);
}
if (table.getRowHeight(row) != maxPreferredHeight) // 少了这行则处理器瞎忙
table.setRowHeight(row, maxPreferredHeight);
table.setFont(new java.awt.Font("",0,15));
setText(value == null ? "" : value.toString());
return this;
}
}
结束了,=-=,虽然有白嫖的代码把,好歹也是看懂才嫖的····。
诶,学了python,学了java,学了C.都会是半只脚进门。。。忧伤。也不知道学了干啥。。。。。
打算听基友的,搞搞Vue去,回头研究研究app怎么写,再看看鸿蒙的软件开发。