[英]Java Graphics not drawing anything
因此,我試圖用Java編寫一個簡單的Pong程序。 現在,它應該只打開一個窗口,顯示一個按鈕(“開始”),並在您按下按鈕時輸出到控制台。 它打開窗口,但不繪制按鈕。 但是,如果單擊我指定的區域,它會注冊您單擊的區域並打印到控制台。
這是我的代碼。
在窗口中打開的JPanel:
public class Menu extends JPanel {
Font garamond = new Font("Garamond", Font.PLAIN, 20);
public Menu() {
addMouseListener(new Mouse());
}
public void draw() {
Graphics g = getGraphics();
g.setColor(Color.BLACK);
g.drawRect(0, 0, 100, 100);
g.setFont(garamond);
g.setColor(Color.WHITE);
g.drawString("Start", 10, 10);
g.dispose();
}
用於注冊點擊的“鼠標”類:
public class Mouse extends MouseAdapter {
public void mousePressed(MouseEvent e) {
if (e.getX() >= 0 && e.getX() <= 100 && e.getY() >= 0 && e.getY() <= 100) {
Frame.buttonStart();
}
}
最后是“ Frame”類,它打開窗口並顯示面板:
public class Frame {
static JFrame frame = new JFrame("Java Pong");
public static void initialize() {
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500, 400);
frame.setLocation(100, 100);
frame.setVisible(true);
setMode("menu");
}
public static void setMode(String Mode) {
switch (Mode) {
case "menu":
Menu menu = new Menu();
frame.getContentPane().add(menu, BorderLayout.CENTER);
menu.draw();
break;
default:
break;
}
}
public static void buttonStart() {
System.out.println("yeh button pressed");
}
您應該重寫paintComponent()
以執行自定義繪圖。 在傳遞給它的Graphics
對象上繪制。
另外,您應該使用SwingUtilities.invokeAndWait()
或SwingUtilities.invokeLater()
在事件分發線程上執行Swing組件的所有操作。 這包括實例化和配置UI組件。
另外,如果您想要一個按鈕,那么使用JButton
而不是自己動手將JButton
。
編輯添加:
使用SwingUtilities.invokeAdWait()
示例:
SwingUtilities.invokeAdWait(
new Runnable() {
@Override public void run() {
// the work to be performed by the EDT goes here
Frame.frame.pack();
Frame.frame.setVisible(true);
}
}
);
只要在最初顯示GUI時使用invokeAndWait()
,您就可以在主線程中完成許多初始設置。 之后,您可能應該讓主線程死掉。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.