我正在尝试创建非常简单的类。目标是在滚动条不可见时创建最大大小的按钮。我的代码不起作用。条件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);
}
}
答案 0 :(得分:2)
不要使用设定尺寸方法。
如果您希望按钮占用所有可用空间,请使用:
frame.add(button); // height/width will be max
frame.add(button, BorderLayout.SOUTH); // only width will be max
让布局经理为您完成工作。
编辑:
我有另一个在标签中缩放img的类,我希望找到最佳的缩放值,使其尽可能最大化
创建自定义面板并以面板大小动态绘制图像。然后它会根据可用空间自动缩放。
请参阅Background Panel作为此方法的示例。