添加 JScrollPane 会删除 JPanel 中的所有组件
Adding a JScrollPane removes all the components inside JPanel
当我将 JScrollPane 添加到 JPanel 时,JPanel 中的所有按钮都消失了,它变成了空的。我正在关注这个 post here 以及其他类似的。
这是没有 JScrollPane 的代码:
JPanel panel = new JPanel();
panel.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
panel.setBounds(5, 5, 286, 573);
contentPane.add(panel);
panel.setLayout(null);
JPanel panel_1 = new JPanel();
panel_1.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
panel_1.setBounds(12, 53, 262, 484);
panel.add(panel_1);
panel_1.setLayout(null);
//this panel is the one the scrollPane is being added to and contains the buttons
JPanel panel_2 = new JPanel();
panel_2.setBounds(12, 68, 238, 403);
panel_2.setLayout(new BoxLayout(panel_2, BoxLayout.Y_AXIS));
for(int i = 0; i < 50; i++) {
JButton bttn = new JButton("TEST");
panel_2.add(bttn);
panel_2.revalidate();
}
panel_1.add(panel_2);
给出:
和JScrollPane的代码,最后一行替换为:
JScrollPane scrollPane = new JScrollPane(panel_2);
panel_1.add(scrollPane);
//panel_1.add(panel_2);
但是,所有按钮都消失了:
编辑:这是完整的代码:
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.SpringLayout;
import javax.swing.border.BevelBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.border.EtchedBorder;
public class Test extends JFrame {
private JPanel contentPane;
public static void main(String[] args) {
Test frame = new Test();
frame.setVisible(true);
}
/**
* Create the frame.
*/
public Test() {
setTitle("Test Program");
setResizable(false);
setBackground(Color.WHITE);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 871, 630);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
SpringLayout sl_contentPane = new SpringLayout();
contentPane.setLayout(sl_contentPane);
JPanel panel = new JPanel();
sl_contentPane.putConstraint(SpringLayout.NORTH, panel, 5, SpringLayout.NORTH, contentPane);
sl_contentPane.putConstraint(SpringLayout.WEST, panel, 5, SpringLayout.WEST, contentPane);
sl_contentPane.putConstraint(SpringLayout.SOUTH, panel, 578, SpringLayout.NORTH, contentPane);
sl_contentPane.putConstraint(SpringLayout.EAST, panel, 291, SpringLayout.WEST, contentPane);
panel.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
contentPane.add(panel);
SpringLayout sl_panel = new SpringLayout();
panel.setLayout(sl_panel);
JPanel panel_1 = new JPanel();
sl_panel.putConstraint(SpringLayout.NORTH, panel_1, 53, SpringLayout.NORTH, panel);
sl_panel.putConstraint(SpringLayout.WEST, panel_1, 12, SpringLayout.WEST, panel);
sl_panel.putConstraint(SpringLayout.SOUTH, panel_1, 537, SpringLayout.NORTH, panel);
sl_panel.putConstraint(SpringLayout.EAST, panel_1, 274, SpringLayout.WEST, panel);
panel_1.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
panel.add(panel_1);
SpringLayout sl_panel_1 = new SpringLayout();
panel_1.setLayout(sl_panel_1);
JSeparator separator = new JSeparator();
sl_panel_1.putConstraint(SpringLayout.NORTH, separator, 54, SpringLayout.NORTH, panel_1);
sl_panel_1.putConstraint(SpringLayout.WEST, separator, 12, SpringLayout.WEST, panel_1);
sl_panel_1.putConstraint(SpringLayout.SOUTH, separator, 69, SpringLayout.NORTH, panel_1);
sl_panel_1.putConstraint(SpringLayout.EAST, separator, 250, SpringLayout.WEST, panel_1);
panel_1.add(separator);
JLabel lblNewLabel = new JLabel("Results:");
sl_panel_1.putConstraint(SpringLayout.NORTH, lblNewLabel, 13, SpringLayout.NORTH, panel_1);
sl_panel_1.putConstraint(SpringLayout.WEST, lblNewLabel, 12, SpringLayout.WEST, panel_1);
sl_panel_1.putConstraint(SpringLayout.SOUTH, lblNewLabel, 55, SpringLayout.NORTH, panel_1);
sl_panel_1.putConstraint(SpringLayout.EAST, lblNewLabel, 115, SpringLayout.WEST, panel_1);
lblNewLabel.setFont(new Font("Tahoma", Font.BOLD, 21));
panel_1.add(lblNewLabel);
JPanel panel_2 = new JPanel();
panel_2.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
sl_panel_1.putConstraint(SpringLayout.NORTH, panel_2, -2, SpringLayout.SOUTH, separator);
sl_panel_1.putConstraint(SpringLayout.WEST, panel_2, 2, SpringLayout.WEST, lblNewLabel);
sl_panel_1.putConstraint(SpringLayout.SOUTH, panel_2, 398, SpringLayout.SOUTH, separator);
sl_panel_1.putConstraint(SpringLayout.EAST, panel_2, 0, SpringLayout.EAST, separator);
panel_2.setLayout(new BoxLayout(panel_2, BoxLayout.Y_AXIS));
for(int i = 0; i < 50; i++) {
JButton bttn = new JButton("TEST");
panel_2.add(bttn);
}
JScrollPane scrollPane = new JScrollPane(panel_2);
sl_panel_1.putConstraint(SpringLayout.NORTH, scrollPane, 0, SpringLayout.NORTH, panel_1);
sl_panel_1.putConstraint(SpringLayout.WEST, scrollPane, 0, SpringLayout.WEST, panel_1);
sl_panel_1.putConstraint(SpringLayout.SOUTH, scrollPane, 0, SpringLayout.NORTH, panel_1);
sl_panel_1.putConstraint(SpringLayout.EAST, scrollPane, 0, SpringLayout.WEST, panel_1);
panel_1.add(scrollPane);
//panel_1.add(panel_2); if this is used instead of the above 6 lines of scrollPane, then the buttons appear
}
}
这是整个应用程序的图像;带有 "TEST" 按钮的“结果”选项卡下方的面板是滚动窗格应位于的位置:
任何帮助将不胜感激!
你的约束有点奇怪:
sl_panel_1.putConstraint(SpringLayout.NORTH, scrollPane, 0, SpringLayout.NORTH, panel_1);
sl_panel_1.putConstraint(SpringLayout.WEST, scrollPane, 0, SpringLayout.WEST, panel_1);
sl_panel_1.putConstraint(SpringLayout.SOUTH, scrollPane, 0, SpringLayout.NORTH, panel_1);
sl_panel_1.putConstraint(SpringLayout.EAST, scrollPane, 0, SpringLayout.WEST, panel_1);
更改为,例如:
sl_panel_1.putConstraint(SpringLayout.NORTH, scrollPane, 0, SpringLayout.SOUTH, separator);
sl_panel_1.putConstraint(SpringLayout.WEST, scrollPane, 0, SpringLayout.WEST, panel_1);
sl_panel_1.putConstraint(SpringLayout.SOUTH, scrollPane, 0, SpringLayout.SOUTH, panel_1);
sl_panel_1.putConstraint(SpringLayout.EAST, scrollPane, 0, SpringLayout.EAST, panel_1);
并且不为 panel_2
添加约束到 sl_panel_1
。
如果您添加了具有这些约束且没有滚动窗格的 panel_2,它也不会显示
当我将 JScrollPane 添加到 JPanel 时,JPanel 中的所有按钮都消失了,它变成了空的。我正在关注这个 post here 以及其他类似的。
这是没有 JScrollPane 的代码:
JPanel panel = new JPanel();
panel.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
panel.setBounds(5, 5, 286, 573);
contentPane.add(panel);
panel.setLayout(null);
JPanel panel_1 = new JPanel();
panel_1.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
panel_1.setBounds(12, 53, 262, 484);
panel.add(panel_1);
panel_1.setLayout(null);
//this panel is the one the scrollPane is being added to and contains the buttons
JPanel panel_2 = new JPanel();
panel_2.setBounds(12, 68, 238, 403);
panel_2.setLayout(new BoxLayout(panel_2, BoxLayout.Y_AXIS));
for(int i = 0; i < 50; i++) {
JButton bttn = new JButton("TEST");
panel_2.add(bttn);
panel_2.revalidate();
}
panel_1.add(panel_2);
给出:
和JScrollPane的代码,最后一行替换为:
JScrollPane scrollPane = new JScrollPane(panel_2);
panel_1.add(scrollPane);
//panel_1.add(panel_2);
但是,所有按钮都消失了:
编辑:这是完整的代码:
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.SpringLayout;
import javax.swing.border.BevelBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.border.EtchedBorder;
public class Test extends JFrame {
private JPanel contentPane;
public static void main(String[] args) {
Test frame = new Test();
frame.setVisible(true);
}
/**
* Create the frame.
*/
public Test() {
setTitle("Test Program");
setResizable(false);
setBackground(Color.WHITE);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 871, 630);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
SpringLayout sl_contentPane = new SpringLayout();
contentPane.setLayout(sl_contentPane);
JPanel panel = new JPanel();
sl_contentPane.putConstraint(SpringLayout.NORTH, panel, 5, SpringLayout.NORTH, contentPane);
sl_contentPane.putConstraint(SpringLayout.WEST, panel, 5, SpringLayout.WEST, contentPane);
sl_contentPane.putConstraint(SpringLayout.SOUTH, panel, 578, SpringLayout.NORTH, contentPane);
sl_contentPane.putConstraint(SpringLayout.EAST, panel, 291, SpringLayout.WEST, contentPane);
panel.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
contentPane.add(panel);
SpringLayout sl_panel = new SpringLayout();
panel.setLayout(sl_panel);
JPanel panel_1 = new JPanel();
sl_panel.putConstraint(SpringLayout.NORTH, panel_1, 53, SpringLayout.NORTH, panel);
sl_panel.putConstraint(SpringLayout.WEST, panel_1, 12, SpringLayout.WEST, panel);
sl_panel.putConstraint(SpringLayout.SOUTH, panel_1, 537, SpringLayout.NORTH, panel);
sl_panel.putConstraint(SpringLayout.EAST, panel_1, 274, SpringLayout.WEST, panel);
panel_1.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
panel.add(panel_1);
SpringLayout sl_panel_1 = new SpringLayout();
panel_1.setLayout(sl_panel_1);
JSeparator separator = new JSeparator();
sl_panel_1.putConstraint(SpringLayout.NORTH, separator, 54, SpringLayout.NORTH, panel_1);
sl_panel_1.putConstraint(SpringLayout.WEST, separator, 12, SpringLayout.WEST, panel_1);
sl_panel_1.putConstraint(SpringLayout.SOUTH, separator, 69, SpringLayout.NORTH, panel_1);
sl_panel_1.putConstraint(SpringLayout.EAST, separator, 250, SpringLayout.WEST, panel_1);
panel_1.add(separator);
JLabel lblNewLabel = new JLabel("Results:");
sl_panel_1.putConstraint(SpringLayout.NORTH, lblNewLabel, 13, SpringLayout.NORTH, panel_1);
sl_panel_1.putConstraint(SpringLayout.WEST, lblNewLabel, 12, SpringLayout.WEST, panel_1);
sl_panel_1.putConstraint(SpringLayout.SOUTH, lblNewLabel, 55, SpringLayout.NORTH, panel_1);
sl_panel_1.putConstraint(SpringLayout.EAST, lblNewLabel, 115, SpringLayout.WEST, panel_1);
lblNewLabel.setFont(new Font("Tahoma", Font.BOLD, 21));
panel_1.add(lblNewLabel);
JPanel panel_2 = new JPanel();
panel_2.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
sl_panel_1.putConstraint(SpringLayout.NORTH, panel_2, -2, SpringLayout.SOUTH, separator);
sl_panel_1.putConstraint(SpringLayout.WEST, panel_2, 2, SpringLayout.WEST, lblNewLabel);
sl_panel_1.putConstraint(SpringLayout.SOUTH, panel_2, 398, SpringLayout.SOUTH, separator);
sl_panel_1.putConstraint(SpringLayout.EAST, panel_2, 0, SpringLayout.EAST, separator);
panel_2.setLayout(new BoxLayout(panel_2, BoxLayout.Y_AXIS));
for(int i = 0; i < 50; i++) {
JButton bttn = new JButton("TEST");
panel_2.add(bttn);
}
JScrollPane scrollPane = new JScrollPane(panel_2);
sl_panel_1.putConstraint(SpringLayout.NORTH, scrollPane, 0, SpringLayout.NORTH, panel_1);
sl_panel_1.putConstraint(SpringLayout.WEST, scrollPane, 0, SpringLayout.WEST, panel_1);
sl_panel_1.putConstraint(SpringLayout.SOUTH, scrollPane, 0, SpringLayout.NORTH, panel_1);
sl_panel_1.putConstraint(SpringLayout.EAST, scrollPane, 0, SpringLayout.WEST, panel_1);
panel_1.add(scrollPane);
//panel_1.add(panel_2); if this is used instead of the above 6 lines of scrollPane, then the buttons appear
}
}
这是整个应用程序的图像;带有 "TEST" 按钮的“结果”选项卡下方的面板是滚动窗格应位于的位置:
任何帮助将不胜感激!
你的约束有点奇怪:
sl_panel_1.putConstraint(SpringLayout.NORTH, scrollPane, 0, SpringLayout.NORTH, panel_1);
sl_panel_1.putConstraint(SpringLayout.WEST, scrollPane, 0, SpringLayout.WEST, panel_1);
sl_panel_1.putConstraint(SpringLayout.SOUTH, scrollPane, 0, SpringLayout.NORTH, panel_1);
sl_panel_1.putConstraint(SpringLayout.EAST, scrollPane, 0, SpringLayout.WEST, panel_1);
更改为,例如:
sl_panel_1.putConstraint(SpringLayout.NORTH, scrollPane, 0, SpringLayout.SOUTH, separator);
sl_panel_1.putConstraint(SpringLayout.WEST, scrollPane, 0, SpringLayout.WEST, panel_1);
sl_panel_1.putConstraint(SpringLayout.SOUTH, scrollPane, 0, SpringLayout.SOUTH, panel_1);
sl_panel_1.putConstraint(SpringLayout.EAST, scrollPane, 0, SpringLayout.EAST, panel_1);
并且不为 panel_2
添加约束到 sl_panel_1
。
如果您添加了具有这些约束且没有滚动窗格的 panel_2,它也不会显示