繁体   English   中英

JList显示重复项

[英]JList is showing duplicates

我正在使用Java Swing编写一个小示例,我想在一个面板上绘制一个正弦图,在另一个面板上绘制该图的坐标。 因此,我创建了一个扩展JFrame的类,然后为图形和坐标创建了JPanel 为了显示坐标,我正在使用JList 现在的问题是,坐标显示重复的值。 这是我的代码:

public class MyFrame extends JFrame {
    JList list;
    DecimalFormat df = new DecimalFormat("#.###");
    DefaultListModel model = new DefaultListModel();

    private JPanel contentPane;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    MyFrame frame = new MyFrame();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }


    public MyFrame() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 600, 600);
        contentPane = new JPanel();
        contentPane.setBorder(new LineBorder(new Color(0, 0, 0)));
        setContentPane(contentPane);
        contentPane.setLayout(new GridLayout(1, 2, 0, 0));

        JPanel panel = new MyGraph();
        panel.setBorder(new LineBorder(new Color(0, 0, 0)));
        contentPane.add(panel);

        list = new JList(model);
        list.setVisibleRowCount(4);

        JPanel panel_1 = new JPanel();
        panel_1.setBorder(new LineBorder(new Color(0, 0, 0)));

        panel_1.setLayout(new BoxLayout(panel_1, BoxLayout.Y_AXIS));

        JLabel lblNewLabel_1 = new JLabel("X - Y");
        panel_1.add(lblNewLabel_1);

        JScrollPane slistScroller = new JScrollPane(list);
        panel_1.add(slistScroller);

        contentPane.add(panel_1);

    }

    class MyGraph extends JPanel {

        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            int xBase = 10;
            int top = 100;
            int yScale = 10;
            int xAxis = 360;

            int yBase = top + yScale;

            g.drawLine(xBase, top, xBase, top + 2 * yScale);
            g.drawLine(xBase, yBase, xBase + xAxis, yBase);


            g.setColor(Color.red);

            int x2=0, y2=0;

            int x1 = xBase + 0;
            int y1 = yBase - (int) (10*Math.sin(0) * yScale);
            int i;
            for (i = 0; i < 10; i++) {
                x2 = xBase + i;
                y2 = yBase - (int) (10*Math.sin(i) * yScale);
                g.drawLine(x1, y1, x2, y2);
                x1 = x2;
                y1 = y2;
                df = new DecimalFormat("#.###");
                model.addElement(i +" -- " + df.format(10*Math.sin(i)));
            }
            model.addElement("------END----------");

        }

    }

}

这是我的程序的输出:

在此处输入图片说明

根据我的程序,我有一个从0 to 10角度的for loop ,并且将值添加到DefaultListModel model ,该DefaultListModel model添加到JList list

有人可以帮我在这段代码中我做错的地方吗?

即使当我有此行list.setVisibleRowCount(4); ,我期望只有4条带有滚动条的记录显示给用户,但是根据输出图像,它不能那样工作。

出于各种原因, paintComponent可以使用任意多次,请尝试调整框架的大小并查看会发生什么。

您的绘画方法应该只专注于绘画。

您需要更改过程,以使paintComponent取决于模型,而不是相反。

看看AWT和Swing中的绘画,了解有关Swing中绘画的更多详细信息。

您可能还需要考虑使用ListCellRenderJList中的模型中呈现数据,这样,您可以更轻松地共享模型及其数据。

有关更多详细信息,请参见编写自定义单元格渲染器

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM