Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.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
Java 使用线程在Jpanel对象上添加图形_Java_Swing_Jpanel_Java Threads - Fatal编程技术网

Java 使用线程在Jpanel对象上添加图形

Java 使用线程在Jpanel对象上添加图形,java,swing,jpanel,java-threads,Java,Swing,Jpanel,Java Threads,我想在这个程序中添加图形。图形将绘制在“drawPanel”对象上。我必须在这里用线 不知道如何使用线程在Jpanel对象中绘制。在Jpanel对象上绘制图形的有效方法是什么 线程和paintComponent()将如何交互。谢谢 代码: 我必须在“drawPanel”Jpanel对象上添加图形 然后需要扩展JPanel并重写paintComponent(…)方法来进行自定义绘制 阅读上Swing教程中的部分,了解更多信息和工作示例,以便开始。只需在add()方法中从另一个类添加此类对象 这将起

我想在这个程序中添加图形。图形将绘制在“drawPanel”对象上。我必须在这里用线

不知道如何使用线程在Jpanel对象中绘制。在Jpanel对象上绘制图形的有效方法是什么

线程和
paintComponent()
将如何交互。谢谢

代码:

我必须在“drawPanel”Jpanel对象上添加图形

然后需要扩展
JPanel
并重写
paintComponent(…)
方法来进行自定义绘制


阅读上Swing教程中的部分,了解更多信息和工作示例,以便开始。

只需在add()方法中从另一个类添加此类对象

这将起作用(经过测试):

公共类LinearSearchSimulation扩展了JPanel实现可运行{
私人最终整数延迟=50;
私人JPanel主面板;
int x=0,y=0;
私有线程;
私有布尔threadFlag=false;
public LinearSearchSimulation(JPanel主面板){
this.mainPanel=mainPanel;
挫折地面(颜色:白色);
}
公开作废开始(){
if(threadFlag){
回来
}
threadFlag=true;
线程=新线程(此);
thread.start();
}
公共停车场(){
如果(!threadFlag){
回来
}
threadFlag=false;
试一试{
thread.join();
}捕捉(中断异常e){
e、 printStackTrace();
}
}
@凌驾
公共组件(图形g){
超级组件(g);
g、 椭圆形(x,y,55,55);
g、 处置();
}
公共无效更新(){
x+=1;
y+=1;
}
@凌驾
公开募捐{
很久以前的时间,时差,睡眠;
beforeTime=System.currentTimeMillis();
while(threadFlag){
更新();
重新油漆();
timeDiff=System.currentTimeMillis()-beforeTime;
睡眠=延迟-时间差;
如果(睡眠<0)
睡眠=2;
试一试{
睡眠;
}捕捉(中断异常e){
系统输出打印项次(“中断”);
}
beforeTime=System.currentTimeMillis();
}
}
}

应用程序在哪一点以及如何运行。做“线性搜索”?我认为最合适的动画方法是画一个进度条的功能等价物。例如,一个带边框的矩形,延伸到大部分可视区域,填充背景色。然后在该边界内填充一个较小(宽度较小)的矩形,表示到该时刻的进度。在150条记录中搜索了50条,这将填补第三条记录。百分之五十,一半。至于使用线程来完成搜索,这在很大程度上取决于你是如何使用线程来搜索的。为了更快地获得更好的帮助,请发布一个or。保持你的问题没有噪音,所以不要添加“添加答案”之类的内容。
public class LinearSearch extends JPanel{

    private final Font LABEL_FONT = new Font("courier", Font.BOLD, 30);

    private JPanel mainPanel;
    private JPanel centerPanel;
    private JPanel inputPanel;
    private JPanel drawPanel;

    private JLabel lblTitle;
    private Button btnBack;

    public LinearSearch(JPanel mainPanel) {
        this.mainPanel = mainPanel;

        setBackground(Color.WHITE);

        initialize_All();
    }

    private void initialize_All() {
        lblTitle = new JLabel("\"Linear Search\"", SwingConstants.CENTER);
        lblTitle.setFont(LABEL_FONT);

        ///Center Panel
        centerPanel = new JPanel();
        centerPanel.setLayout(new BorderLayout());

        ///Input Panel
        inputPanel = new JPanel();
        inputPanel.setLayout(new BoxLayout(inputPanel, BoxLayout.X_AXIS));


        ///Draw Panel
        drawPanel = new JPanel();
        drawPanel.setLayout(new FlowLayout());

        /// I want to add graphics on this drawPanel Jpanel

        btnBack = new Button("Back");
        btnBack.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                setVisible(false);
                removeAll();

                mainPanel.add(new CatagoriesMenu(mainPanel));
            }
        });


        setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
        setLayout(new BorderLayout(10, 10));

        add(lblTitle, BorderLayout.PAGE_START);
        add(centerPanel, BorderLayout.CENTER);
        add(btnBack, BorderLayout.PAGE_END);

        centerPanel.add(inputPanel, BorderLayout.PAGE_START);
        centerPanel.add(drawPanel, BorderLayout.CENTER);

    }
}
public class LinearSearchSimulation extends JPanel implements Runnable{

    private final int DELAY = 50;
    private JPanel mainPanel;

    int x=0, y=0;

    private Thread thread;
    private boolean threadFlag = false;

        public LinearSearchSimulation(JPanel mainPanel){
            this.mainPanel = mainPanel;
            setBackground(Color.WHITE);

        }

        public void start() {
            if (threadFlag) {
                return;
            }

            threadFlag = true;
            thread = new Thread(this);
            thread.start();
        }

        public void stop() {
            if (!threadFlag) {
                return;
            }

            threadFlag = false;
            try {
                thread.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.fillOval(x,y, 55, 55);
            g.dispose();
        }

        public void update() {

            x += 1;
            y += 1;
        }

        @Override
        public void run() {
            long beforeTime, timeDiff, sleep;

            beforeTime = System.currentTimeMillis();

            while (threadFlag) {

                update();
                repaint();

                timeDiff = System.currentTimeMillis() - beforeTime;
                sleep = DELAY - timeDiff;

                if (sleep < 0)
                    sleep = 2;
                try {
                    Thread.sleep(sleep);
                } catch (InterruptedException e) {
                    System.out.println("interrupted");
                }

                beforeTime = System.currentTimeMillis();
            }
        }

}