gpt4 book ai didi

java - JList 显示重复项

转载 作者:行者123 更新时间:2023-12-02 05:01:49 25 4
gpt4 key购买 nike

我正在使用 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----------");

}

}

}

这是我的程序的输出:

enter image description here

根据我的程序,我有一个从角度 0 到 10for 循环,并且我将这些值添加到 DefaultListModel 模型,即添加到 JList 列表

有人可以帮我解决这段代码中的错误吗?

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

最佳答案

paintComponent 可能会出现任意多次,出于多种原因,请尝试调整框架大小,看看会发生什么。

你的绘画方法应该专注于绘画。

您需要更改流程,以便 paintComponent 变得依赖于模型,而不是相反。

看看Painting in AWT and Swing有关在 Swing 中绘画的更多详细信息。

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

参见Writing a Custom Cell Renderer了解更多详情

关于java - JList 显示重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28209437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com