paint

Status
Nicht offen für weitere Antworten.

T!b3r!|_|$

Mitglied
hi, habe nun das problem, dass ich durch ein component, dem frame den spielernamen hinzufüge ( mit drawString). danach habe ich den frame mit validate() geupdatet. wenn ich allerdings zuerst spielername1 und dann durch die slebe componente spielername2 hinzufüge und dann validate() schreibe, wird nur spielername 2 angezeigt. wie kann ich es machen, dass beide angezeigt werden??? hier mal der quelltext:

die Componente:
Code:
import javax.swing.*;
import java.awt.*;
public class blackJack_graphicComponent extends JComponent
{
static String text;
static int x;
static int y;

	public void paintComponent( Graphics g){
    g.drawString(text, x, y);
    
    }

und hier die klasse mit dem frame:

Code:
import java.awt.*;
import java.io.*;
import java.awt.event.*;
import javax.swing.*;
public class MenuOne extends JFrame 
{
    static String PlayerName1;
    static String PlayerName2;
    static CheckboxGroup cgroup1;
    static JButton button1 = new JButton("Play");
    static JTextField TextPlayer1 = new JTextField("Player1");
    static JTextField TextPlayer2 = new JTextField("Player2");
    static Checkbox checkbox_single, checkbox_multi;
    
    public MenuOne()
    {
        super("Options");
        Label fill1, fill2, fill3, fill4, fill5, fill6, fill7, fill8, fill9, fill10;

       setSize(300,300);
       
       setResizable(false);
       getContentPane().setLayout(new GridLayout(3,3));
       getContentPane().add(fill1 = new Label());
       getContentPane().add(fill2 = new Label("Namen:"));
       getContentPane().add(fill3 = new Label());
       Menu1 Panel1 = new Menu1();
       Menu2 Panel2 = new Menu2();
       button1.setBackground(Color.BLACK);
       button1.setForeground(Color.WHITE);

       button1.addActionListener(new ActionListener()
       {
           public void actionPerformed(ActionEvent e)
           {
              if((cgroup1.getSelectedCheckbox() == checkbox_single))
              {
                  PlayerName1 = TextPlayer1.getText();
                  blackJack.game_pvpc();
                  blackJack_graphicComponent.x = 37;
                  blackJack_graphicComponent.y = 37;
                  blackJack_graphicComponent blackJack_graphiccomponent = new blackJack_graphicComponent();
                  blackJack_graphicComponent.text = PlayerName1;
                  blackJack_grafik.f1.getContentPane().add( blackJack_graphiccomponent );
                  setVisible(false);
                  blackJack_grafik.f1.validate();
                 
              }
              else if((cgroup1.getSelectedCheckbox() == checkbox_multi))
              {
                  PlayerName1 = TextPlayer1.getText();   //<---
                  PlayerName2 = TextPlayer2.getText();   //<---
                  blackJack.game_pvp();                         //<---
                  blackJack_graphicComponent.x = 37;    //<---
                  blackJack_graphicComponent.y = 37;    //<---
                  blackJack_graphicComponent blackJack_graphiccomponent = new blackJack_graphicComponent();
                  blackJack_graphicComponent.text = PlayerName1;    //<---
                  blackJack_grafik.f1.getContentPane().add( blackJack_graphiccomponent ); /* f1 ist der frame in der klasse blackJack_grafik*/
                  blackJack_graphicComponent.x = 700;
                  blackJack_graphicComponent.y = 37;
                  blackJack_graphicComponent.text = PlayerName2;
                  blackJack_grafik.f1.getContentPane().add( blackJack_graphiccomponent );
                  setVisible(false);
                  blackJack_grafik.f1.validate();     //und wenn ich das ausführe, wird nur PlayerName2 angezeigt
                 
              }
               
           }
       });
       getContentPane().add(Panel1);
       getContentPane().add(Panel2);
       getContentPane().add(fill4 = new Label());
       getContentPane().add(fill5 = new Label());
       getContentPane().add(button1);
       getContentPane().add(fill6 = new Label());
       setVisible(true);
       
        
    }
    
        
    
    public void itemStateChanged(ItemEvent e){
        if(e.getItemSelectable() == checkbox_single){
            System.out.println("es geht");
        }
    }
    
