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);
}
}
我用按鈕創建了這個例子來簡化我的問題。實際上,而不是按鈕我想在窗格中使用label.setIcon(新ImageIcon(img))。 – cernover
我還有另一個類,它可以在標籤中縮放img,我希望找到最佳的縮放比例值,以儘可能地最大化它,因爲它可以與滾動條同時不可見。 – cernover
我不知道圖像的大小,所以我把它縮小到最小尺寸,然後我測試滾動條是否可見,如果沒有,我將img放大並再次測試,直到出現一個滾動條。然後,當滾動條不可見時,我將img設置爲之前的大小。 – cernover