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中不起作用

来自分类Dev

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

来自分类Dev

Java Scanner在处理中不起作用

来自分类Dev

Java中的列表不起作用

来自分类Dev

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

来自分类Dev

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

来自分类Dev

JSplitPane中的Java JScrollPane不起作用

来自分类Dev

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

来自分类Dev

Sendgrid Java在Maven中不起作用

来自分类Dev

使用getResourceAsStream在Java中不起作用

来自分类Dev

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

来自分类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 repaint() 不起作用

来自分类Dev

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