    public static void main(String args[])
    {
        MenuOne menuone = new MenuOne();
        
        
    }
}

class Menu1 extends Panel
{
    Menu1()
    {
        MenuOne.cgroup1 = new CheckboxGroup();
        add(MenuOne.checkbox_single = new Checkbox("Singleplayer",MenuOne.cgroup1, true));
        add(MenuOne.checkbox_multi = new Checkbox("Multiplayer",MenuOne.cgroup1, false));
       
    }
}
class Menu2 extends Panel
{
    Menu2()
    {
        MenuOne.TextPlayer1.setBackground(Color.BLACK);
        MenuOne.TextPlayer1.setForeground(Color.WHITE);
        MenuOne.TextPlayer2.setBackground(Color.BLACK);
        MenuOne.TextPlayer2.setForeground(Color.WHITE);

        add(MenuOne.TextPlayer1);
        add(MenuOne.TextPlayer2);
    }
}
 
B

Beni

Gast
Zuerst mal: überleg dir wie das ganze Aufgebaut ist.
Zuerst weisst du blackJack den Spielernamen 1 zu, danach demselben blackJack Spielernamen 2.
Natürlich überschreibt Nr. 2 den ersten Namen.

Du kannst entweder deine Blackjack-Component erweitern, so dass sie zwei Namen anzeigen kann, oder du musst 2 Instanzen benutzen (das letztere ist das einfachere).

Code:
public class MenuOne{
  private blackJack_graphicComponent blackJack1, blackJack 2;
  ...
}

Wenn du es noch allgemeiner halten willst, kannst du mit einem Array arbeiten...


P.S. wieso benutzt du überall "static"? Die Bedeutung von static ist, dass diese Variablen nur einmal im Programm vorkommen, unabhängig von einer Instanz der Klasse, in der sie definiert wurden.
Aber wenn du nun mehrere Objekte derselben Klasse haben möchtest, haben trotzdem alle immer dieselben Variablen, dass ist nicht so gut, weil es eigentlich keinen Sinn macht.

siehe auch hier und hier.

Mehr Sinn macht sowas:
Die Variablen sind auch gleich als "privat" definiert, denn ausser der BlackJack-Component muss niemand wissen, was in diesen Variablen steht.
siehe auch
Code:
public class blackJack_graphicComponent extends JComponent
{
  private String text;
  private int x;
  private int y;

  public void paintComponent( Graphics g){
    g.drawString(text, x, y);   
  }

