Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.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在JScrollPane内渲染_Java_Rendering_Jscrollpane - Fatal编程技术网

如何在Java中直接渲染屏幕?JPanel在JScrollPane内渲染

如何在Java中直接渲染屏幕?JPanel在JScrollPane内渲染,java,rendering,jscrollpane,Java,Rendering,Jscrollpane,好吧,伙计们?如何在Java中直接在屏幕上渲染?我记得使用setPixel或setRGB来实现这一点,但有一种方法可以设置主JFrame的像素,甚至在MS Windows组件之前就可以设置ZOrder 以下是代码和*.ZIP文件: Mapa.java: package com.primedi.ig; import java.awt.Color; import java.awt.Dimension; import java.awt.HeadlessException; import java.ut

好吧,伙计们?如何在Java中直接在屏幕上渲染?我记得使用setPixel或setRGB来实现这一点,但有一种方法可以设置主JFrame的像素,甚至在MS Windows组件之前就可以设置ZOrder

以下是代码和*.ZIP文件:

Mapa.java:

package com.primedi.ig;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.HeadlessException;
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

import com.primedi.matlog.C32;
import com.primedi.tech.Arquivo;

public class Mapa extends JFrame {

    private static final long serialVersionUID = 1L;
    public String nomeMapa = null;
    private JPanel panMapa;
    private JScrollPane brPanMapa;

    public static Arquivo arqMapa = null;

