当滚动条不可见时,创建最大大小的按钮

时间:2013-04-02 15:54:39

标签: java swing jbutton jscrollpane

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

1 个答案:

答案 0 :(得分:2)

不要使用设定尺寸方法。

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

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

让布局经理为您完成工作。

编辑:

  

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

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

请参阅Background Panel作为此方法的示例。