Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 向JList添加滚动条,将JList添加到JPanel_Java_Swing_Jpanel_Jscrollpane - Fatal编程技术网

Java 向JList添加滚动条,将JList添加到JPanel

Java 向JList添加滚动条,将JList添加到JPanel,java,swing,jpanel,jscrollpane,Java,Swing,Jpanel,Jscrollpane,我有一个列表,我想动态填充,因此需要滚动条。我在列表中添加了一个滚动条。问题是,当我尝试将列表添加到面板时。滚动条在列表中可见,但即使列表的元素变大,滚动条也不起作用 JPanel p4=new JPanel(); Container c=getContentPane(); myList=new JList(model); myList.setVisibleRowCount(5); myList.setFixedCellWidth(200); p4.add(new JScrollPane(my

我有一个列表,我想动态填充,因此需要滚动条。我在列表中添加了一个滚动条。问题是,当我尝试将列表添加到面板时。滚动条在列表中可见,但即使列表的元素变大,滚动条也不起作用

JPanel p4=new JPanel();
Container c=getContentPane();
myList=new JList(model);
myList.setVisibleRowCount(5);
myList.setFixedCellWidth(200);

p4.add(new JScrollPane(myList,ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
     ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS));
c.add(p4);

在这里很好用。我用了这个文件,把所有不必要的东西都去掉了

import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import java.awt.BorderLayout;

public class SplitPaneDemo extends JPanel {
  private JList<String> list;
  private String[] imageNames = { "Bird", "Cat", "Dog", "Rabbit", "Pig", "dukeWaveRed",
      "kathyCosmo", "lainesTongue", "left", "middle", "right", "stickerface"};
  public SplitPaneDemo() {
    setLayout( new BorderLayout(  ) );

    list = new JList<>(imageNames);
    list.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );
    list.setSelectedIndex( 0 );

    add( new JScrollPane(list) );
  }

  /**
   * Create the GUI and show it.  For thread safety,
   * this method should be invoked from the
   * event-dispatching thread.
   */
  private static void createAndShowGUI() {

    //Create and set up the window.
    JFrame frame = new JFrame("SplitPaneDemo");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    SplitPaneDemo splitPaneDemo = new SplitPaneDemo();
    frame.getContentPane().add(splitPaneDemo);

    //Display the window.
    frame.pack();
    frame.setVisible(true);
  }

  public static void main(String[] args) {
    //Schedule a job for the event-dispatching thread:
    //creating and showing this application's GUI.
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
      @Override
      public void run() {
        createAndShowGUI();
      }
    });
  }
}
import javax.swing.JFrame;
导入javax.swing.JList;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
导入javax.swing.ListSelectionModel;
导入java.awt.BorderLayout;
公共类SplitPaneDemo扩展了JPanel{
私人名单;
私有字符串[]imageNames={“鸟”、“猫”、“狗”、“兔子”、“猪”、“杜克韦韦韦德”,
“kathyCosmo”、“lainesTongue”、“left”、“middle”、“right”、“StickeFace”};
公共SplitPaneDemo(){
setLayout(新的BorderLayout());
列表=新的JList(图像名称);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
列表。设置所选索引(0);
添加(新的JScrollPane(列表));
}
/**
*创建GUI并显示它。为了线程安全,
*应该从
*事件调度线程。
*/
私有静态void createAndShowGUI(){
//创建并设置窗口。
JFrame=新的JFrame(“SplitPaneDemo”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
SplitPaneDemo SplitPaneDemo=新的SplitPaneDemo();
frame.getContentPane().add(splitPaneDemo);
//显示窗口。
frame.pack();
frame.setVisible(true);
}
公共静态void main(字符串[]args){
//为事件调度线程计划作业:
//创建并显示此应用程序的GUI。
javax.swing.SwingUtilities.invokeLater(新的Runnable(){
@凌驾
公开募捐{
createAndShowGUI();
}
});
}
}
这里有类似的问题:

不过,我觉得你的答案不一样。当你把东西添加到列表中时,问题可能就出现了;你可以试着做:

myList.revalidate();
更改后。

否-在模型更改后(如果模型符合其通知合同)应按预期工作(请参阅@Robin's SSCCE)-您未显示的代码出现问题后,不需要重新验证。。。