[英]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.