| | |
| | | // 创建设置项面板(圆角白色面板) |
| | | JPanel settingsPanel = createSettingsPanel(); |
| | | |
| | | // 创建滚动面板 |
| | | JScrollPane scrollPane = new JScrollPane(settingsPanel); |
| | | scrollPane.setBorder(null); // 去除边框 |
| | | scrollPane.getViewport().setBackground(BACKGROUND_COLOR); // 设置视口背景色与主背景一致 |
| | | scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); // 禁止水平滚动 |
| | | scrollPane.getVerticalScrollBar().setUnitIncrement(16); // 增加滚动速度 |
| | | |
| | | // 添加组件到主面板 |
| | | mainPanel.add(settingsPanel, BorderLayout.CENTER); |
| | | mainPanel.add(scrollPane, BorderLayout.CENTER); |
| | | |
| | | add(mainPanel, BorderLayout.CENTER); |
| | | } |
| | | |
| | | private JPanel createSettingsPanel() { |
| | | // 创建圆角白色面板容器 |
| | | JPanel container = new JPanel() { |
| | | JPanel container = new ScrollablePanel() { |
| | | @Override |
| | | protected void paintComponent(Graphics g) { |
| | | Graphics2D g2d = (Graphics2D) g.create(); |
| | |
| | | timer.start(); |
| | | } |
| | | |
| | | /** |
| | | * 可滚动的面板,强制宽度适应视口 |
| | | */ |
| | | private class ScrollablePanel extends JPanel implements Scrollable { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | @Override |
| | | public Dimension getPreferredScrollableViewportSize() { |
| | | return getPreferredSize(); |
| | | } |
| | | |
| | | @Override |
| | | public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) { |
| | | return 16; |
| | | } |
| | | |
| | | @Override |
| | | public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) { |
| | | return 16; |
| | | } |
| | | |
| | | @Override |
| | | public boolean getScrollableTracksViewportWidth() { |
| | | return true; // 强制宽度适应视口,防止水平滚动 |
| | | } |
| | | |
| | | @Override |
| | | public boolean getScrollableTracksViewportHeight() { |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void setVisible(boolean visible) { |
| | | if (visible) { |