我目前尝试在我的程序中实现JScrollPane,但我无法让它工作。
我使用Eclipse WindowBuilder来设置我的GUI,看起来像 this
在当前显示的TabbedPane中,您可以在顶部看到三个TextAreas作为标题,在底部看到一堆TextAreas。底部的条目是动态生成的,我希望允许用户在那里添加,删除和修改这些项目。因此,用户应该能够在底部滚动这些条目。
正如您在程序右侧的ScrollBar中所看到的,我已经尝试实现JScrollPane,但实际上无法成功滚动。我已经尝试了很多不同的东西,使用多种类型的容器,阅读所有的解释并观看我能找到的所有教程,但我似乎无法在这里将它实现到我自己的特定情况中。
在第61行中,我创建了一个JPanel,它将我的Items保存在我自己创建的类ItemPane的Form中。 在第64行中,然后在构造函数中创建了我的JScrollPanel,其中JPanel为Viewport。 在#70-#74的for循环中,我将ItemPanes添加到我的JPanel。
正如你在图片中看到的,一切正常,只是我无法滚动浏览我的项目,这些项目会进一步延伸到窗口的底部。
有什么建议我做错了或为什么它不起作用? 我真的很感激!
(注意:我已经将代码删除了一切可能很重要的内容。我删除了简单的Getters和Setter以及与布局本身无关的所有内容。)
这是我的窗口初始化的样子:
1 public class Test
2 {
3 JFrame frame_Main;
4 JTextField textField_Col1;
5 JTextField textField_Col2;
6 JTextField textField_Col3;
7
8 private void initialize()
9 {
10 frame_Main = new JFrame();
11 frame_Main.setTitle("My Program");
12 frame_Main.setResizable(false);
13 frame_Main.setBounds(100, 100, 1080, 720);
14 frame_Main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
15 frame_Main.getContentPane().setLayout(null);
16
17 JTabbedPane tabbedPane_Main = new JTabbedPane(SwingConstants.TOP);
18 tabbedPane_Main.setBorder(null);
19 tabbedPane_Main.setToolTipText("");
20 tabbedPane_Main.setBounds(0, 0, 1074, 691);
21 frame_Main.getContentPane().add(tabbedPane_Main);
22
23 JPanel panel_Tab1 = new JPanel();
24 panel_Tab1.setBorder(null);
25 tabbedPane_Main.addTab("Tab 1", null, panel_Tab1, "");
26 panel_Tab1.setLayout(null);
27
28 JTabbedPane tabbedPane_Tab1 = new JTabbedPane(SwingConstants.TOP);
29 tabbedPane_Tab1.setBorder(null);
30 tabbedPane_Tab1.setBounds(0, 0, 1069, 663);
31 panel_Tab1.add(tabbedPane_Tab1);
32
33 JPanel panel_Tab1_1 = new JPanel();
34 panel_Tab1_1.setBorder(null);
35 tabbedPane_Tab1.addTab("Tab 1.1", null, panel_Tab1_1, null);
36 panel_Tab1_1.setLayout(null);
37
38 textField_Col1 = new JTextField();
39 textField_Col1.setHorizontalAlignment(SwingConstants.CENTER);
40 textField_Col1.setBounds(10, 11, 341, 20);
41 textField_Col1.setEditable(false);
42 textField_Col1.setText("Col 1");
43 panel_Tab1_1.add(textField_Col1);
44
45 textField_Col2 = new JTextField();
46 textField_Col2.setHorizontalAlignment(SwingConstants.CENTER);
47 textField_Col2.setBounds(362, 11, 341, 20);
48 textField_Col2.setEditable(false);
49 textField_Col2.setText("Col 2");
50 textField_Col2.setColumns(10);
51 panel_Tab1_1.add(textField_Col2);
52
53 textField_Col3 = new JTextField();
54 textField_Col3.setHorizontalAlignment(SwingConstants.CENTER);
55 textField_Col3.setBounds(713, 11, 341, 20);
56 textField_Col3.setEditable(false);
57 textField_Col3.setText("Col 3");
58 textField_Col3.setColumns(10);
59 panel_Tab1_1.add(textField_Col3);
60
61 JPanel panel_Tab1_1_Items = new JPanel();
62 panel_Tab1_1_Items.setLayout(null);
63
64 JScrollPane scrollPane_Items = new JScrollPane(panel_Tab1_1_Items);
65 scrollPane_Items.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
66 scrollPane_Items.setBounds(0, 42, 1064, 593);
67
68 panel_Tab1_1.add(scrollPane_Items);
69
70 for (int i = 0; i < 25; i++)
71 {
72 ItemPane temp = new ItemPane(new Item("Col1 " + i, "Col2 " + i, "Col3 " + i), i);
73 panel_Tab1_1_Items.add(temp);
74 }
75
76 JPanel panel_Tab1_2 = new JPanel();
77 panel_Tab1_2.setBorder(null);
78 tabbedPane_Tab1.addTab("Tab 1.2", null, panel_Tab1_2, null);
79 panel_Tab1_2.setLayout(null);
80
81 JPanel panel_Tab2 = new JPanel();
82 panel_Tab2.setBorder(null);
83 tabbedPane_Main.addTab("Tab 2", null, panel_Tab2, "");
84 panel_Tab2.setLayout(null);
85 }
86 }
当ItemPane为:
1 public class ItemPane extends JPanel
2 {
3 JTextPane[] textPanes;
4
5 public ItemPane(Item item, int num)
6 {
7 super();
8
9 setBounds(10, 11 + num * 30, 1043, 20);
10 setLayout(null);
11
12 textPanes = new JTextPane[3];
13
14 String[] texts = new String[] { item.getCol1(), item.getCol2(), item.getCol3() };
15
16 for (int i = 0; i < textPanes.length; i++)
17 {
18 textPanes[i] = new JTextPane();
19 textPanes[i].setEditable(false);
20 textPanes[i].setBounds(351 * i, 0, 341, 20);
21 textPanes[i].setText(texts[i]);
22 add(textPanes[i]);
23 }
24 }
25 }
和项目:
1 public class Item
2 {
3 private String m_col1;
4 private String m_col2;
5 private String m_col3;
6
7 public Item(String col1, String col2, String col3)
8 {
9 m_col1 = col1;
10 m_col2 = col2;
11 m_col3 = col3;
12 }
13 }
答案 0 :(得分:0)
好的,我终于成功完成了我想要的事情!
由于Arvind只是说我应该避免使用null布局,我试着指定它们。所以我将#62的代码更改为
panel_Tab1_1_Items.setLayout(new BoxLayout( panel_Tab1_1_Items, BoxLayout.Y_AXIS));
只有它没有用,然后我设置了我的ItemPane的preferredsize。在ItemPane类(第二个代码片段)中,我只是在#23和#24之间添加了代码,如下所示:
setPreferredSize(new Dimension(1043, 20));
现在一切都像我想要的那样,我终于可以滚动浏览我的所有物品了!