0

我正在尝试创建非常简单的类。目标是在滚动条不可见时创建一个最大尺寸的按钮。我的代码不起作用。即使滚动条不可见,条件 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);
}
}
4

1 回答 1

2

不要玩设置大小的方法。

如果您希望按钮占据所有可用空间,请使用:

frame.add(button); // height/width will be max
frame.add(button, BorderLayout.SOUTH); // only width will be max

让布局管理器为您完成这项工作。

编辑:

我有另一个在标签中缩放 img 的类,我想找到缩放的最佳值以使其尽可能最大化

创建自定义面板并以面板大小动态绘制图像。然后它将根据可用空间自动缩放。

请参阅背景面板作为此方法的示例。

于 2013-04-02T16:16:58.700 回答