    Render r = null;
    public Mapa(String nomeMapa){
        this.nomeMapa = nomeMapa;

        inicializarJanela();

        try {
            r = new Render();
            r.setBounds(658, 10, 640, 480);
        } catch (HeadlessException e) {
            e.printStackTrace();
        }

        getContentPane().add(r);
        setVisible(true);
        processosCons();
    }
    private void criarJanela(){
        //setTitle("zMeck - Início");
        setSize(1352, 594);
        getContentPane().setLayout(null);
        setResizable(false);
        setLocationRelativeTo(null);
        setUndecorated(true);
        getContentPane().setBackground(Color.BLACK);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
    private void criarPaineis(){
        panMapa = new JPanel();
        panMapa.setLayout(null);
        panMapa.setBackground(Color.BLACK);
    }
    private void criarBarrasDeRolagem(){
        brPanMapa = new JScrollPane(panMapa);
        brPanMapa.setBounds(0, 0, 658, 498);
        brPanMapa.getHorizontalScrollBar().setUnitIncrement(32);
        brPanMapa.getVerticalScrollBar().setUnitIncrement(32);

        arqMapa = new Arquivo("mapas", "teste.pmp");
        arqMapa.carregarArquivo();
        Dimension d = new Dimension((arqMapa.linhas.get(0).length() * 32), arqMapa.linhas.size() * 32);
        panMapa.setPreferredSize(d);
    }
    private void adicionarComponentes(){
        getContentPane().add(brPanMapa);
    }
    private void inicializarJanela(){
        criarJanela();
        criarPaineis();
        criarBarrasDeRolagem();
        adicionarComponentes();
        //carregarInfosMapa();
    }
    /*private void carregarInfosMapa(){
        arqMapa = new Arquivo("mapas", nomeMapa + ".pmp");
        arqMapa.carregarArquivo();
        Dimension d = new Dimension((arqMapa.linhas.get(0).length() * 32), arqMapa.linhas.size() * 32);
        panMapa.setPreferredSize(d);
        panMapa.setVisible(true);
        for(int j = 0; j < alcanceY; j++){
            for(int i = 0; i < alcanceX; i++){
                tilesImaginarios[i][j] = new JLabel(new ImageIcon("tiles/tile0.PNG"));
                tilesImaginarios[i][j].setBounds((i * 32) + 658, j * 32, 32, 32);
                getContentPane().add(tilesImaginarios[i][j]);
            }
        }
    }*/

    public static int start = 0;
    private void processosCons(){
        Timer t = new Timer();
        t.schedule(new TimerTask() {
            int posInicialScrollX = 0;
            int posInicialScrollY = 0;

            public void run() {
                if(start == 0){
                    start = 1;
                }

                if(brPanMapa.getViewport().getViewPosition().x != posInicialScrollX){
                    posInicialScrollX = brPanMapa.getViewport().getViewPosition().x;

                    Render.OFFSET_X = C32.pixelPara32(posInicialScrollX);
                    r.repaint();
                    return;
                }

                if(brPanMapa.getViewport().getViewPosition().y != posInicialScrollY){
                    posInicialScrollY = brPanMapa.getViewport().getViewPosition().y;
                    System.out.println("hello");
                    Render.OFFSET_Y = C32.pixelPara32(posInicialScrollY);
                    r.repaint();
                    return;
                }
            }
        }, 33, 33);
    }
}
package com.primedi.ig;
导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.HeadlessException;
导入java.util.Timer;
导入java.util.TimerTask;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
导入com.primedi.matlog.C32;
进口com.primedi.tech.Arquivo;
公共类Mapa扩展了JFrame{
私有静态最终长serialVersionUID=1L;
公共字符串nomeMapa=null;
私人JPanel panMapa;
私人JScrollPane brPanMapa;
公共静态Arquivo arqMapa=null;
呈现r=null;
公共Mapa(字符串名称为Mapa){
this.nomeMapa=nomeMapa;
inicializarJanela();
试一试{
r=新渲染();
r、 挫折(658,10640480);
}捕捉(无头例外e){
e、 printStackTrace();
}
getContentPane().add(r);
setVisible(真);
processosCons();
}
私人空间criarJanela(){
//setTitle(“zMeck-Início”);
设置大小(1352594);
getContentPane().setLayout(null);
可设置大小(假);
setLocationRelativeTo(空);
未装饰的设置(真实);
getContentPane().setBackground(颜色为.BLACK);
setDefaultCloseOperation(关闭时退出);
}
私有void criarPaineis(){
panMapa=newjpanel();
panMapa.setLayout(空);
panMapa.setBackground(颜色:黑色);
}
私有无效criarBarrasDeRolagem(){
brPanMapa=新的JScrollPane(panMapa);
brPanMapa.setBounds(0,0658498);
brPanMapa.getHorizontalScrollBar().setUnitIncrement(32);
brPanMapa.getVerticalScrollBar().setUnitIncrement(32);
arqMapa=新的Arquivo(“mapas”,“teste.pmp”);
arqMapa.carregarequivo();
维度d=新维度((arqMapa.linhas.get(0.length()*32),arqMapa.linhas.size()*32);
panMapa.setPreferredSize(d);
}
私有无效组件(){
getContentPane().add(brPanMapa);
}
私密的空虚{
criarJanela();
criarPaineis();
criarbarrasderograme();
己二酸组分();
//carregarInfosMapa();
}
/*私人无效carregarInfosMapa(){
arqMapa=新的Arquivo(“mapas”,nomeMapa+“.pmp”);
arqMapa.carregarequivo();
维度d=新维度((arqMapa.linhas.get(0.length()*32),arqMapa.linhas.size()*32);
panMapa.setPreferredSize(d);
panMapa.setVisible(真);
对于(int j=0;j
Render.java:

package com.primedi.ig;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.HeadlessException;
import java.awt.Image;
import java.awt.Toolkit;

import javax.swing.JPanel;

import com.primedi.tech.Arquivo;

public class Render extends JPanel {
    private static final long serialVersionUID = 1L;

    public static int OFFSET_X = 0;
    public static int OFFSET_Y = 0;

    public Render() throws HeadlessException {
        super();
    }

    @Override
    protected void paintComponent(Graphics g) {
        if(Mapa.start == 1){
            Graphics2D g2d = (Graphics2D)g;

            Arquivo arq = new Arquivo("mapas", "teste.pmp");
            arq.carregarArquivo();
            for(int j = 0; j < 15; j++){
                for(int i = 0; i < 20; i++){
                    System.out.println(OFFSET_X);
                    Image img1 = Toolkit.getDefaultToolkit().getImage("tiles/tile" + "" + arq.linhas.get(j + OFFSET_Y).charAt(i + OFFSET_X) + ".PNG");
                    g2d.drawImage(img1, i * 32, j * 32, this);
                }
            }
        }
    }
}
package com.primedi.ig;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.HeadlessException;
导入java.awt.Image;
导入java.awt.Toolkit;
导入javax.swing.JPanel;
进口com.primedi.tech.Arquivo;
公共类呈现扩展了JPanel{
私有静态最终长serialVersionUID=1L;
公共静态整数偏移量_X=0;
公共静态整数偏移量_Y=0;
public Render()抛出HeadlessException{
超级();
}
@凌驾
受保护组件(图形g){
如果(Mapa.start==1){
Graphics2D g2d=(Graphics2D)g;
Arquivo arq=新的Arquivo(“mapas”,“teste.pmp”);
arq.carregarequivo();
对于(int j=0;j<15;j++){
对于(int i=0;i<20;i++){
系统输出打印LN(偏移量X);
Image img1=Toolkit.getDefaultToolkit();
g2d.drawImage(img1,i*32,j*32,this);
}
}
}
}
}
C32.java:

package com.primedi.matlog;

public class C32 {
    public static int pixelPara32(int pixelV){
        int aprox = 0;
        int finalx = 0;
        for(aprox = 0; aprox < pixelV; aprox++);
        for(int i = 0; i < aprox; i = i + 32){
            finalx++;
        }
        return finalx;
    }
}
package com.primedi.matlog;
公共级C32{
公共静态int-pixelPara32(int-pixelV){
intaprox=0;
int finalx=0;
for(aprox=0;aprox
Arquivo.java:

package com.primedi.tech;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

public class Arquivo {

    public ArrayList<String> linhas = new ArrayList<String>();

    public String pasta;
    public String arquivo;

    public Arquivo(String pasta, String arq){
        this.pasta = pasta;
        arquivo = arq;
    }

    public void carregarArquivo(){
        File file = new File(pasta + "/" + arquivo);

        BufferedReader br;
        try {
            br = new BufferedReader(new FileReader(file));

            String linha;
            while ((linha = br.readLine()) != null) {
                linhas.add(linha);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
package com.primedi.tech;
导入java.io.BufferedReader;
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.io.FileReader;
导入java.io.IOException;
导入java.util.ArrayList;
公共级阿基沃{
public ArrayList linhas=新数组