簡體   English   中英

如何將JPanel添加到JFrame

[英]How to add JPanel to a JFrame

我是Java的初學者,我有一個目標要完成: 在此處輸入圖片說明

這是我的部分代碼:

公共類試用版擴展了JFrame {

public static final int WIDTH = 800;
public static final int HEIGHT = 600;
public static final int SCALE = 3;

private BufferedImage backBuffer;

public KeyboardInput input;
private Stage stage;
public static Trial Trial;
public static String message = "";
private Object Object;
private Message MessageBox;

public void init() {
    this.Trial = this;
    input = new KeyboardInput();
    this.addWindowListener(new WinListener());
    this.setSize(WIDTH, HEIGHT);
    this.setLocationRelativeTo(null);
    this.setResizable(false);
    this.setUndecorated(false);
    this.setVisible(true);
    this.addKeyListener(input);
    client = new TrialClient(SERVER_IP, this);
    MessageBox = new Message(username);
    backBuffer = new BufferedImage(WIDTH * SCALE, HEIGHT * SCALE, BufferedImage.TYPE_INT_RGB);
}

public Stage getStage() {
    return stage;
}

public class WinListener extends WindowAdapter {

    @Override
    public void windowClosing(WindowEvent e) {
        disconnect();
        System.exit(0);
    }

}


private Font font = new Font("Munro Small", Font.PLAIN, 96);
private Font font2 = new Font("Munro Small", Font.PLAIN, 50);
private Font fontError = new Font("Munro Small", Font.PLAIN, 25);
private int op = 0;


public void updateMenu() {
    if (input.up.isPressed()) {
        input.up.toggle(false);
    } else if (input.down.isPressed()) {
        input.down.toggle(false);
    } else if (input.enter.isPressed() && op == 0) {
    } else if (input.enter.isPressed() && op == 1) {
        System.exit(0);
    }
}


public void drawMenu() {
    Graphics g = getGraphics();
    Graphics bbg = backBuffer.getGraphics();
    bbg.setFont(font);
    bbg.setColor(Color.white);

    bbg.drawString("Sample", 189, 180);
    bbg.setFont(font2);
    if (op == 0) {
        bbg.setColor(Color.red);
        bbg.drawString("Start", 327, 378);
    }

    g.drawImage(backBuffer, 0, 0, this);
}

public void draw() {
    Graphics g = getGraphics();
    Graphics bbg = backBuffer.getGraphics();
    bbg.setColor(Color.black);
    bbg.fillRect(0, 0, WIDTH, HEIGHT);
    stage.drawStage(bbg, this);
    for (Object t : stage.getPlayers()) {
        t.draw(bbg, SCALE, this);
    }
    g.drawImage(backBuffer, 0, 0, this);
}


public void drawLogin() {
    Graphics g = getGraphics();
    Graphics bbg = backBuffer.getGraphics();
    bbg.setColor(Color.black);
    bbg.fillRect(0, 0, 800, 600);
    bbg.setColor(Color.red);
    bbg.setFont(fontError);
    bbg.drawString(message, 100, 100);
    bbg.setFont(font2);
    bbg.setColor(Color.white);
    bbg.drawString("Username", 284, 254);
    bbg.setColor(Color.red);
    bbg.drawString(username, 284, 304);
    g.drawImage(backBuffer, 0, 0, this);
}



public class StringWait extends Thread {

    public void run() {
        while (true) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException ex) {
            }
        }
    }
}

public void start() {
    init();
    while (true) {
       ...
    }
}

public static void main(String[] args) {
    Trial g = new Trial();
    g.start();
}

}

如何在JFrame中聲明Jpanel? 還是有一種方法可以在創建JFrame之后在其他窗口中創建Jpanel? 我在netbeans中這樣做。

我認為問題是線

backBuffer = new BufferedImage(WIDTH * SCALE, HEIGHT * SCALE, BufferedImage.TYPE_INT_RGB);

請對其進行修改,以使其不會占據整個區域。

只需聲明一個變量JPanel並將其添加到Frame中即可。

JPanel panel = new JPanel();
this.setContentPane(panel);

在init方法外聲明變量創建jpanel,將組件添加到面板中創建jscrollpane,將面板作為視圖集jscrollpane作為框架的contentpane參見以下示例

public class Game extends JFrame {

public Game() throws HeadlessException {
    setSize(100, 100);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
    setResizable(false);
    setVisible(true);
}

private javax.swing.JButton jButton1;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextArea jTextArea1;
private javax.swing.JTextField jTextField1;

void init() {

    jButton1 = new JButton("jButton1");

    jTextArea1 = new JTextArea("jTextArea1");
    jTextField1 = new JTextField("jTextField1");
    JPanel panel2 = new JPanel();
    panel2.setLayout(new FlowLayout());
    panel2.add(jTextField1);
    panel2.add(jButton1);
    jPanel1 = new JPanel();
    jPanel1.setLayout(new BoxLayout(jPanel1, BoxLayout.Y_AXIS));
    jPanel1.add(jTextArea1);
    jPanel1.add(panel2);
    jScrollPane1 = new JScrollPane(jPanel1);
    setContentPane(jScrollPane1);
    System.out.println("init");
    revalidate();
}

public static void main(String[] args) throws InterruptedException {
    Game g = new Game();
    //wait just to find the effect of revalidate
    Thread.sleep(1000);

    g.init();
}

}

您需要添加

JPanel panel = new JPanel();

和init()內的其他聲明,然后確保BufferedImage函數不重疊在上面

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM