我不得不承认,也许这个问题看起来很奇怪,但我将在这里解释:
我有一个JScrollPane,在其中我正确地添加了一个JPanel,让我们说,现在JScrollPane变量是"JSP"和JPanel是"JP"
在我的JP中,我有一个JPanel(我们称之为AJP)的ArrayList,我可以从JSP外部控制可见性,我可以通过单击不同的按钮来控制这种可见性,每个按钮都与一个数字“链接”,所以如果我单击button1,第一个AJP元素的可见性设置为true,其他所有元素的可见性设置为false。
每个AJP元素内部都有不同的元素,例如,第一个位置的AJP有两个JTextField和一个JButton,第二个位置的AJP只有一个JTextField。
事实是,似乎我不能点击一个JButton或编辑一个JTextField,就像鼠标不能聚焦他们一样,我会在这里发布一些代码
这是包含JP的类,它是JScrollPane的扩展
private int x, y, width, height;
private JPanel internalPanel = new JPanel();
private ArrayList<KPanel> kPanels = new ArrayList<KPanel>();
JViewport viewport = new JViewport();
public KScrollPanel(int x, int y, int width, int height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
this.internalPanel.setBorder(new LineBorder(Color.black, 1));
this.internalPanel.setSize(new Dimension(this.width - 10, this.height - 10));
this.internalPanel.setPreferredSize(new Dimension(this.width - 10, this.height - 10));
this.setSize(new Dimension(this.internalPanel.getWidth() + 10, this.internalPanel.getHeight() + 10));
this.setPreferredSize(this.internalPanel.getSize());
this.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
this.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
viewport.add(this.internalPanel);
}
另一个类实际上是由我刚刚发布的类KScrollPanel中的ArrayList组成的,正如您所看到的,initialize方法以友好的方式添加元素(KButton和KTextFields是两个扩展的类JButton和JTextField)
这个类当然是JPanel的扩展
private int x, y, width, height;
KTextField textfield_nodeName, textfield_relationshipName;
KButton button_saveNode, button_saveRelationship;
public KPanel(int x, int y, int width, int height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
initGUI();
}
public KPanel() {
}
public void initGUI() {
this.setBounds(this.x, this.y, this.width, this.height);
this.setBorder(new LineBorder(Color.gray, 1));
}
public void initialize(String type) {
switch(type) {
case "Node":
textfield_nodeName = new KTextField(5, 5, 200, 30);
this.add(textfield_nodeName);
button_saveNode = new KButton(5, 35, 200, 30, "Save Node");
this.add(button_saveNode);
break;
case "Relationship":
textfield_relationshipName = new KTextField(5, 5, 250, 30);
this.add(textfield_relationshipName);
break;
}
this.revalidate();
this.repaint();
}
为什么要扩展JScrollPane?
你为什么要创建一个JViewport?
为什么要创建要添加到视口的内部JPanel?
您不应该尝试使用任何组件的大小。布局管理器将决定每个组件的大小。
要添加到scrollpane的组件应该与scrollpanel分开创建。然后,可以在创建该组件时设置其边框。
JViewport viewport = new JViewport();
...
viewport.add(this.internalPanel);
所以在我看来,你创建了一个内部面板并将其添加到视口,但你从来没有将视口添加到滚动窗格中,所以没有组件要显示。
所以我的建议是去掉定制的JScrollPane类,然后不需要扩展它,因为您没有向该类添加任何功能。只需按照设计的方式使用JScrollPane即可:
JPanel internalPanel = new JPanel();
internalPanel.setBorder(...);
internalPanel.add(...);
JScrollPane scrollPane = new JScrollPane( internalPanel );
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
我最近需要在一个JScrollPane的viewport视图中放置几个组件,其中包括一个JTextPane。 我将所有组件(两个JPanel和JTextPane)放在另一个JPanel中,这个JPanel有一个BorderLayout LayoutManager,并将该JPanel设置为ScrollPane的viewport视图。 我立即注意到: JTextPane不再根据JScrollPane的
问题内容: 我有一个JFrame,在这个JFrame中,我有一个绘制的JPanel,此Panel可以是任何大小,因此我将其放在JScrollpane中,以便当面板大于窗口屏幕大小时可以滚动。 不幸的是,它没有按我预期的那样工作: 使JFrame窗口小于JPanel大小不会显示滚动条 现在,JScrollPane的大小似乎已锁定为我添加到其中的JPanel的大小,就像以前一样,它的大小已调整为JFr
我在JScrollPane中有一个JPanel,JScrollPane嵌套在其他容器中。我的JPanel在这个问题中使用了SO user jxd中修改过的FlowLayout。 这可能是信息过火,但所讨论的面板的完整嵌套如下所示: JPanel(ModifiedFlowLayout)>JScrollPane>JPanel(GridBagLayout)>JTabbedPane>JPanel(Grid
我使用子JPanel构造JScrollPane,然后尝试将JScrollPane添加到父JPanel中,希望有一个可滚动的自定义JPanel。 我有一个大的细白线前面的所有我的组件,他们是没有滚动。有什么想法吗?
问题内容: 我有一个按钮添加到JTabbedPane添加到JPanel与这样的事情: 我想在按钮按下时关闭窗口。我尝试这样做: 但这给了我 我如何在按下按钮时关闭窗口 问题答案: 获取顶层窗口: 确保已将JFrame的默认关闭操作设置为(首选)或(首选)。 如果有可能会从JMenuItem调用此方法,那么除非您首先测试组件的父级是JPopupMenu还是JToolBar,否则它将不起作用。如果是这
我有一个叫做CatalogPane的JPanel,它的大小是800 x 600,它位于一个叫做BookFrame的JFrame中的JTabbedPane中。因此,在CatalogPane中,我创建了一个名为bookDisplay的JPanel,它显示书籍及其详细信息的列表。我希望它的大小为780 x 900,滚动条的大小为20px,并且比框架高,这样就可以滚动。然后我创建了一个尺寸为800 x 4