[英]JScrollPane not showing the scroll bars inside a JSplitPane
我有這段代碼,基本上是一個JFrame,其中包含一個JSplitPane,該JSplitPane在左側包含一個JScrollPane,該JScrollPane包含一個JPanel。 我期望看到滾動條,因為JScrollPane內的JPanel大於JScrollPane本身。 為什么滾動條不顯示? 如果我將setSize()替換為setPreferredSize(),則可以使用,但我想使用setSize()。 有什么方法可以使用setSize()並顯示滾動條嗎?
import java.awt.*;
import javax.swing.*;
public class Test {
public static void main( String[] args ) {
JFrame frame = new JFrame();
frame.setLayout( new BorderLayout() );
JSplitPane splitPane = new JSplitPane();
frame.add( splitPane, BorderLayout.CENTER );
JPanel panel = new JPanel();
panel.setBackground( Color.red );
panel.setSize( 1920, 1200 );
//panel.setPreferredSize( new Dimension( 1920, 1200 ) );
JScrollPane scrollPane = new JScrollPane( panel );
splitPane.setLeftComponent( scrollPane );
splitPane.setRightComponent( new JPanel() );
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.pack();
frame.setVisible( true );
frame.setSize( 960, 600 );
}
}
編輯:我添加了一個修改后的版本,其中使用了setPreferredSize()。 是否有更好的解決方案來動態更改大小?
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Test {
public static void main( String[] args ) {
JFrame frame = new JFrame();
frame.setLayout( new BorderLayout() );
JSplitPane splitPane = new JSplitPane();
frame.add( splitPane, BorderLayout.CENTER );
final JPanel panel = new JPanel();
panel.setBackground( Color.red );
panel.setPreferredSize( new Dimension( 1920, 1200 ) );
JScrollPane scrollPane = new JScrollPane( panel );
splitPane.setLeftComponent( scrollPane );
JButton button = new JButton();
button.addActionListener( new ActionListener() {
@Override
public void actionPerformed( ActionEvent e ) {
panel.setPreferredSize( new Dimension( 3840, 2400 ) );
panel.revalidate();
}
});
splitPane.setRightComponent( button );
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.pack();
frame.setVisible( true );
frame.setSize( 960, 600 );
}
}
您的setSize
將被JSplitPane
忽略,因為左/右組件的布局不為null
,並且它嘗試將內部組件放入可用空間中。
JSplitPane
的左/右組件的布局管理器將使用preferredSize
屬性(而不是size
屬性),並且如果尚未設置,它只會嘗試將內部組件放入該組件的左/右區域的可用空間內。 JSplitPane
。
改用setPreferredSize
或按注釋中所述的camickr覆蓋面板的getPreferredSize
方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.