【问题标题】:DefaultListModel confusionDefaultListModel 混淆
【发布时间】:2013-07-27 18:12:40
【问题描述】:

我正在尝试一种不同的方法,只是为了练习。我知道这似乎很荒谬。我的目标是在构造函数初始化时检索数字数组。但我做不到。我该怎么做?

public class Myclass  extends JPanel{
 String[]num={"1","2","3"};

public Myclass() {
    JList list=new JList(new mymodel(num));
    JScrollPane pane=new JScrollPane(list);
      add(pane);

}
class mymodel extends DefaultListModel{

    public mymodel(String[] numbers) {
        super();
    }


}
public static void  main(String...args){
JFrame  frame=new JFrame();
frame.setContentPane(new d());
frame.setVisible(true);
frame.setSize(300,300);
    }
}

【问题讨论】:

  • 1) 对代码块使用一致且符合逻辑的缩进。代码的缩进是为了帮助人们理解程序流程。 2)不要设置顶级容器的大小。而是布局内容并致电pack()。 3) 不要扩展JPanel。而是创建并使用一个实例。 4) 源代码中的一个空白行总是就足够了。 { 之后或 } 之前的空行通常也是多余的。
  • 请学习java命名约定并遵守它们。
  • 还要注意super()是隐式调用的;无需显式调用它;在调试器中进入它以查看调用堆栈。

标签: java arrays swing jlist defaultlistmodel


【解决方案1】:

一种方法是遍历数组,将每个元素添加到ListModel。另外,请考虑将MyPanel extends JPanel 替换为返回JPanel 的方法。

private static class MyModel extends DefaultListModel {

    public MyModel(String[] numbers) {
        for (String string : numbers) {
            this.addElement(string);
        }
    }
}

SSCCE:

import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

/**
 * @see http://stackoverflow.com/a/17904479/230513
 */
public class Test {

    private static class MyPanel extends JPanel {

        String[] num = {"1 One", "2 Two", "3 Three"};

        public MyPanel() {
            this.setLayout(new GridLayout());
            JList list = new JList(new MyModel(num));
            list.setVisibleRowCount(3);
            JScrollPane pane = new JScrollPane(list);
            this.add(pane);
        }
    }

    private static class MyModel extends DefaultListModel {

        public MyModel(String[] numbers) {
            for (String string : numbers) {
                this.addElement(string);
            }
        }
    }

    private void display() {
        JFrame f = new JFrame("Test");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(new MyPanel());
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Test().display();
            }
        });
    }
}

【讨论】:

    猜你喜欢
    • 2014-07-09
    • 1970-01-01
    • 2014-05-06
    • 2015-02-02
    • 2011-05-11
    • 2012-06-02
    • 2012-08-15
    • 2019-06-26
    • 2012-04-18
    相关资源
    最近更新 更多