package com.example.client;
|
|
import com.example.client.service.*;
|
import com.teamdev.jxbrowser.chromium.*;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Service;
|
|
|
import javax.imageio.ImageIO;
|
import javax.swing.*;
|
|
import javax.swing.tree.TreePath;
|
import java.awt.*;
|
import java.awt.event.*;
|
import java.io.*;
|
import java.lang.reflect.Field;
|
import java.lang.reflect.Modifier;
|
import java.math.BigInteger;
|
|
@Service
|
public class Main extends JFrame implements MouseListener {
|
@Autowired
|
private SetUIFontService setUIFontService;
|
@Autowired
|
private MenuService treeServise;
|
private final JPopupMenu menu = new JPopupMenu();
|
private Integer height;
|
private Integer width;
|
private JTree tree;
|
@Value("${data.imgDir}")
|
private String imgPath;
|
JTabbedPane tabbedPane;
|
JScrollPane scrollPane;
|
|
static {
|
try {
|
Field e = ba.class.getDeclaredField("e");
|
e.setAccessible(true);
|
Field f = ba.class.getDeclaredField("f");
|
f.setAccessible(true);
|
Field modifersField = Field.class.getDeclaredField("modifiers");
|
modifersField.setAccessible(true);
|
modifersField.setInt(e, e.getModifiers() & ~Modifier.FINAL);
|
modifersField.setInt(f, f.getModifiers() & ~Modifier.FINAL);
|
e.set(null, new BigInteger("1"));
|
f.set(null, new BigInteger("1"));
|
modifersField.setAccessible(false);
|
//UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
|
} catch (Exception e1) {
|
e1.printStackTrace();
|
}
|
|
}
|
|
public void Start(Integer role, Long userId) throws HeadlessException {
|
//获取屏幕宽高
|
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
|
Rectangle rect = ge.getMaximumWindowBounds();
|
width = rect.width;
|
height = rect.height;
|
|
Font font = new Font("宋体", Font.BOLD, 23);
|
setUIFontService.setFont(font);
|
|
JPopupMenu.setDefaultLightWeightPopupEnabled(false);
|
|
JFrame frame = new JFrame("进度跟踪");
|
frame.setSize(width, height);
|
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
|
frame.setResizable(true);
|
try {
|
Image image = ImageIO.read(new File(imgPath + "/frame.png"));
|
frame.setIconImage(image);
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
|
JPanel jLeft = new JPanel(new FlowLayout(FlowLayout.LEFT));
|
// 初始化标签页
|
tabbedPane = new JTabbedPane();
|
tabbedPane.setTabPlacement(JTabbedPane.TOP); // 标签页放置在顶部
|
|
//JPanel jTop = new JPanel();
|
|
JPanel jLeft_menu = new JPanel();
|
//JPanel jLeft_file = new JPanel();
|
|
|
int westWidth = width / 7;
|
int topHeight = 40;
|
int titleHeight = 60;
|
|
jLeft.setPreferredSize(new Dimension(westWidth, height));
|
jLeft.setLayout(null);
|
|
jLeft_menu.setBounds(0, 0, westWidth, height);
|
|
tree = treeServise.createTree(width - westWidth, height, frame);
|
|
//tree.addMouseListener(this);
|
// 创建滚动面板,包裹树(因为树节点展开后可能需要很大的空间来显示,所以需要用一个滚动面板来包裹)
|
scrollPane = new JScrollPane(tree, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
|
scrollPane.setViewportView(tree);
|
|
jLeft_menu.add(scrollPane, BorderLayout.WEST);
|
// 添加滚动面板到那内容面板
|
scrollPane.setPreferredSize(new Dimension(westWidth - 10, height - topHeight - titleHeight));
|
|
|
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
|
//frame.add(jTop, BorderLayout.NORTH);
|
frame.add(jLeft, BorderLayout.WEST);
|
frame.add(tabbedPane, BorderLayout.CENTER);
|
jLeft.add(jLeft_menu);
|
//jLeft.add(jLeft_file);
|
|
JSplitPane hSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
|
hSplitPane.setDividerLocation(westWidth);
|
|
hSplitPane.setRightComponent(tabbedPane);
|
hSplitPane.setDividerSize(10);
|
hSplitPane.setOneTouchExpandable(true);
|
hSplitPane.setContinuousLayout(true);
|
frame.getContentPane().add(hSplitPane, BorderLayout.CENTER);
|
|
JSplitPane vSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
|
frame.getContentPane().add(vSplitPane, BorderLayout.WEST);
|
vSplitPane.setDividerLocation(westWidth);
|
vSplitPane.setLeftComponent(scrollPane);
|
//vSplitPane.setRightComponent(scrolltable);
|
vSplitPane.setDividerSize(10);
|
vSplitPane.setOneTouchExpandable(true);
|
vSplitPane.setContinuousLayout(true);
|
hSplitPane.setLeftComponent(vSplitPane);
|
|
frame.setLocationRelativeTo(null);
|
frame.setVisible(true);
|
}
|
|
@Override
|
public void mouseClicked(MouseEvent e) {
|
|
}
|
|
public void mousePressed(MouseEvent e) {
|
TreePath path = tree.getPathForLocation(e.getX(), e.getY()); // 关键是这个方法的使用
|
tree.setSelectionPath(path);
|
if (e.getButton() == 3) {
|
menu.show(tree, e.getX(), e.getY());
|
}
|
}
|
|
@Override
|
public void mouseReleased(MouseEvent e) {
|
|
}
|
|
@Override
|
public void mouseEntered(MouseEvent e) {
|
|
}
|
|
@Override
|
public void mouseExited(MouseEvent e) {
|
|
}
|
|
public void showTab(String title, JPanel panel, JTree tree) {
|
tabbedPane.addTab(title, panel);
|
Component tabComponent = createTabComponent(title, tree);
|
tabbedPane.setTabComponentAt(tabbedPane.getTabCount() - 1, tabComponent);// 设置自定义标签组件//切换到当前页面
|
if (tabbedPane.getTabCount() > 5) {
|
// 删除第一个标签
|
tabbedPane.removeTabAt(0);
|
}
|
tabbedPane.setSelectedIndex(tabbedPane.getTabCount() - 1);
|
}
|
|
public Boolean isSelected(String title) {
|
int index = tabbedPane.indexOfTab(title);
|
if (index != -1) {
|
tabbedPane.setSelectedIndex(index);
|
return true;
|
} else {
|
return false;
|
}
|
|
}
|
|
private Component createTabComponent(String title, JTree tree) {
|
JPanel tabPanel = new JPanel(new BorderLayout());
|
JLabel tabLabel = new JLabel(" " + title + " ");
|
JButton closeButton = new JButton("x");
|
|
// 设置关闭按钮的样式
|
closeButton.setOpaque(false);
|
closeButton.setBorder(null);
|
closeButton.setContentAreaFilled(false);
|
closeButton.setFocusPainted(false);
|
closeButton.setMargin(new Insets(0, 0, 0, 0));
|
closeButton.setFont(new Font("Arial", Font.BOLD, 12));
|
|
/* // 鼠标悬停时显示关闭按钮
|
MouseListener mouseListener = new MouseAdapter() {
|
@Override
|
public void mouseEntered(MouseEvent e) {
|
closeButton.setVisible(true);
|
}
|
|
@Override
|
public void mouseExited(MouseEvent e) {
|
if (!closeButton.getBounds().contains(e.getPoint())) {
|
closeButton.setVisible(false);
|
}
|
}
|
};*/
|
|
//tabLabel.addMouseListener(mouseListener);
|
//closeButton.addMouseListener(mouseListener);
|
|
closeButton.addActionListener(e -> {
|
int index = tabbedPane.indexOfTabComponent(tabPanel);
|
if (index != -1) {
|
tabbedPane.removeTabAt(index);
|
}
|
tree.getSelectionModel().clearSelection();
|
});
|
|
tabPanel.setOpaque(false);
|
tabLabel.setOpaque(false);
|
closeButton.setOpaque(false);
|
|
tabPanel.add(tabLabel, BorderLayout.CENTER);
|
tabPanel.add(closeButton, BorderLayout.EAST);
|
return tabPanel;
|
}
|
}
|