  public void setText( String text ){ this.text = text; }
  public void setLocation( int x, int y ){
    this.x = x;
    this.y = y;
  }
}

P.P.S. Und vermische nicht AWT und Swing, ansonsten passiert dir noch sowas

mfg Beni
 

T!b3r!|_|$

Mitglied
hm....also ich hab das jetzt mal so ausprobiert. allerdings bekomme ich eine fehlermeldung beim compillieren von blackJack_MenuOne: "non-static method setLocation(int, int) cannot be referenced from a static context blackJack_graphicComponent.setLocation(37,37);"

hier mal wie ich es gemacht habe:

Code:
/**
 * Write a description of class MenuOne here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
import java.awt.*;
import java.io.*;
import java.awt.event.*;
import javax.swing.*;
public class MenuOne extends JFrame 
{
    static String PlayerName1;
    static String PlayerName2;
    static CheckboxGroup cgroup1;
    static JButton button1 = new JButton("Play");
    static JTextField TextPlayer1 = new JTextField("Player1");
    static JTextField TextPlayer2 = new JTextField("Player2");
    static Checkbox checkbox_single, checkbox_multi;
    
    public MenuOne()
    {
        super("Options");
        Label fill1, fill2, fill3, fill4, fill5, fill6, fill7, fill8, fill9, fill10;

       setSize(300,300);
       
       setResizable(false);
       getContentPane().setLayout(new GridLayout(3,3));
       getContentPane().add(fill1 = new Label());
       getContentPane().add(fill2 = new Label("Namen:"));
       getContentPane().add(fill3 = new Label());
       Menu1 Panel1 = new Menu1();
       Menu2 Panel2 = new Menu2();
       button1.setBackground(Color.BLACK);
       button1.setForeground(Color.WHITE);

       button1.addActionListener(new ActionListener()
       {
           public void actionPerformed(ActionEvent e)
           {
              if((cgroup1.getSelectedCheckbox() == checkbox_single))
              {
                  PlayerName1 = TextPlayer1.getText();
                  blackJack.game_pvpc();
                  blackJack_graphicComponent.setLocation(37, 37);
                  blackJack_graphicComponent.setText(PlayerName1);
                  blackJack_grafik.f1.getContentPane().add( blackJack_graphiccomponent );
                  setVisible(false);
                  blackJack_grafik.f1.validate();
                 
              }
              else if((cgroup1.getSelectedCheckbox() == checkbox_multi))
              {
                  PlayerName1 = TextPlayer1.getText();
                  PlayerName2 = TextPlayer2.getText();
                  blackJack.game_pvp();
                  blackJack_graphicComponent.setLocation(37, 37);
                  blackJack_graphicComponent.setText(PlayerName1);
                  blackJack_grafik.f1.getContentPane().add( blackJack_graphiccomponent );
                  blackJack_graphicComponent.steLocation(700, 37);
                  blackJack_graphicComponent.setText(PlayerName1);
                  blackJack_grafik.f1.getContentPane().add( blackJack_graphiccomponent );
                  setVisible(false);
                  blackJack_grafik.f1.validate();
                 
              }
               
           }
       });
       getContentPane().add(Panel1);
       getContentPane().add(Panel2);
       getContentPane().add(fill4 = new Label());
       getContentPane().add(fill5 = new Label());
       getContentPane().add(button1);
       getContentPane().add(fill6 = new Label());
       setVisible(true);
       
        
    }
    
        
    
    public void itemStateChanged(ItemEvent e){
        if(e.getItemSelectable() == checkbox_single){
            System.out.println("es geht");
        }
    }
    
    public static void main(String args[])
    {
        MenuOne menuone = new MenuOne();
        
        
    }
}

class Menu1 extends Panel
{
    Menu1()
    {
        MenuOne.cgroup1 = new CheckboxGroup();
        add(MenuOne.checkbox_single = new Checkbox("Singleplayer",MenuOne.cgroup1, true));
        add(MenuOne.checkbox_multi = new Checkbox("Multiplayer",MenuOne.cgroup1, false));
       
    }
}
class Menu2 extends Panel
{
    Menu2()
    {
        MenuOne.TextPlayer1.setBackground(Color.BLACK);
        MenuOne.TextPlayer1.setForeground(Color.WHITE);
        MenuOne.TextPlayer2.setBackground(Color.BLACK);
        MenuOne.TextPlayer2.setForeground(Color.WHITE);

        add(MenuOne.TextPlayer1);
        add(MenuOne.TextPlayer2);
    }
}

Code:
/**
 * Write a description of class blackJack_graphicComponent here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
import javax.swing.*;
import java.awt.*;
public class blackJack_graphicComponent extends JComponent
{
  private String text;
  private int x;
  private int y;

  public void paintComponent( Graphics g){
    g.drawString(text, x, y);   
  }

  public void setText( String text ){ this.text = text; }
  public void setLocation( int x, int y ){
    this.x = x;
    this.y = y;
  }
}
 
R

Roar

Gast
:shock:
wie soll das ohne eine instanz von deinem compponent gehen??
bevor du irgendwas mit deinem copmonent machen kannst musst du erstma ne instanz davon anlegen

tz deutsche schule *mecker*
 
B

Beni

Gast
Du musst das Wörtchen "new" benutzen.

z.B. so:
Code:
              else if((cgroup1.getSelectedCheckbox() == checkbox_multi))
              {
                  PlayerName1 = TextPlayer1.getText();
                  PlayerName2 = TextPlayer2.getText();
                  
                  blackJack_graphicComponent bgComponent1 = new blackJack_graphicComponent();
                  blackJack_graphicComponent bgComponent2 = new blackJack_graphicComponent();
                  
                  blackJack.game_pvp();
                  bgComponent1.setLocation(37, 37);
                  bgComponent1.setText(PlayerName1);
                  blackJack_grafik.f1.getContentPane().add( bgComponent1 );
                  bgComponent2.steLocation(700, 37);
                  bgComponent2.setText(PlayerName1);
                  blackJack_grafik.f1.getContentPane().add( bgComponent2 );
                  setVisible(false);
                  blackJack_grafik.f1.validate();
                 
              }

P.S. nicht AWT und Swing mischen! siehe FAQ
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H 2D-Grafik Problem mit Paint AWT, Swing, JavaFX & SWT 1
frager2345 Warum paintComponent hier und nicht paint AWT, Swing, JavaFX & SWT 2
U Was ist der Unterschied von paint und paincomponent? AWT, Swing, JavaFX & SWT 3
L 2D-Grafik Swing paint|paintComponent AWT, Swing, JavaFX & SWT 2
krgewb 2D-Grafik paint-Methode wird zu oft ausgeführt AWT, Swing, JavaFX & SWT 5
S Zeichen ohne paint-Methode AWT, Swing, JavaFX & SWT 2
J Swing Wann brauche ich @Override vor der paint()-Methode? AWT, Swing, JavaFX & SWT 1
G Eine paint-Methode, 2 Welten? AWT, Swing, JavaFX & SWT 3
H Swing + Paint: Mehrere Objekte zeichnen lassen AWT, Swing, JavaFX & SWT 3
A paint-Methode aufrufen AWT, Swing, JavaFX & SWT 13
Xanny 2D-Grafik Beginner! Probleme mit Swing, Gprahics class und paint AWT, Swing, JavaFX & SWT 13
L Berechnungen in paint AWT, Swing, JavaFX & SWT 8
S Grafik: Programm kommt nicht zur paint()-Methode AWT, Swing, JavaFX & SWT 6
W Paint-Methode in anderer Klasse funktioniert nicht AWT, Swing, JavaFX & SWT 7
S 2 Paint-Methoden in einer Klasse ? AWT, Swing, JavaFX & SWT 2
J zwei Paint methoden in einer Klasse AWT, Swing, JavaFX & SWT 3
P Paint und paintComponent AWT, Swing, JavaFX & SWT 12
F 2D-Grafik Was ruft die Paint - Methode auf ? AWT, Swing, JavaFX & SWT 2
S JButton u. Label auf paint-Methode AWT, Swing, JavaFX & SWT 1
S 2 paint-Methoden in einer Klasse ? AWT, Swing, JavaFX & SWT 2
S Paint Methode ohne implements JPanel AWT, Swing, JavaFX & SWT 1
S Farbe ändern bei der paint-Methode AWT, Swing, JavaFX & SWT 5
J ActionListener soll auf paint() Methode zugreifen AWT, Swing, JavaFX & SWT 1
J Problem mit der paint Methode AWT, Swing, JavaFX & SWT 0
Junb 2D-Grafik paint() Methode bugt? AWT, Swing, JavaFX & SWT 2
C JFrame paint ohne hintergrund nutzen AWT, Swing, JavaFX & SWT 6
I Paint-Methode von nicht statischen Objekten aufrufen AWT, Swing, JavaFX & SWT 3
A Swing Paint mit Button Clear den Hintergrund säubern um wieder zeichnen zu können AWT, Swing, JavaFX & SWT 2
K 2D-Grafik Paint - Wie binde ich repaint ein? AWT, Swing, JavaFX & SWT 8
D JSlider "laggt" nach überschreiben der paint methode AWT, Swing, JavaFX & SWT 2
S paint() verzögern AWT, Swing, JavaFX & SWT 9
K AWT begrenzte anzahl paint aufrufe AWT, Swing, JavaFX & SWT 6
B Infolabel Probleme mit Paint() ? AWT, Swing, JavaFX & SWT 8
L AWT paint mit ArrayList und Iterator AWT, Swing, JavaFX & SWT 3
Furtano AWT paint braucht ein Graphics Objekt ? AWT, Swing, JavaFX & SWT 2
L Swing 64bit Problem mit paint/paintComponent AWT, Swing, JavaFX & SWT 7
A Paint Methode externer auruf AWT, Swing, JavaFX & SWT 5
T JFrame und paint() AWT, Swing, JavaFX & SWT 5
B Ablauf der paint-Methoden von JComponents AWT, Swing, JavaFX & SWT 20
J AWT Methode paint() AWT, Swing, JavaFX & SWT 4
F 2D-Grafik Hostkomponentengröße in paint AWT, Swing, JavaFX & SWT 2
L JFrame an Paint-Inhalt anpassen AWT, Swing, JavaFX & SWT 6
E Warum übermalt paint das ganze Fenster? AWT, Swing, JavaFX & SWT 15
X Bild via FileChooser in paint-Methode laden AWT, Swing, JavaFX & SWT 2
T paint() wird nicht aufgerufen AWT, Swing, JavaFX & SWT 8
M JMenuBar im Applet und paint AWT, Swing, JavaFX & SWT 9
G paint-Methode kopiert GUI AWT, Swing, JavaFX & SWT 14
H paint überlappend AWT, Swing, JavaFX & SWT 5
E paint AWT, Swing, JavaFX & SWT 3
H Swing paint() von JPanel wird nicht aufgerufen AWT, Swing, JavaFX & SWT 10
L AWT Paint(g) im Listener aufrufen AWT, Swing, JavaFX & SWT 2
S JCheckBox Paint AWT, Swing, JavaFX & SWT 7
F AWT Probleme mit der paint() methode AWT, Swing, JavaFX & SWT 2
C Unterschiedlicher Aufruf der paint() Methode ? (AWT/Swing) AWT, Swing, JavaFX & SWT 2
L Problem mit paint Methode und Bild AWT, Swing, JavaFX & SWT 7
F Swing Paint mit Canvas Element AWT, Swing, JavaFX & SWT 35
K AWT paint wird nicht aufgerufen AWT, Swing, JavaFX & SWT 7
R LayoutManager Image Paint + Text Panel AWT, Swing, JavaFX & SWT 10
F paint-Methode des JComboboxEditorComponent AWT, Swing, JavaFX & SWT 2
S Threads in einen Frame zeichnen lassen (Paint()?!) AWT, Swing, JavaFX & SWT 5
radiac Swing JFrame - paint(g) - FrameObjects bei activeRendering AWT, Swing, JavaFX & SWT 3
I AWT paint() in MouseEvent aufrufen klappt nicht AWT, Swing, JavaFX & SWT 8
T paint() wird zweimal ausgeführt AWT, Swing, JavaFX & SWT 6
hdi Swing JLabel & paint-Methode gemixt - wie schlimm wirklich? AWT, Swing, JavaFX & SWT 5
N Paint methode anhalten und neustarten AWT, Swing, JavaFX & SWT 5
H AWT Wann ist paint() fertig? AWT, Swing, JavaFX & SWT 7
R [gelöst]Fenster schließen - trotz Endlosschleife in der Paint-Methode? AWT, Swing, JavaFX & SWT 3
W Steuerelemente und paint() in einem JPanel AWT, Swing, JavaFX & SWT 3
M Allgemeines zur paint Methode AWT, Swing, JavaFX & SWT 5
M AWT Component/Canvas erzeugt unerwünschten Rahmen bei paint AWT, Swing, JavaFX & SWT 3
T Dialog ohne Frame, direktes paint in graphics AWT, Swing, JavaFX & SWT 5
G Probleme mit repaint / paint AWT, Swing, JavaFX & SWT 6
A paint()-Methode für Videoexport nutzen AWT, Swing, JavaFX & SWT 2
K repaint() ruft paint() nicht auf AWT, Swing, JavaFX & SWT 14
J Canvas / paint() AWT, Swing, JavaFX & SWT 2
bugmenot paint() verzögert ausgeführt? AWT, Swing, JavaFX & SWT 4
S paint() in anderen Methoden AWT, Swing, JavaFX & SWT 5
J getFontMetrics außerhalb von paint(Graphics g) AWT, Swing, JavaFX & SWT 8
D Paint() Methode aus einer anderen Klasse aufrufen AWT, Swing, JavaFX & SWT 6
H paint verwenden AWT, Swing, JavaFX & SWT 3
S java.awt.Component und paint() AWT, Swing, JavaFX & SWT 4
A Paint funktioniert nicht richtig AWT, Swing, JavaFX & SWT 7
L Dynamisches Ändern der Größe in JPanel mit paint()-Methode AWT, Swing, JavaFX & SWT 8
G JScrollPane mit "paint" scrollt nicht AWT, Swing, JavaFX & SWT 2
C paint-Methode überschreiben AWT, Swing, JavaFX & SWT 19
hdi meine paint-methode macht faxen? AWT, Swing, JavaFX & SWT 21
T Variable Menge an Bildern außerhalb paint() zeichnen? AWT, Swing, JavaFX & SWT 2
G Paint und Buttons AWT, Swing, JavaFX & SWT 8
G JFrame JPanel und Paint(Image)? AWT, Swing, JavaFX & SWT 6
S Programm aufgrund von paint() zu langsam AWT, Swing, JavaFX & SWT 18
G paint() wird aufgerufen, aber nicht angezeigt AWT, Swing, JavaFX & SWT 10
G 2x Graphics in einer paint() miteinander verbinden AWT, Swing, JavaFX & SWT 11
M Probleme mit paint() aus JFrame AWT, Swing, JavaFX & SWT 2
G paint() Methode aus anderer klasse aufrufen? AWT, Swing, JavaFX & SWT 6
G Frage zum paint Prozess AWT, Swing, JavaFX & SWT 3
D JPanel und Paint AWT, Swing, JavaFX & SWT 2
B Gui und Zeichnen (paint ? ) AWT, Swing, JavaFX & SWT 4
L Anzeigen von fotos: ImageIcon oder BufferedImage + paint() ? AWT, Swing, JavaFX & SWT 5
G Frage zur paint-Methode (AWT) AWT, Swing, JavaFX & SWT 9
B Button anzeigen bei überschrieber paint() AWT, Swing, JavaFX & SWT 12

Ähnliche Java Themen

Neue Themen


Oben