簡體   English   中英

Java圖形未繪制任何內容

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

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