我有一个包含两个组件A和B的JSplitPane,但有时我希望能够隐藏B,因此以下任一情况均成立:

  • 组件A和B在JSplitPane
  • 中可见
  • 在JSplitPane占据的空间中只有组件A是可见的

  • 有没有办法做到这一点?

    最佳答案

    哎呀,我会尝试解决的……

    import java.awt.Dimension;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class Test {
       public static void main(String[] args) {
          JFrame frame = new JFrame();
          final JPanel contentPane = (JPanel)frame.getContentPane();
    
          final JButton leftBtn = new JButton("Left Button");
          final JButton rightBtn = new JButton("Right Button");
          final JSplitPane jsp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
                leftBtn, rightBtn);
          ActionListener actionListener = new ActionListener() {
             public void actionPerformed(ActionEvent e) {
                JButton source = (JButton)e.getSource();
                if (jsp.isVisible()) {
                   jsp.remove(rightBtn);
                   jsp.remove(leftBtn);
                   jsp.setVisible(false);
                   contentPane.removeAll();
                   contentPane.add(source);
                } else {
                   contentPane.removeAll();
                   jsp.setLeftComponent(leftBtn);
                   jsp.setRightComponent(rightBtn);
                   jsp.setDividerLocation(0.5);
                   jsp.setVisible(true);
                   contentPane.add(jsp);
                }
                contentPane.revalidate();
                contentPane.repaint();
                source.requestFocusInWindow();
             }
          };
          rightBtn.addActionListener(actionListener);
          leftBtn.addActionListener(actionListener);
          contentPane.add(jsp);
          contentPane.setPreferredSize(new Dimension(800, 600));
          frame.pack();
          frame.setLocationRelativeTo(null);
          frame.setVisible(true);
          jsp.setDividerLocation(0.5);
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       }
    }
    

    10-07 22:30