[英]JScrollPane doesn't show if BorderLayout constraint is CENTER?
[英]How to use JScrollpane within the CENTER of a BorderLayout
我有以下代码:
package example;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class ScrollingExample extends JFrame
{
private static final long serialVersionUID = 1L;
public static void main(String[] args)
{
ScrollingExample scrollingExample = new ScrollingExample();
scrollingExample.go();
}
private void go()
{
JPanel topPanel = new JPanel();
topPanel.add(new JLabel("boo"));
JPanel mainPanel = new JPanel();
JPanel mainInnerPanel = makeMainInnerPanel();
JScrollPane scrollPane = new JScrollPane(mainInnerPanel);
mainPanel.add(scrollPane);
add(topPanel, BorderLayout.NORTH);
add(mainPanel, BorderLayout.CENTER);
pack();
setVisible(true);
}
private JPanel makeMainInnerPanel()
{
JPanel row1 = makeHorizontalPanel("one", "two", "three", "four", "five");
JPanel row2 = makeHorizontalPanel("six", "seven", "eight");
JPanel row3 = makeHorizontalPanel("nine", "ten", "eleven");
JPanel mainInnerPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
mainInnerPanel.add(row1);
mainInnerPanel.add(row2);
mainInnerPanel.add(row3);
return mainInnerPanel;
}
private JPanel makeHorizontalPanel(String ... labelValues)
{
JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT));
for (String s : labelValues)
{
JLabel label = new JLabel(s);
panel.add(label);
}
return panel;
}
}
当我显示它时,它会自动调整尺寸以显示所有标签; 当我调整窗口大小时,我无法显示滚动条。
当我开始工作时,我想制作一个包含JTabbedPane和几个按钮的面板,如果用户调整窗口大小以便无法看到某些部分,我希望它有滚动条。 如果这个问题的答案需要额外的或不同的东西,那么提及它将不胜感激。
您需要允许滚动窗格随窗口大小的变化而增大/缩小。
不需要“mainPanel”。
只需使用:
// add(mainPanel, BorderLayout.CENTER);
add(scrollPane, BorderLayout.CENTER);
JPanel默认情况下有FlowLayout ,你必须准确定义(如果你想改变LayoutManager ),JComponent已经实现了各种LayoutManagers,例如JFrame / JDialog / JWindow (来自Java5)默认情况下有Borderlayout
mainPanel.setLayout(new Borderlayout(10, 10))
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class ScrollingExample extends JFrame
{
private static final long serialVersionUID = 1L;
public static void main(String[] args)
{
ScrollingExample scrollingExample = new ScrollingExample();
scrollingExample.go();
}
private void go()
{
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel topPanel = new JPanel();
topPanel.add(new JLabel("boo"));
JPanel mainPanel = new JPanel(new BorderLayout());
JPanel mainInnerPanel = makeMainInnerPanel();
JScrollPane scrollPane = new JScrollPane(mainInnerPanel);
mainPanel.add(scrollPane);
add(topPanel, BorderLayout.NORTH);
add(mainPanel, BorderLayout.CENTER);
pack();
setVisible(true);
}
private JPanel makeMainInnerPanel()
{
JPanel row1 = makeHorizontalPanel("one", "two", "three", "four", "five");
JPanel row2 = makeHorizontalPanel("six", "seven", "eight");
JPanel row3 = makeHorizontalPanel("nine", "ten", "eleven");
JPanel mainInnerPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
mainInnerPanel.add(row1);
mainInnerPanel.add(row2);
mainInnerPanel.add(row3);
return mainInnerPanel;
}
private JPanel makeHorizontalPanel(String ... labelValues)
{
JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT));
for (String s : labelValues)
{
JLabel label = new JLabel(s);
panel.add(label);
}
return panel;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.