Hallo,
ich möchte auf einem JPanel etwas Zeichnen, und dieses JPanel soll dann zusammen mit einem weiteren JPanel auf einem JFrame dargestellt werden. Alles zusammen soll durch den GridBagLayout Manager verwaltet werden.
Der relevante Code:
Zum Verständniss was gezeichnet wird:
Das soll sozusagen ein Raster werden.
Mein Problem ist dass ich beide JPanels nicht angezeigt bekomme, oder einfach irgend einen Fehler
habe dass der erst garnicht auf das JPanel gamecontent zeichnet, sondern nur direkt auf den JFrame.
Das JPanel menu wird problemlos und korrekt angezeigt.
Vielen Dank im vorraus
Vannelle
ich möchte auf einem JPanel etwas Zeichnen, und dieses JPanel soll dann zusammen mit einem weiteren JPanel auf einem JFrame dargestellt werden. Alles zusammen soll durch den GridBagLayout Manager verwaltet werden.
Der relevante Code:
Java:
public Nonomat() {
maincontent = new JFrame("Fenstertitel");
GridBagLayout gbl = new GridBagLayout();
GridBagLayout gblm = new GridBagLayout();
maincontent.setLayout(gblm);
[...]
gamecontent = new JPanel();
gamecontent.add(new Raster()); //<-- Hier soll auf das Panel gezeichnet werden
gamecontent.setOpaque(true);
gamecontent.setVisible(true);
gamecontent.setSize(377,377);
menu = new JPanel();
menu.setLayout(gbl);
menu.setBorder(BorderFactory.createEmptyBorder(3,3,3,3));
menu.setOpaque(true);
[...]
addMain(maincontent,gblm,((JPanel)menu),0,0,0,0,0,0);
addMain(maincontent,gblm,((JPanel)gamecontent),150,140,100,100,1.0,0);
//Werte sind nur durch rumprobieren entstanden, haben keine Aussage, da es ja nicht funktioniert.
/*Das JPanel gamecontent dass das gezeichnete Raster enthalten soll, wird nicht angezeigt.
Wenn ich das Layout des maincontent allerdings von gbl auf default setzt, dann wird entweder
das Menü oder das Raster angezeigt, je nach Reihenfolge, was so aussehen würde:
maincontent.add(newRaster());
*/
maincontent.setJMenuBar(menuBar);
maincontent.setLocation(100, 100);
maincontent.setPreferredSize(new Dimension(627,500));
maincontent.setVisible(true);
maincontent.pack();
}
static void addComponent(Container menu, GridBagLayout gbl, Component c,int x, int y, int
width, int height, double weightx, double weighty) {
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = x;
gbc.gridy = y;
gbc.gridwidth = width;
gbc.gridheight = height;
gbc.weightx = weightx;
gbc.weighty = weighty;
gbl.setConstraints(c, gbc);
menu.add(c);
}
static void addMain(Container maincontent, GridBagLayout gblm, Component c,int x, int y, int
width, int height, double weightx, double weighty) {
GridBagConstraints gbcm = new GridBagConstraints();
gbcm.fill = GridBagConstraints.VERTICAL;
gbcm.anchor = GridBagConstraints.FIRST_LINE_START;
gbcm.gridx = x;
gbcm.gridy = y;
gbcm.gridwidth = width;
gbcm.gridheight = height;
gbcm.weightx = weightx;
gbcm.weighty = weighty;
gblm.setConstraints(c, gbcm);
maincontent.add(c);
}
Zum Verständniss was gezeichnet wird:
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.JPanel;
public class Raster extends Canvas {
public static final int IDEAL_WIDTH = 377;
public static final int IDEAL_HEIGHT = 377;
public void paint(Graphics g) {
g.setColor(Color.BLACK);
g.fillRect(230,60, IDEAL_WIDTH, IDEAL_HEIGHT);
// Array das dargestellt wird
Color values[][] = new Color[18][18];
for (int i = 0; i < 10; i++){
for(int j = 0; j < 9; j++)
values[i][j] = Color.WHITE;
}
values[1][1] = Color.RED;
values[5][2] = Color.BLUE;
// Ankerpunkt für das Raster
int x_start = 230;
int y_start = 60;
// Raster zeichnen
for (int i = 0; i < 18; i++) {
for (int j = 0; j < 18; j++) {
g.setColor(values[i][j]);
g.fillRect(x_start + i * 20, y_start + j * 20, 20, 20);
y_start += 1;
}
y_start = 60;
x_start += 1;
}
}
}
Mein Problem ist dass ich beide JPanels nicht angezeigt bekomme, oder einfach irgend einen Fehler
habe dass der erst garnicht auf das JPanel gamecontent zeichnet, sondern nur direkt auf den JFrame.
Das JPanel menu wird problemlos und korrekt angezeigt.
Vielen Dank im vorraus
Vannelle
Zuletzt bearbeitet: