Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.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 如何将2个JLists添加到一个JScrollPane?_Java_Swing_User Interface_Jscrollpane_Jlist - Fatal编程技术网

Java 如何将2个JLists添加到一个JScrollPane?

Java 如何将2个JLists添加到一个JScrollPane?,java,swing,user-interface,jscrollpane,jlist,Java,Swing,User Interface,Jscrollpane,Jlist,想象一下一群有名字和年龄的人。我希望我的应用程序的用户能够滚动浏览并按姓名选择此组的成员,同时在右侧显示他们的年龄。因此,我基本上希望在一个JScrollPane中添加两个JLists,两个JLists同步滚动(向下滚动会显示下一个姓名和年龄)。值得一提的是,包含年龄的JList不必与名称一起选择,关键的一点是,它必须与名称同步才能滚动 我尝试了几个想法,最终得到了以下代码: public class Main { public static void main(String ar

想象一下一群有名字和年龄的人。我希望我的应用程序的用户能够滚动浏览并按姓名选择此组的成员,同时在右侧显示他们的年龄。因此,我基本上希望在一个JScrollPane中添加两个JLists,两个JLists同步滚动(向下滚动会显示下一个姓名和年龄)。值得一提的是,包含年龄的JList不必与名称一起选择,关键的一点是,它必须与名称同步才能滚动

我尝试了几个想法,最终得到了以下代码:

public class Main {



    public static void main(String args[]) {
        Main main = new Main();
        main.go();
    }

    private void go() {

        String[] words = {"David", "Stephanie", "Mark", "Michelle", "Simon", "Rupert",
                "Mitchell", "Charles", "Owen"};
        String[] numbers = {"43","12","15","65","12","76","33","45","34"};

        JFrame frame = new JFrame();
        JPanel background = new JPanel();

        JList<String> listOne = new JList<String>(words);
        JList<String> listTwo = new JList<String>(numbers);

        JPanel listPanel = new JPanel();
        listPanel.add(listOne);
        listPanel.add(listTwo);

        JScrollPane scrollPane = new JScrollPane(listPanel);

        background.add(scrollPane);
        frame.getContentPane().add(background);
        frame.setVisible(true);
        frame.pack();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

}
公共类主{
公共静态void main(字符串参数[]){
Main Main=新Main();
main.go();
}
私人空间{
String[]words={“David”、“Stephanie”、“Mark”、“Michelle”、“Simon”、“Rupert”,
“米切尔”、“查尔斯”、“欧文”};
字符串[]数字={“43”、“12”、“15”、“65”、“12”、“76”、“33”、“45”、“34”};
JFrame=新JFrame();
JPanel background=新的JPanel();
JList listOne=新JList(单词);
JList listTwo=新JList(编号);
JPanel listPanel=newjpanel();
添加(listOne);
添加(listTwo);
JScrollPane scrollPane=新的JScrollPane(列表面板);
添加(滚动窗格);
frame.getContentPane().add(后台);
frame.setVisible(true);
frame.pack();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
如果有人能提出一个更好的方法,那么请放心,但我的问题是,我如何实现上述功能

提前谢谢

因此,我基本上希望在一个JScrollPane中添加两个JLists,两个JLists同步滚动(向下滚动会显示下一个姓名和年龄)

你的问题是XY,因为你并不真的想要这个。相反,您应该使用构建用于显示多列表格数据的组件——JTable。我认为部分问题在于数据的错误并行数组结构。而是创建一个类来保存字符串和数字,然后创建此类项的集合或数组

e、 g

因此,我基本上希望在一个JScrollPane中添加两个JLists,两个JLists同步滚动(向下滚动会显示下一个姓名和年龄)

你的问题是XY,因为你并不真的想要这个。相反,您应该使用构建用于显示多列表格数据的组件——JTable。我认为部分问题在于数据的错误并行数组结构。而是创建一个类来保存字符串和数字,然后创建此类项的集合或数组

e、 g


在实际应用程序中,我确实使用了一个包含字符串和数字的类,这只是一个示例。不管你怎么说,JTable是我想要的,非常感谢!在实际应用程序中,我确实使用了一个包含字符串和数字的类,这只是一个示例。不管你怎么说,JTable是我想要的,非常感谢!
import javax.swing.*;
import javax.swing.table.DefaultTableModel;

public class Main2 extends JPanel {
   private static final String[] COLUMNS = {"Name", "Age"};
   private Person[] people = {
         new Person("David", 43),
         new Person("Stephanie", 12),
         new Person("Mark", 15),
         new Person("Michelle", 65)
   };

   public Main2() {
      DefaultTableModel tableModel = new DefaultTableModel(COLUMNS, 0);
      for (Person person : people) {
         Object[] row = {person.getName(), person.getAge()};
         tableModel.addRow(row);
      }

      add(new JScrollPane(new JTable(tableModel)));
   }

   private static void createAndShowGui() {
      Main2 mainPanel = new Main2();

      JFrame frame = new JFrame("Main2");
      frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
      frame.getContentPane().add(mainPanel);
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}

class Person {
   private String name;
   private int age; // although Date for birthdate would be better
   public Person(String name, int age) {
      this.name = name;
      this.age = age;
   }
   public String getName() {
      return name;
   }
   public int getAge() {
      return age;
   }


}