Java repaint()在调用中不起作用

奥马尔·萨拉(Omar Salah Elboredy)

我想知道为什么repiant()方法不再按预期工作...例如:

public class Main extends JPanel implements ActionListener, MouseListener,MouseMotionListener{

private ArrayList<Node> nodes;
private ArrayList<Edge> edges;
private boolean AddNode;
private int no_Of_Nodes;
private int width = 30, height = 30;


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

public void Start() {
    nodes = new ArrayList<Node>();
    edges = new ArrayList<Edge>();
    JFrame f = new JFrame("SFG");
    JPanel main_Panel = new JPanel(new BorderLayout());
    JPanel buttons = new JPanel();//Buttons Containser
    JPanel draw = new JPanel();
    ArrayList<JButton> bs = new ArrayList<JButton>();
    JButton b1 = new JButton("Add Node");
    b1.addActionListener(new Add_Node());
    JButton b2 = new JButton("Add Edge");
    b2.addActionListener(new Add_Edge());
    JButton b3 = new JButton("Add Arc");
    b3.addActionListener(new Add_Arc());
    JButton b4 = new JButton("Clear all");
    b4.addActionListener(new Clear());
    JButton b5 = new JButton("Solve");
    b5.addActionListener(new Solve());
    Bs.add(b1);
    Bs.add(b2);
    Bs.add(b3);
    Bs.add(b4);
    Bs.add(b5);
    for (int i = 0; i < bs.size(); i++) {
        Buttons.add(bs.get(i));
    }
    Buttons.setBackground(Color.GRAY);
    main_Panel.add(Buttons,BorderLayout.SOUTH);
    draw.setBackground(Color.darkGray);
    draw.addMouseMotionListener(this);
    draw.addMouseListener(this);
    main_Panel.add(Draw);
    main_Panel.setBackground(Color.GRAY);
    f.add(main_Panel);
    f.setSize(1024, 600);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setLocationRelativeTo(null);
    f.setVisible(true);
}

这些是方法

public void actionPerformed(ActionEvent arg0) {
    this.repaint();
}

public class Add_Node implements ActionListener{
    public void actionPerformed(ActionEvent e) {
        System.out.println("Add Node");
        addNode = true;
    }

}

现在在这里,当我添加节点并调用重绘时,在绘制区域中什么都没有出现:

public void mouseClicked(MouseEvent arg0) {
    // TODO Auto-generated method stub
    if(addNode){
        addNode(arg0);
        addNode = !addNode;
    }
    System.out.println(nodes.size());
    this.repaint();
}

private void addNode(MouseEvent arg0) {
    // TODO Auto-generated method stub
    int x = arg0.getX();
    int y = arg0.getY();
    Node n = new Node(No_Of_Nodes++);
    n.setX_Pos(X);
    System.out.println(x + " " + y);
    n.setX_Pos(Y);
    nodes.add(n);
}

那是我的paint()方法不再起作用

        public void paint(Graphics g){
            super.paintComponents(g);
            FontMetrics f = g.getFontMetrics();
            int nodeHeight = Math.max(height, f.getHeight());
            System.out.println("In repaint");
        for (Node n : nodes) {
                System.out.println(n.getX_Pos() + " " + n.getY_Pos());
                int nodeWidth = Math.max(width, f.stringWidth(Integer.toString(n.getNode_ID()))+width/2);
                g.setColor(Color.white);
                g.fillOval(n.getX_Pos()-nodeWidth/2, n.getY_Pos()-nodeHeight/2, nodeWidth, nodeHeight);
                g.setColor(Color.black);
                g.drawOval(n.getY_Pos()-nodeWidth/2, n.getY_Pos()-nodeHeight/2, nodeWidth, nodeHeight);
                g.drawString(Integer.toString(n.getNode_ID()) , n.getX_Pos()-f.stringWidth(Integer.toString(n.getNode_ID()))/2, n.getY_Pos()+f.getHeight()/2);
            }
         }

TIA,很长的问题很抱歉:)

疯狂程序员
  1. 在您的Start方法中,您实际上从未添加MainJFrame基于该出您所提供的,我留下来“承担”你要重写代码方面片断paint中的Main类,这种方式,paint将永远不会像它实际上没有连接到显示组件调用
  2. Start不应该创建一个JFrame您应创建的实例,Main然后将其添加到的实例中JFrame,两者应分开。forMain应该创建并添加到Main自身中
  3. 您不应该重写paint(作为一般规则),但是您不应通过调用其他paint方法之一来反抗绘画过程paintComponents相反,(再次“假设”你覆盖paintMain),你应该重写paintComponent方法和呼叫super.paintComponent之前,你做任何定制油画

有关更多详细信息,请参阅在AWT和Swing执行自定义绘画绘画

另外,您可能希望通读Java TM编程语言的代码约定,这将使人们更容易阅读您的代码,并使您更容易阅读其他代码。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java repaint()在调用中不起作用

来自分类Dev

从不同的类调用时,Java repaint() 不起作用

来自分类Dev

在 Swing、Java 中向 JPanel 添加更多组件后,Repaint() 不起作用

来自分类Dev

在Java NetBeans中构建后在构造函数中调用的方法不起作用

来自分类Dev

当我尝试使用Java在primefaces中调用方法时,p:confirmDialog不起作用

来自分类Dev

使用getResourceAsStream在Java中不起作用

来自分类Dev

暂停打印在Java中不起作用

来自分类Dev

JSplitPane中的Java JScrollPane不起作用

来自分类Dev

Sendgrid Java在Maven中不起作用

来自分类Dev

Java Scanner在处理中不起作用

来自分类Dev

Java中的列表不起作用

来自分类Dev

返回语句在Java中不起作用?

来自分类Dev

线程在Java Android中不起作用

来自分类Dev

销毁在Java中不起作用

来自分类Dev

KeyListener在Java中不起作用

来自分类Dev

Java可比在列表中不起作用

来自分类Dev

尝试/捕获在Java中不起作用?

来自分类Dev

Sendgrid Java在Maven中不起作用

来自分类Dev

String to Float在Java中不起作用?

来自分类Dev

URL中的Java变量不起作用

来自分类Dev

.equals()在Java中不起作用?

来自分类Dev

while循环在Java中不起作用

来自分类Dev

for循环在Java中不起作用

来自分类Dev

我的KeyPressed在Java中不起作用

来自分类Dev

Java中的递归QuickSort不起作用

来自分类Dev

getJSONObject 在 Java 中不起作用

来自分类Dev

返回 false 在 Java 中不起作用

来自分类Dev

Java Cofoja 在 Eclipse 中不起作用

来自分类Dev

从Java调用简单的Shell脚本不起作用