2012-04-05 6 views
1

Ich versuche eine Online-Version des Brettspiels RISK zu programmieren. und ich möchte JButtons auf dem Board platzieren. Also möchte ich JButtons auf einigen Bildern, aber ich kann es nicht zum Laufen bringen. Hier ist mein Code:Wie integriert man JButtons in Grafiken?

public void main(String[] args){ 
    JFrame frame = new JFrame("RISK"); 
    frame.setSize(800, 600); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 


    JPanel panel = new JPanel(); 
    panel.setLayout(null); 
    frame.add(panel); 
    JButton button = new JButton("test"); 
    button.setBounds(100, 100, 150, 150); 
    panel.add(button); 

    frame.setVisible(true); 
    frame.add(new graphics()); 
} 

public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    try{ 
     BufferedImage board = ImageIO.read(new File("board.jpg")); 
    }catch(IOException e){} 
    g.drawImage(board, 0, 0, null); 
} 

Vielen Dank im Voraus. - Ihre Antwort muss nicht auf diesen spezifischen Code verweisen, nur ein allgemeines Beispiel mit Grafiken und JButtons wäre erstaunlich!

+0

* "Brettspiel RISIKO" * Wie [dies] (http://tformers.net/i/r/Risk_M/RiskBoard.JPG)? Wenn dies keinen Aspekt des gewünschten Designs enthält, fügen Sie diese zitierten Wörter als Suchbegriffe in Ihrer bevorzugten Suchmaschine hinzu, die die Bildsuche unterstützt, und finden Sie eine, die dies tut. Es wäre sehr hilfreich, die erforderliche GUI zu erklären. –

+1

1) Für eine bessere Hilfe, post ein [SSCCE] (http://sscce.org/). 2) 'paintComponent (Grafik g) {.. BufferedImage board = ImageIO.read (..' Versuchen Sie nicht, Bilder in den Paint-Methoden zu lesen, und blockieren Sie nicht die Paint-Methode mit lang laufenden Aufgaben. Das Bild sollte sein Lesen Sie vorher und dann als Klassenattribut zwischengespeichert 3) 'frame.setSize (800, 600);' Legen Sie die bevorzugte Größe der Komponenten (falls erforderlich) und nicht die Größe des Rahmens fest. 4) 'button.setBounds (100, 100, 150, 150);' ** Verwende Layout-Manager! ** –

+0

5) 'frame.add (new graphics());' Bitte lerne die [Java-Namenskonventionen] (http : //java.sun.com/docs/books/jls/second_edition/html/names.doc.html#73307) (speziell der Fall, der für die Namen verwendet wird) für Klassen-, Methoden- und Attributnamen und verwenden Sie ihn konsistent. 6) 'catch (IOException e) {}' Tu das nicht, besonders in Code, der 'nicht funktioniert'. Verwenden Sie 'catch (IOException e) {e.printStacktrace(); } 'stattdessen. 7) 'g.drawImage (board, 0, 0, null);' Ich wette, dass ein 'graphics' Objekt ein' ImageObserver' ist. Das sollte 'g.drawImage (board, 0, 0, this);' –

Antwort

3

Sie können Bilder auf Knopf hinzufügen, wenn Sie das wünschen. Hier ist ein Beispielcode.


BufferedImage myPictur =ImageIO.read(getClass().getResourceAsStream("/resources/shoppingicon.png")); 
JButton shoppingButton = new JButton("Shopping",new ImageIcon(myPicture)); 

+0

Nein, ich möchte Grafiken und JButtons zusammen haben, zum Beispiel: um eine Schaltfläche zu haben und daneben ein Rechteck, das mit der Malmethode erstellt wurde. – user1315994

+1

Wenn Sie möchten, können Sie JLabel direkt neben JButton hinzufügen und Bild zu JLabel hinzufügen. Es ist genau wie der Code im Beispiel. – mbaydar

3

Zunächst für Online-Anwendungen speziell Web, wird Swing nicht funktionieren, wie es für Desktop-Anwendungen konzipiert ist. Wenn Sie eine Schaukel wie Web-Anwendung dann möchten, verwenden

  • Java Web Start

  • JApplet

  • GWT

jetzt für die Botton ein Hintergrundbild verwenden enthalten :

BufferedImage buferedImage; 
JButton buttonImage; 

buferedImage = ImageIO.read(getClass().getResourceAsStream("button-image-1.jpg")); 
buttonImage = new JButton("Start", new ImageIcon(buferedImage)); 
+0

* "Zunächst einmal für Online-Anwendungen speziell Web, funktioniert SWING nicht, wie es für Desktop-Anwendungen konzipiert ist." * 1) Es ist "Swing". 2) Nie von einem 'JApplet' gehört? 3) Selbst ein Swing-basierter 'JFrame', der nicht mit [Java Web Start] (http://stackoverflow.com/tags/java-web-start/info) gestartet wird, kann leicht als clientseitiger Consumer eines Webs fungieren -app. –

+0

@ Andrew Thompson aus Respekt für Ihre Arbeit – mKorbel