提供一個setter ...
public void setPreferredScrollableViewportSize(Dimension size) {
this.preferredScrollableViewportSize = size;
}
現在,很明顯,你getPreferredScrollableViewportSize
需要返回這個值...
public class CustomScroll extends JComponent implements Scrollable {
private Dimension preferredScrollableViewportSize = new Dimension(266, 300);
public CustomScroll() {
}
public void setPreferredScrollableViewportSize(Dimension size) {
this.preferredScrollableViewportSize = size;
}
@Override
public Dimension getPreferredScrollableViewportSize() {
return preferredScrollableViewportSize;
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
}
@Override
public int getScrollableBlockIncrement(Rectangle visibleRect,
int orientation, int direction) {
return 64;
}
@Override
public boolean getScrollableTracksViewportHeight() {
return false;
}
@Override
public boolean getScrollableTracksViewportWidth() {
return false;
}
@Override
public int getScrollableUnitIncrement(Rectangle visibleRect,
int orientation, int direction) {
return 64;
}
}
還應該設置這個在您的JScrollPane
包之前,它會更容易管理,否則,您需要invalidate
其中JScrollPane
所在的容器
Yo ü可能想通過Code Conventions for the Java TM Programming Language有一讀,它將使人們更容易閱讀您的代碼,供您閱讀別人
但是,這仍然只是得到最佳尺寸
沒有它不會,它將使用preferredScrollableViewportSize
(假設你內JScrollPane
我的滾動窗格中調整到什麼是它,所以它只是成長的按鈕添加
在包裝0
然後你做錯事
JScrollPane scrollPane = new JScrollPane(leftTop);
customScroll t1 = new customScroll();
// This is wrong...
scrollPane.add(t1);
left.add(scrollPane);
你不應該添加任何東西到JScrollPane
,這不是他們的工作,相反,你需要在它
leftTop t1 = new CustomScroll();
JScrollPane scrollPane = new JScrollPane(leftTop);
left.add(scrollPane);
包裹組件
或其他一些...
我希望它保持一個固定的大小,所以我需要明確地設置它可以cann從
OT偏離是的,這就是preferredScrollableViewportSize
做
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Rectangle;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.Scrollable;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class JavaApplication57 {
public static void main(String[] args) {
new JavaApplication57();
}
public JavaApplication57() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
setLayout(new GridBagLayout());
CustomScroll comp = new CustomScroll();
comp.setPreferredScrollableViewportSize(new Dimension(100, 100));
comp.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.weightx = 1;
gbc.insets = new Insets(5, 10, 10, 5);
for (int index = 0; index < 100; index++) {
JButton btn = new JButton("Hello world " + index);
comp.add(btn, gbc);
}
add(new JScrollPane(comp));
}
}
public class CustomScroll extends JComponent implements Scrollable {
private Dimension preferredScrollableViewportSize = new Dimension(266, 300);
public CustomScroll() {
}
public void setPreferredScrollableViewportSize(Dimension size) {
this.preferredScrollableViewportSize = size;
}
@Override
public Dimension getPreferredScrollableViewportSize() {
return preferredScrollableViewportSize;
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
}
@Override
public int getScrollableBlockIncrement(Rectangle visibleRect,
int orientation, int direction) {
return 64;
}
@Override
public boolean getScrollableTracksViewportHeight() {
return false;
}
@Override
public boolean getScrollableTracksViewportWidth() {
return false;
}
@Override
public int getScrollableUnitIncrement(Rectangle visibleRect,
int orientation, int direction) {
return 64;
}
}
}
請注意Java的命名約定 - http://www.oracle.com/technetwork/java/codeconventions -135099.html - 尤其是類名;另外,請提一下你面臨的確切問題? –