Java JScrollPane不显示任何内容
我不熟悉渲染GUI,使用JScrollPane不会显示任何内容:Java JScrollPane不显示任何内容,java,swing,user-interface,jscrollpane,Java,Swing,User Interface,Jscrollpane,我不熟悉渲染GUI,使用JScrollPane不会显示任何内容: private JFormattedTextField IDEnterer; private Cart cart; private JFrame frame; private JScrollPane jScrollPane; public MainUserGUI(UUID uuid){ frame = new JFrame("Current user: " + uuid.toString()); cart
private JFormattedTextField IDEnterer;
private Cart cart;
private JFrame frame;
private JScrollPane jScrollPane;
public MainUserGUI(UUID uuid){
frame = new JFrame("Current user: " + uuid.toString());
cart = new Cart();
jScrollPane = new JScrollPane(/*ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED*/);
jScrollPane.setLayout(new ScrollPaneLayout());
openUserGUI();
}
public void openUserGUI(){
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setLayout(new BorderLayout());
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
JPanel iDPanel = new JPanel();
iDPanel.add(Box.createHorizontalStrut(10));
iDPanel.add(Box.createVerticalStrut(50));
iDPanel.add(new JLabel("Enter an ID:"));
iDPanel.add(getIntegerField(200, 20));
iDPanel.add(getIntegerSubmitButton("Submit ID"));
jScrollPane.add(new JLabel("Shopping cart:"));
frame.add(iDPanel, BorderLayout.WEST);
frame.add(jScrollPane, BorderLayout.EAST);
frame.pack();
frame.setVisible(true);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
}
private void renderList(){
JPanel p = new JPanel();
jScrollPane.removeAll();
jScrollPane.add(new JLabel("Shopping cart:"));
int i = 0;
for(Item item : getCartItems()){
int j = i;
JPanel panel = new JPanel();
JButton removeOne = new JButton("Remove one");
Action removeOneAction = new AbstractAction() {
private static final long serialVersionUID = 1L;
@Override
public void actionPerformed(ActionEvent e) {
new InformationEnterer().removeOne(cart, getCartItems()[j].getID());
renderList();
}
};
removeOne.addActionListener(removeOneAction);
JButton remove = new JButton("Remove all");
Action removeAllAction = new AbstractAction() {
private static final long serialVersionUID = 1L;
@Override
public void actionPerformed(ActionEvent e) {
new InformationEnterer().removeAll(cart, getCartItems()[j].getID());
renderList();
}
};
remove.addActionListener(removeAllAction);
JLabel label = new JLabel(i + ": " + item.getName() + "(" + item.getID() + "), "
+ "Amount: " + cart.getCart().get(item.getID()) + ", "
+ "Price: " + item.getPrice() * cart.getCart().get(item.getID()));
panel.add(label);
panel.add(removeOne);
panel.add(remove);
p.add(panel);
i++;
}
jScrollPane.setViewportView(p);
frame.pack();
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
}
private Item[] getCartItems(){
Item[] r = new Item[cart.getCart().size()];
int i = 0;
for(Integer integ : cart.getCart().keySet()){
Item item = new Item(integ);
r[i] = item;
i++;
}
return r;
}
private JFormattedTextField getIntegerField(int width, int height){
NumberFormat format = NumberFormat.getInstance();
NumberFormatter formatter = new NumberFormatter(format);
formatter.setValueClass(Integer.class);
formatter.setMinimum(-1);
formatter.setMaximum(Integer.MAX_VALUE);
formatter.setCommitsOnValidEdit(true);
formatter.setAllowsInvalid(false);
IDEnterer = new JFormattedTextField(formatter);
Dimension dimension = new Dimension(width, height);
IDEnterer.setPreferredSize(dimension);
return IDEnterer;
}
private JButton getIntegerSubmitButton(String text){
JButton button = new JButton(text);
Action action = new AbstractAction() {
private static final long serialVersionUID = 1L;
@Override
public void actionPerformed(ActionEvent e) {
if(IDEnterer != null){
if(IDEnterer.getText().length() <= 0){
JOptionPane.showMessageDialog(null, "The ID can't be null", "Warning", JOptionPane.ERROR_MESSAGE);
}else{
new InformationEnterer().addItem(cart, Integer.parseInt(IDEnterer.getText().replaceAll(",", "")));
renderList();
IDEnterer.setValue(null);
}
}
}
};
button.addActionListener(action);
return button;
}
private JFormattedTextField标识符;
私家车;
私有JFrame;
私有JScrollPane JScrollPane;
公共MainUserGUI(UUID UUID){
frame=newjframe(“当前用户:+uuid.toString());
购物车=新购物车();
jScrollPane=新的jScrollPane(/*ScrollPaneConstants.VERTICAL\u SCROLLBAR\u始终,ScrollPaneConstants.HORIZONTAL\u SCROLLBAR\u根据需要*/);
setLayout(新的ScrollPaneLayout());
openUserGUI();
}
public void openUserGUI(){
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(空);
frame.setLayout(新的BorderLayout());
setExtendedState(JFrame.MAXIMIZED_二者);
JPanel iDPanel=新的JPanel();
iDPanel.添加(框.创建水平支柱(10));
iDPanel.添加(长方体垂直支柱(50));
添加(新JLabel(“输入ID:”);
添加(getIntegerField(200,20));
添加(getIntegerSubmitButton(“提交ID”);
添加(新的JLabel(“购物车”);
框架。添加(iDPanel,边界布局。西部);
添加(jScrollPane,BorderLayout.EAST);
frame.pack();
frame.setVisible(true);
setExtendedState(JFrame.MAXIMIZED_二者);
}
私有void renderList(){
JPanel p=新的JPanel();
jScrollPane.removeAll();
添加(新的JLabel(“购物车”);
int i=0;
对于(项:getCartItems()){
int j=i;
JPanel面板=新的JPanel();
JButton removeOne=新JButton(“Remove one”);
Action removeOneAction=new AbstractAction(){
私有静态最终长serialVersionUID=1L;
@凌驾
已执行的公共无效操作(操作事件e){
新信息输入程序().removeOne(购物车,getCartItems()[j].getID());
renderList();
}
};
addActionListener(removeOneAction);
JButton remove=新JButton(“全部删除”);
Action removeAllAction=new AbstractAction(){
私有静态最终长serialVersionUID=1L;
@凌驾
已执行的公共无效操作(操作事件e){
新信息输入程序().removeAll(购物车,getCartItems()[j].getID());
renderList();
}
};
remove.addActionListener(removeAllAction);
JLabel label=新的JLabel(i+“:“+item.getName()+”(“+item.getID()+”)
+金额:“+cart.getCart().get(item.getID())+”
+价格:“+item.getPrice()*cart.getCart().get(item.getID());
面板。添加(标签);
面板。添加(删除一个);
面板。添加(删除);
p、 添加(面板);
i++;
}
jScrollPane.setViewportView(p);
frame.pack();
setExtendedState(JFrame.MAXIMIZED_二者);
}
私有项[]getCartItems(){
Item[]r=新项目[cart.getCart().size()];
int i=0;
for(整数整数:cart.getCart().keySet()){
项目=新项目(整数);
r[i]=项目;
i++;
}
返回r;
}
私有JFormattedTextField getIntegerField(整型宽度,整型高度){
NumberFormat format=NumberFormat.getInstance();
NumberFormatter formatter=新的NumberFormatter(格式);
格式化程序.setValueClass(Integer.class);
格式化程序设置最小值(-1);
格式化程序.setMaximum(整数.MAX_值);
setCommitsonValidIt(true);
格式化程序.setAllowsInvalid(false);
IDEnterer=新的JFormattedTextField(格式化程序);
尺寸=新尺寸(宽度、高度);
标识符设置首选大小(尺寸);
返回标识符;
}
私有JButton getIntegerSubmitButton(字符串文本){
JButton按钮=新JButton(文本);
Action Action=newAbstractAction(){
私有静态最终长serialVersionUID=1L;
@凌驾
已执行的公共无效操作(操作事件e){
如果(标识符!=null){
如果(identerr.getText().length()非常好,请将其保留为书签。(我有。)在这种情况下,会告诉您应该使用jScrollPane.setViewportView
,而不是jScrollPane.add。(另外,不要设置jScrollPane的布局;它会自行处理。)JScrollPane
与其他容器不同,您不能使用add
,您需要将JViewport
的视图
组件设置为您想要显示的内容。查看更多信息details@VGR我更改了代码,但仍然无法发布。请确保将代码复制粘贴到新项目中,并确保它是c我仍然看到你在滚动窗格上调用add
和setLayout
。你在一个地方更改了它,但不是在renderList
方法中。另外,请删除jScrollPane.removeAll();
line;删除JScrollPane的JViewport和任何滚动条都会破坏JScrollPane。避免使用JScrollPane的任何添加或删除方法。