我正在尝试创建非常简单的类。目标是在滚动条不可见时创建一个最大尺寸的按钮。我的代码不起作用。即使滚动条不可见,条件 pane.getVerticalScrollBar().isVisible() 也会返回 true。我想知道为什么以及如何解决它?
import java.awt.BorderLayout;
import java.io.UnsupportedEncodingException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class Main {
public static void main(String[] args) throws UnsupportedEncodingException {
JFrame frame = new JFrame();
final JButton button = new JButton("Hello");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel(new BorderLayout());
final JPanel buttons = new JPanel();
buttons.add(button);
buttons.revalidate();
final JScrollPane pane = new JScrollPane(buttons);
pane.getViewport().addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
System.out.println("*******************************************************************");
System.out.println("Vertical visible? " + pane.getVerticalScrollBar().isVisible());
System.out.println("Horizontal visible? " + pane.getHorizontalScrollBar().isVisible());
if (!pane.getVerticalScrollBar().isVisible() && !pane.getHorizontalScrollBar().isVisible()) {
button.setSize(button.getWidth() + 1, button.getHeight() + 1);
buttons.revalidate();
pane.revalidate();
} else {
button.setSize(button.getWidth() - 1, button.getHeight() - 1);
buttons.revalidate();
pane.revalidate();
pane.getViewport().removeChangeListener(this);
}
}
});
panel.add(pane);
frame.setContentPane(panel);
frame.setSize(300, 200);
frame.setVisible(true);
}
}