所以我把这个面板放置在我的框架的顶部(北)边,叫做menupanel。在这个面板中,我还有另外两个面板- topPanel和botPanel (红色和黑色)。在这两个面板中都有几个按钮(在本例中为标签)。我想增加滚动(水平)在两个面板(机器人和顶部)。
// creating the frame
JFrame frame;
frame = new JFrame("Test");
frame.setVisible(true);
frame.setLayout(new BorderLayout());
frame.setSize(600, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// creating labels
JLabel label1 = new JLabel("TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT");
JLabel label2 = new JLabel("TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2");
JLabel label3 = new JLabel("TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3");
JLabel label4 = new JLabel("TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT");
JLabel label5 = new JLabel("TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2");
JLabel label6 = new JLabel("TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3");
// creating the main and menu panel
JPanel menupanel,topPanel,botPanel,mainpanel;
mainpanel = new JPanel();
menupanel = new JPanel(new BorderLayout());
topPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
botPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
topPanel.setPreferredSize(new Dimension(300, 100));
botPanel.setPreferredSize(new Dimension(300, 100));
topPanel.add(label1);
topPanel.add(label2);
topPanel.add(label3);
botPanel.add(label4);
botPanel.add(label5);
botPanel.add(label6);
topPanel.setBackground(Color.RED);
botPanel.setBackground(Color.BLACK);
mainpanel.setBackground(Color.BLUE);
JScrollPane scrollT,scrollB;
scrollT = new JScrollPane(topPanel);
scrollT.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollB = new JScrollPane(botPanel);
scrollB.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
menupanel.add(scrollT);
menupanel.add(scrollB);
menupanel.add( topPanel, BorderLayout.NORTH );
menupanel.add( botPanel, BorderLayout.SOUTH );
frame.add(mainpanel, BorderLayout.CENTER);
frame.add(menupanel, BorderLayout.NORTH);
frame.pack();发布于 2016-10-26 21:00:24
您要向多个容器中添加组件:
scrollT = new JScrollPane(topPanel); // topPanel added to scroll pane
scrollT.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollB = new JScrollPane(botPanel); // botPanel added to scroll pane
scrollB.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
menupanel.add(scrollT); // scrollpanes added to menupanel -- without Borderlayout constants?
menupanel.add(scrollB);
menupanel.add( topPanel, BorderLayout.NORTH ); // topPanel added to menupanel
menupanel.add( botPanel, BorderLayout.SOUTH );Swing GUI不允许这样做。
相反,将topPanel和botPanel添加到JScrollPanes中,将JScrollPanes添加到GUI的其余部分,但不要将topPanel和botPanel重新添加到任何东西中。
另一个问题--你限制了topPanel和僵尸面板的大小,这会使它们不滚动--避免这样做。如果需要限制某物的大小,请执行滚动窗格的视图或滚动窗格本身。
例如,
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.*;
public class ScrollPaneFun2 extends JPanel {
private static final int PREF_W = 500;
public ScrollPaneFun2() {
JPanel topPanel = new JPanel(new GridLayout(0, 1));
JPanel botPanel = new JPanel(new GridLayout(0, 1));
for (int i = 0; i < 3; i++) {
JPanel innerTopPanel = new JPanel(new GridLayout(1, 0, 3, 0));
JPanel innerBotPanel = new JPanel(new GridLayout(1, 0, 3, 0));
for (int j = 0; j < 50; j++) {
innerTopPanel.add(new JLabel("Text " + (i + 1)));
innerBotPanel.add(new JLabel("Text " + (i + 1)));
}
topPanel.add(innerTopPanel);
botPanel.add(innerBotPanel);
}
JScrollPane topScrollPane = new JScrollPane(topPanel);
JScrollPane botScrollPane = new JScrollPane(botPanel);
topScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
botScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
setLayout(new GridLayout(0, 1));
add(topScrollPane);
add(botScrollPane);
}
@Override
public Dimension getPreferredSize() {
if (isPreferredSizeSet()) {
return super.getPreferredSize();
}
int height = super.getPreferredSize().height;
return new Dimension(PREF_W, height);
}
private static void createAndShowGui() {
JFrame frame = new JFrame("ScrollPaneFun2");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new ScrollPaneFun2());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGui());
}
}https://stackoverflow.com/questions/40271934
复制相似问题