Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javagui小画图程序_Java_Swing_Paint_Paintcomponent_Jcomponent - Fatal编程技术网

javagui小画图程序

javagui小画图程序,java,swing,paint,paintcomponent,jcomponent,Java,Swing,Paint,Paintcomponent,Jcomponent,这和我上次问的问题是一样的,但我仍然在让一切正常工作方面遇到困难。我现在有实际的GUI要显示,但没有显示任何内容,例如我的按钮或您绘制的内容。如果有人能帮忙,我将不胜感激!! 谢谢大家! import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Paint{ public static void main(String[] args){ Win frame = new Win();

这和我上次问的问题是一样的,但我仍然在让一切正常工作方面遇到困难。我现在有实际的GUI要显示,但没有显示任何内容,例如我的按钮或您绘制的内容。如果有人能帮忙,我将不胜感激!! 谢谢大家!

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Paint{

 public static void main(String[] args){
    Win frame = new Win();
    frame.setSize(500, 500);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);

 }

}

class gui extends JComponent{
 Image image;
 Graphics2D draw;
 int x, y, prevX, prevY;

gui(){
        setDoubleBuffered(false);   
        addMouseListener(new MouseAdapter(){
                public void mousePressed(MouseEvent e){
                        prevX = e.getX();
                        prevY = e.getY();
                }

        });

        addMouseMotionListener(new MouseMotionAdapter(){
                public void mouseDragged(MouseEvent e){
                        x = e.getX();
                        y = e.getY();
                        draw.drawLine(prevX, prevY, x, y);
                        repaint();
                        prevX = x;
                        prevY = y;

                }


        });

}


public void changeColor(Color color)
{
    draw.setPaint(color);
    repaint();
}
public void clear(){
    draw.setPaint(Color.white);
    draw.fillRect(0, 0, getSize().width, getSize().height);
    draw.setPaint(Color.black);
    repaint();
}
public void paintComponent(Graphics g)
{
    if(image == null)
    {
        image = createImage(getSize().width, getSize().height);
        draw = (Graphics2D)image.getGraphics();
        draw.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        clear();
    }

    g.drawImage(image, 0, 0, null);
 }
} 





class Win extends JFrame implements ActionListener{
    JButton red, green, blue, clear;
    gui gui = new gui();

    Win(){
        super("Paint");
        setSize(500,500);


        Container content=new Container();
        content.setLayout(new BorderLayout());
        content.add(gui, BorderLayout.CENTER);
        content.setVisible(true);

        JPanel panel = new JPanel();
        content.add(panel, BorderLayout.SOUTH);

        panel.setPreferredSize(new Dimension(32, 68));
        panel.setMinimumSize(new Dimension(32, 68));
        panel.setMaximumSize(new Dimension(32, 68));


        red = new JButton("Red");
        green = new JButton("Green");
        blue = new JButton("Blue");
        clear = new JButton("Clear");

        red.setPreferredSize(new Dimension(50, 16));
        green.setPreferredSize(new Dimension(50,16));
        blue.setPreferredSize(new Dimension(50, 16));

        panel.add(red);
        panel.add(green);
        panel.add(blue);
        panel.add(clear);

        panel.setVisible(true);

        red.addActionListener(this);
        green.addActionListener(this);
        blue.addActionListener(this);
        clear.addActionListener(this);




    }
    public void actionPerformed(ActionEvent e) {

        if( e.getSource()==red){
            gui.changeColor(Color.red);
            repaint();
        }
        if( e.getSource()==green){
            gui.changeColor(Color.green);
            repaint();
        }
        if( e.getSource()==blue){
            gui.changeColor(Color.blue);
            repaint();
        }
        if( e.getSource()==clear){
            gui.clear();
        }


    }
}

看看那个
Win
构造函数。您创建了许多组件,将它们添加到许多面板中,但实际上没有一个组件添加到
Win
实例中

因为是
Win
实例使其可见,所以没有任何显示是有意义的

进一步说明:

  • 请不要在这里转储所有代码,而是尽量将其缩减为一个(重点是简短的)。例如,如果您只需要一个按钮就可以重现问题,为什么要向我们显示5个按钮的代码。当您的问题是UI没有显示时,为什么要使用
    ActionListener
    的代码
  • 无需调用
    set(xxx)Size
    。添加所有组件后,使用
    JFrame#pack
  • 默认情况下,组件是可见的。因此,无需对您创建的每个组件调用
    setVisible(true)
    ,只要将它们添加到已可见的父组件中即可
  • gui
    类中使用
    Graphics2D
    字段是完全错误的。您应该覆盖自定义绘制的
    paintComponent
    方法
  • gui
    类的名称违反了Java命名约定。这使得代码很难阅读

您似乎没有使用gui类-添加以下行:

frame.add(new Gui());

在您将框架设置为可见(请注意,您已将类命名为gui,这不是标准的)

之后,您会意识到这实际上不是一个问题-可能是您以前的问题,但我们在这里看不到。很容易找到他的最后一个问题,它在这里:与中相同的问题,我仍然无法显示主要内容。所以问题是:我如何才能让主要内容(面板和油漆窗口)显示出来?谢谢,我很感激!很抱歉,我把我所有的代码都扔掉了,我不知道该把问题缩小到哪里,但我明白这是一个多么讨厌的问题。我真的很欣赏所有的指点!在我睡觉的时候尽量不要养成坏习惯learn@user1820070我不知道从何处缩小问题范围删除代码片段并查看问题是否仍然存在,这样可以缩小问题范围。这是我第二次使用这个网站,自从昨晚以来,我还不知道有人不赞成我列出整个代码。我想,通过检查整个代码,任何人都可以更容易地理解我要做的事情。@user1820070和提供一些关于如何发布代码以及如何在此网站上发布问题的好提示。遵循这些指导原则,你的问题很可能会被投赞成票,而不是被投反对票/被否决票