while(break)
Newbie
- Registriert
- Aug. 2013
- Beiträge
- 4
Hallo Forumgemeinde,
Ich hab ein Problem mit nem GridBagLayout und hoffe, dass jemand hier einen Tipp für mich hat.
Das Bild anbei zeigt das Problem. Eigentlich sollte nur ein so ein roter Turm gezeigt werden, das ActionPanel wird aber ein zweites Mal, etwas versetzt gezeichnet.. Und auch das JTextField bei 0, 0 ist Unsinn.
Fände es toll, wenn jemand eine Ahnung hat, wo das Problem liegen könnte.
Hier der Code:
Frame:
Panel:
Beste Grüße
while(break)
Ich hab ein Problem mit nem GridBagLayout und hoffe, dass jemand hier einen Tipp für mich hat.
Das Bild anbei zeigt das Problem. Eigentlich sollte nur ein so ein roter Turm gezeigt werden, das ActionPanel wird aber ein zweites Mal, etwas versetzt gezeichnet.. Und auch das JTextField bei 0, 0 ist Unsinn.
Fände es toll, wenn jemand eine Ahnung hat, wo das Problem liegen könnte.
Hier der Code:
Frame:
Code:
public class MainFrame extends JFrame implements KeyListener
{
TetrisController controller;
ActionPanel aPanel;
InfoPanel iPanel;
public MainFrame(TetrisController controller)
{
this.controller = controller;
initMainFrame();
}
public void initMainFrame()
{
this.setTitle("Tetris");
try
{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
SwingUtilities.updateComponentTreeUI(this);
}catch(Exception e)
{
System.err.println("Could not load LookAndFeel");
}
this.setMinimumSize(new Dimension(650, 800));
this.setResizable(false);
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
this.setLocation((int) dim.getWidth()/2-this.getWidth()/2, (int) (dim.getHeight()/2-this.getHeight()/2));
GridBagLayout glayout = new GridBagLayout();
this.setLayout(glayout);
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.WEST;
gbc.gridheight = 1;
gbc.gridwidth = 1;
gbc.weightx = 1;
gbc.weighty = 1;
gbc.fill = GridBagConstraints.BOTH;
gbc.gridx = 0;
gbc.gridy = 0;
// gbc.ipadx = 400;
// gbc.ipady = 800;
aPanel = new ActionPanel(controller);
this.add(aPanel, gbc);
gbc.anchor = GridBagConstraints.NORTH;
gbc.gridheight = 1;
gbc.gridwidth = 1;
gbc.weightx = 0;
gbc.weighty = 0;
gbc.fill = GridBagConstraints.BOTH;
gbc.gridx = 1;
gbc.gridy = 0;
iPanel = new InfoPanel();
iPanel.setBackground(Color.DARK_GRAY);
this.add(iPanel, gbc);
gbc.ipadx = 200;//-iPanel.getWidth();
this.addKeyListener(this);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.pack();
this.revalidate();
this.repaint();
this.setVisible(true);
}
public Dimension getPreferredSize()
{
return new Dimension(650, 800);
}
public ActionPanel getaPanel()
{
return aPanel;
}
public InfoPanel getiPanel()
{
return iPanel;
}
@Override
public void keyPressed(KeyEvent arg0)
{
aPanel.keyPressed(arg0);
}
@Override
public void keyReleased(KeyEvent arg0)
{}
@Override
public void keyTyped(KeyEvent arg0)
{}
}
Panel:
Code:
public class ActionPanel extends JPanel implements KeyListener
{
Dimension dim = new Dimension(400, 800);
TetrisController controller;
int aktuellePositionX;
int aktuellePositionY;
int borderXleft = 0;
int borderXright = dim.width;
int borderYbottom;
boolean commandDirectionRight = false;
boolean commandDirectionLeft = false;
ElementeGitter egitter;
public ActionPanel(TetrisController controller)
{
this.controller = controller;
this.setBackground(Color.red);
this.addKeyListener(this);
this.setPreferredSize(dim);
egitter = new ElementeGitter(dim.width/40, dim.height/40);
}
public void paint (Graphics g)
{
for (int yy = 0; yy < (dim.height / 40); yy++)
{
for (int xx = 0; xx < (dim.width / 40); xx++)
{
if (egitter.getElemente()[xx][yy] != null)
{
g.setColor(egitter.getElemente()[xx][yy].c);
g.fill3DRect(xx*40, yy*40, egitter.getElemente()[xx][yy].getSize().width, egitter.getElemente()[xx][yy].getSize().height, true);
}
}
}
/**
* löscht Verlauf von oben nach unten ohne Richtungswechsel
* */
if (aktuellePositionY/40 >= 0)
{
if (egitter.getElemente()[aktuellePositionX/40][aktuellePositionY/40] == null)
{
g.clearRect(aktuellePositionX, aktuellePositionY-40, 40, 40);
}
}
/**
* löscht Verlauf von links nach rechts
* */
if (commandDirectionRight)
{
if (egitter.getElemente()[aktuellePositionX/40-1][aktuellePositionY/40] == null)
{
g.clearRect(aktuellePositionX-40, aktuellePositionY-1, 40, 41);
commandDirectionRight = false;
}
}
/**
* löscht Verlauf von rechts nach links
* */
else if (commandDirectionLeft)
{
if (egitter.getElemente()[aktuellePositionX/40+1][aktuellePositionY/40] == null)
{
g.clearRect(aktuellePositionX+40, aktuellePositionY-1, 40, 41);
commandDirectionLeft = false;
}
}
System.out.println("ACTIONPANEL - aktuelle Postion: " + aktuellePositionX + " " + aktuellePositionY);
g.fill3DRect(aktuellePositionX, aktuellePositionY, 40, 40, true);
// int xPoly[] = {0, 250, 325, 375, 450, 275, 400};
// int yPoly[] = {0, 100, 125, 225, 250, 375, 800};
// Polygon poly = new Polygon(xPoly, yPoly, xPoly.length);
// g.drawPolygon(poly);
}
public Dimension getPreferredSize()
{
return dim;
}
public void setX(int x)
{
this.aktuellePositionX = x;
}
public int getX()
{
return aktuellePositionX;
}
public int getY()
{
return aktuellePositionY;
}
public void setY(int y)
{
this.aktuellePositionY = y;
}
@Override
public void keyPressed(KeyEvent arg0)
{
if (arg0.getKeyCode() == 37 && aktuellePositionX > 0 && aktuellePositionX < dim.width)
{
System.out.println("left pressed");
commandDirectionLeft = true;
commandDirectionRight = false;
if (this.egitter.getElemente()[aktuellePositionX/40-1][aktuellePositionY/40+1] == null)
{
this.setX(aktuellePositionX-40);
}
}
else if (arg0.getKeyCode() == 39)
{
int elementBreite = 40;
System.out.println("right pressed");
commandDirectionRight = true;
commandDirectionLeft = false;
if (aktuellePositionX < dim.width-40)
{
if (this.egitter.getElemente()[aktuellePositionX/40+1][aktuellePositionY/40+1] == null)
{
this.setX(aktuellePositionX+40);
}
}
}
else if (arg0.getKeyCode() == 40)
{
System.out.println("down pressed");
controller.getEngine().incCtr(40);
}
}
@Override
public void keyReleased(KeyEvent arg0)
{
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent arg0)
{
// TODO Auto-generated method stub
}
public ElementeGitter getEgitter()
{
return egitter;
}
public void addToGitter(Element e, int x, int y)
{
egitter.addToGitter(e, x, y);
}
}
Beste Grüße
while(break)