Java 将JPanel添加到JScrollPane
我有一个gui,它有一个包含一系列标签和文本字段的面板,使用spring布局(这是主面板)和另一个只包含按钮(buttonPanel)的面板。我试图使我的主面板有一个垂直滚动条以及。我希望实现我的GUI,以便在JFrame中有2个面板。主面板显示在框架顶部,按钮面板显示在主面板下方 我的问题是,我无法使面板显示为按钮面板位于主面板下方,并且我也不确定如何向主面板添加滚动条。任何帮助都将不胜感激 编辑:我能够解决关于JPanel的问题,现在我唯一的问题是我无法让我的主面板滚动。我在下面添加了我的最新代码: 以下是我目前掌握的代码:Java 将JPanel添加到JScrollPane,java,jpanel,jscrollpane,layout-manager,springlayout,Java,Jpanel,Jscrollpane,Layout Manager,Springlayout,我有一个gui,它有一个包含一系列标签和文本字段的面板,使用spring布局(这是主面板)和另一个只包含按钮(buttonPanel)的面板。我试图使我的主面板有一个垂直滚动条以及。我希望实现我的GUI,以便在JFrame中有2个面板。主面板显示在框架顶部,按钮面板显示在主面板下方 我的问题是,我无法使面板显示为按钮面板位于主面板下方,并且我也不确定如何向主面板添加滚动条。任何帮助都将不胜感激 编辑:我能够解决关于JPanel的问题,现在我唯一的问题是我无法让我的主面板滚动。我在下面添加了我的最
public static void main(String args[]) {
JFrame frame = new JFrame("SpringLayout");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JScrollPane scroll = new JScrollPane();
Container contentPane = frame.getContentPane();
JButton next = new JButton("Next");
JPanel buttonPanel = new JPanel();
buttonPanel.add(next);
SpringLayout layout = new SpringLayout();
JPanel mainPanel = new JPanel();
mainPanel.setLayout(layout);
contentPane.setLayout(new BorderLayout());
int j = 25;
for(int i =0;i<150;i++){
JLabel label = new JLabel("Enter Name " + i );
JTextField text = new JTextField(15);
mainPanel.add(label);
mainPanel.add(text);
layout.putConstraint(SpringLayout.WEST, label, 10, SpringLayout.WEST,
contentPane);
layout.putConstraint(SpringLayout.NORTH, label, j, SpringLayout.NORTH,
contentPane);
layout.putConstraint(SpringLayout.NORTH, text, j, SpringLayout.NORTH,
contentPane);
layout.putConstraint(SpringLayout.WEST, text, 20, SpringLayout.EAST,
label);
j+=30;
}
//mainPanel.setSize(500,800);
scroll.setPreferredSize(new Dimension(500,500));
scroll.setViewportView(mainPanel);
contentPane.add(scroll);
contentPane.add(buttonPanel,BorderLayout.SOUTH);
//mainWindow.add(contentPane);
frame.setSize(500, 600);
frame.setVisible(true);
}
publicstaticvoidmain(字符串参数[]){
JFrame=新JFrame(“SpringLayout”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JScrollPane scroll=新建JScrollPane();
容器contentPane=frame.getContentPane();
JButton next=新JButton(“next”);
JPanel buttonPanel=新的JPanel();
按钮面板。添加(下一步);
SpringLayout布局=新的SpringLayout();
JPanel mainPanel=新的JPanel();
主面板。设置布局(布局);
setLayout(新的BorderLayout());
int j=25;
对于(int i=0;i我将这样做:
public static void main(String args[]) {
JFrame frame = new JFrame("SpringLayout");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = frame.getContentPane();
JButton next = new JButton("Next");
JPanel buttonPanel = new JPanel();
buttonPanel.add(next);
GridBagLayout layout = new GridBagLayout();
JPanel mainPanel = new JPanel();
mainPanel.setLayout(layout);
contentPane.setLayout(new BorderLayout());
GridBagConstraints gbc = new GridBagConstraints();
int j = 25;
for (int i = 0; i < 50; i++) {
JLabel label = new JLabel("Enter Name (" + i + ")");
JTextField text = new JTextField(15);
gbc.gridx = 0;
gbc.gridy = i;
mainPanel.add(label, gbc);
gbc.gridx = 1;
mainPanel.add(text, gbc);
}
contentPane.add(new JScrollPane(mainPanel, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED), BorderLayout.CENTER);
contentPane.add(buttonPanel, BorderLayout.SOUTH);
frame.setSize(500, 800);
frame.setVisible(true);
}
publicstaticvoidmain(字符串参数[]){
JFrame=新JFrame(“SpringLayout”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
容器contentPane=frame.getContentPane();
JButton next=新JButton(“next”);
JPanel buttonPanel=新的JPanel();
按钮面板。添加(下一步);
GridBagLayout=新的GridBagLayout();
JPanel mainPanel=新的JPanel();
主面板。设置布局(布局);
setLayout(新的BorderLayout());
GridBagConstraints gbc=新的GridBagConstraints();
int j=25;
对于(int i=0;i<50;i++){
JLabel标签=新的JLabel(“输入名称(“+i+”));
JTextField text=新的JTextField(15);
gbc.gridx=0;
gbc.gridy=i;
主面板。添加(标签,gbc);
gbc.gridx=1;
主面板。添加(文本,gbc);
}
添加(新的JScrollPane(主面板,JScrollPane.VERTICAL\u SCROLLBAR\u ALWAYS,JScrollPane.HORIZONTAL\u SCROLLBAR\u根据需要)、BorderLayout.CENTER);
添加(buttonPanel,BorderLayout.SOUTH);
框架设置尺寸(500800);
frame.setVisible(true);
}
少量修改:
*使用GridBagLayout而不是SpringLayout(只是因为我不知道SpringLayout)
*将主面板包装在JScrollPane中
外观和感觉与您的示例不完全相同。GridBagConstraints可以调整。
- 我不能评论什么,试着比较一下
- 注意,在这一刻我不明白为什么
SpringLayout
和JFrame#pack()
没有基于PreferredSize
构建正确的GUI,在这一刻,碰撞看起来也像是我的问题
使用硬编码的JFrame.setSize()
而不是正确的JFrame\pack()
导入java.awt.BorderLayout;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.JTextField;
导入javax.swing.SpringLayout;
导入javax.swing.SwingUtilities;
公共班机{
公用干管(){
JFrame=新JFrame(“SpringLayout”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton next=新JButton(“next”);
JPanel buttonPanel=新的JPanel();
按钮面板。添加(下一步);
SpringLayout布局=新的SpringLayout();
JPanel mainPanel=新的JPanel();
主面板。设置布局(布局);
int j=25;
对于(int i=0;i<5;i++){
JLabel标签=新的JLabel(“输入名称”);
JTextField text=新的JTextField(15);
布局.putConstraint(SpringLayout.WEST,label,10,SpringLayout.WEST,
主面板);
layout.putConstraint(SpringLayout.NORTH,标签,j,SpringLayout.NORTH,
主面板);
布局.putConstraint(SpringLayout.NORTH,text,j,SpringLayout.NORTH,
主面板);
布局.putConstraint(SpringLayout.WEST,text,20,SpringLayout.EAST,
标签);
j+=30;
主面板。添加(标签);
主面板。添加(文本);
}
frame.add(主面板,BorderLayout.CENTER);
框架。添加(按钮面板,边框布局。南);
框架。设置尺寸(300300);
frame.setVisible(true);
}
公共静态void main(字符串参数[]){
SwingUtilities.invokeLater(新的Runnable(){
@凌驾
公开募捐{
Main mn=新的Main();
}
});
}
}
要使其可滚动,我只需要增加主面板的首选大小,使其比滚动条大
public static void main(String args[]) {
JFrame frame = new JFrame("SpringLayout");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JScrollPane scroll = new JScrollPane();
Container contentPane = frame.getContentPane();
JButton next = new JButton("Next");
JPanel buttonPanel = new JPanel();
buttonPanel.add(next);
SpringLayout layout = new SpringLayout();
JPanel mainPanel = new JPanel();
mainPanel.setLayout(layout);
contentPane.setLayout(new BorderLayout());
int j = 25;
for(int i =0;i<18;i++){
JLabel label = new JLabel("Enter Name " + i );
JTextField text = new JTextField(15);
mainPanel.add(label);
mainPanel.add(text);
layout.putConstraint(SpringLayout.WEST, label, 10, SpringLayout.WEST,
contentPane);
layout.putConstraint(SpringLayout.NORTH, label, j, SpringLayout.NORTH,
contentPane);
layout.putConstraint(SpringLayout.NORTH, text, j, SpringLayout.NORTH,
contentPane);
layout.putConstraint(SpringLayout.WEST, text, 20, SpringLayout.EAST,
label);
j+=30;
}
mainPanel.setPreferredSize(new Dimension(mainPanel.getWidth(), 1500));
scroll.setPreferredSize(new Dimension(500,500));
scroll.setViewportView(mainPanel);
contentPane.add(scroll);
contentPane.add(buttonPanel,BorderLayout.SOUTH);
//mainWindow.add(contentPane);
frame.setSize(500, 600);
frame.setVisible(true);
}
publicstaticvoidmain(字符串参数[]){
JFrame=新JFrame(“SpringLayout”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JScrollPane scroll=新建JScrollPane();
容器contentPane=frame.getContentPane();
JButton next=新JButton(“next”);
JPanel buttonPanel=新的JPanel();
按钮面板。添加(下一步);
SpringLayout布局=新的SpringLayout();
JPanel mainPanel=新的JPanel();
主面板。设置布局(布局);
setLayout(新的BorderLayout());
int j=25;
对于(int i=0;我认为这是个好问题+1
public static void main(String args[]) {
JFrame frame = new JFrame("SpringLayout");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JScrollPane scroll = new JScrollPane();
Container contentPane = frame.getContentPane();
JButton next = new JButton("Next");
JPanel buttonPanel = new JPanel();
buttonPanel.add(next);
SpringLayout layout = new SpringLayout();
JPanel mainPanel = new JPanel();
mainPanel.setLayout(layout);
contentPane.setLayout(new BorderLayout());
int j = 25;
for(int i =0;i<18;i++){
JLabel label = new JLabel("Enter Name " + i );
JTextField text = new JTextField(15);
mainPanel.add(label);
mainPanel.add(text);
layout.putConstraint(SpringLayout.WEST, label, 10, SpringLayout.WEST,
contentPane);
layout.putConstraint(SpringLayout.NORTH, label, j, SpringLayout.NORTH,
contentPane);
layout.putConstraint(SpringLayout.NORTH, text, j, SpringLayout.NORTH,
contentPane);
layout.putConstraint(SpringLayout.WEST, text, 20, SpringLayout.EAST,
label);
j+=30;
}
mainPanel.setPreferredSize(new Dimension(mainPanel.getWidth(), 1500));
scroll.setPreferredSize(new Dimension(500,500));
scroll.setViewportView(mainPanel);
contentPane.add(scroll);
contentPane.add(buttonPanel,BorderLayout.SOUTH);
//mainWindow.add(contentPane);
frame.setSize(500, 600);
frame.setVisible(true);
}