Jak umieścić program osadzony w JPanel w oknie JFrame,tak abym mógł dodać menu itp. Próbowałem to robić w NetBeans przy uzyciu generowanych JFrame ale się poddałem.
W skrócie chciałbym aby ta plansza rysowała się tak jakby w JFrame z menu u góry.
Program w JPanel:
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.Rectangle2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class SquareGrid extends JPanel
{
SquareRx[][] squares;
final int szerokoscRamkiOkna = 10;
final int wierszeSiatki = 30;
final int kolumnySiatki = 30;
boolean isSelected;
public SquareGrid()
{
addMouseListener(sluchaczMyszki);
}
protected void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
if(squares == null)
{
initSquares();
}
for(int i = 0; i < wierszeSiatki; i++)
{
for(int j = 0; j < kolumnySiatki; j++)
{
squares[i][j].draw(g2);
}
}
}
private void initSquares()
{
squares = new SquareRx[wierszeSiatki][kolumnySiatki];
int w = getWidth();
int h = getHeight();
double xInc = (double)(w - 2*szerokoscRamkiOkna)/kolumnySiatki;
double yInc = (double)(h - 2*szerokoscRamkiOkna)/wierszeSiatki;
for(int i = 0; i < wierszeSiatki; i++)
{
double y = szerokoscRamkiOkna + i*yInc;
for(int j = 0; j < kolumnySiatki; j++)
{
double x = szerokoscRamkiOkna + j*xInc;
Rectangle2D.Double r = new Rectangle2D.Double(x, y, xInc, yInc);
squares[i][j] = new SquareRx(i, j, r);
}
}
}
private MouseListener sluchaczMyszki = new MouseAdapter()
{
public void mousePressed(MouseEvent e)
{
Point wspolrzedneKursoraMyszki = e.getPoint();
double xInc = (double)(getWidth() - 2*szerokoscRamkiOkna)/kolumnySiatki;
double yInc = (double)(getHeight() - 2*szerokoscRamkiOkna)/wierszeSiatki;
int row = (int)((wspolrzedneKursoraMyszki.y-szerokoscRamkiOkna)/yInc);
int col = (int)((wspolrzedneKursoraMyszki.x-szerokoscRamkiOkna)/xInc);
isSelected = squares[row][col].isSelected();
squares[row][col].setSelected(!isSelected);
repaint();
}
};
public static void main(String[] args)
{
SquareGrid test = new SquareGrid();
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(test);
f.setSize(700,700);
f.setVisible(true);
f.setResizable(false);
}
}
class SquareRx
{
private final int row;
private final int col;
Rectangle2D.Double rect;
Color color = new Color(140,200,160);
Color bgColor = Color.orange;
Color selColor = Color.red;
private boolean selected = false;
public SquareRx(int r, int c, Rectangle2D.Double rect)
{
row = r;
col = c;
this.rect = rect;
}
public void draw(Graphics2D g2)
{
g2.setPaint(selected ? selColor : bgColor);
g2.fill(rect);
g2.setPaint(color);
g2.draw(rect);
}
public void setSelected(boolean selected)
{
this.selected = selected;
}
public boolean isSelected()
{
return selected;
}
}