Hi,
ich möchte in einem JFrame unter anderem eine überschriebene JComponent (MyComponent) anzeigen. In dem JComponent zeichne ich selbst ein Labyrinth.
Ich habe in dem JFrame insgesamt 4 JPanels. Der erste enthält die anderen drei. Mit diesem verwende ein BoxLayout.
Die anderen drei unterteilen dann den JFrame in einen oberen, mittleren und unteren Teil.
Im mittleren Teil sind ein JTextArea und MyComponent. MyComponent wird aber nicht angezeigt.
Ich nehme an, dass der BoxLayout-Manager das Problem ist. Der verträgt sich vermutlich nicht mit der Art wie ich das Zeichnen mache.
Muss ich den LayoutManager ganz rausnehmen und die Positionen der einzelnen Komponenten manuell angeben oder lässt sich das besser machen? Oder hab ich einen anderen Fehler gemacht?
Ich habe sowohl bei google als auch hier im Forum gesucht, komme aber einfach nicht drauf.
PS: Lässt sich ein Labyrinth eigentlich auch besser darstellen als mit Linien zeichnen.
MainFrame:
MyComponent:
Test:
Edit: da war noch eine andere test-klasse im test...
ich möchte in einem JFrame unter anderem eine überschriebene JComponent (MyComponent) anzeigen. In dem JComponent zeichne ich selbst ein Labyrinth.
Ich habe in dem JFrame insgesamt 4 JPanels. Der erste enthält die anderen drei. Mit diesem verwende ein BoxLayout.
Die anderen drei unterteilen dann den JFrame in einen oberen, mittleren und unteren Teil.
Im mittleren Teil sind ein JTextArea und MyComponent. MyComponent wird aber nicht angezeigt.
Ich nehme an, dass der BoxLayout-Manager das Problem ist. Der verträgt sich vermutlich nicht mit der Art wie ich das Zeichnen mache.
Muss ich den LayoutManager ganz rausnehmen und die Positionen der einzelnen Komponenten manuell angeben oder lässt sich das besser machen? Oder hab ich einen anderen Fehler gemacht?
Ich habe sowohl bei google als auch hier im Forum gesucht, komme aber einfach nicht drauf.
PS: Lässt sich ein Labyrinth eigentlich auch besser darstellen als mit Linien zeichnen.
MainFrame:
Java:
import javax.swing.*;
import java.awt.event.*;
public class MainFrame extends JFrame implements ActionListener{
static JLabel header;
static JTextArea area;
static MyComponent map;
static JTextField input;
static JButton button;
static JPanel gesamt;
static JPanel oben;
static JPanel mitte;
static JPanel unten;
public MainFrame(){
super("MainFrame");
gesamt = new JPanel();
gesamt.setLayout(new BoxLayout(gesamt, BoxLayout.PAGE_AXIS));
this.add(gesamt);
this.setResizable(true);
setSize(750,500);
setLocation(250,300);
start();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public void setMap(int h, int w, int[][][] cave){
map = new MyComponent(h,w, cave);
map.setVisible(true);
map.repaint();
mitte.add(map);
mitte.repaint();
setVisible(true);
}
private void start(){
oben = new JPanel();
oben.setVisible(true);
mitte = new JPanel();
mitte.setVisible(true);
unten = new JPanel();
unten.setVisible(true);
header = new JLabel("MainFrame: ");
area = new JTextArea("... \n",16 ,28 );
area.setEditable(false);
input = new JTextField("");
input.setColumns(20);
input.setEditable(true);
button = new JButton("klick");
button.addActionListener(this);
oben.add(header);
mitte.add(area);
unten.add(input);
unten.add(button);
gesamt.add(header);
gesamt.add(mitte);
gesamt.add(unten);
}
public void actionPerformed(ActionEvent e){
}
}
Java:
import javax.swing.*;
import java.awt.*;
public class MyComponent extends JComponent {
int hoehe;
int weite;
int start_x = 450;
int start_y = 100;
int feld[][][];
static final int ABSTAND = 75;
public MyComponent(int h, int w, int[][][] f){
hoehe = h;
weite = w;
feld = f;
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
int x = start_x + ABSTAND/2,
y = start_y + ((hoehe-1)*ABSTAND)+(ABSTAND/2);
for(int i = 0; i != hoehe; i++){
for(int j = 0; j != weite; j++){
if(feld[i][j][0] == 1){
g.drawLine(x - ABSTAND/2, y - ABSTAND/2,x + ABSTAND/2 , y - ABSTAND/2);
}
if(feld[i][j][1] == 1){
g.drawLine(x + ABSTAND/2, y + ABSTAND/2,x + ABSTAND/2 , y - ABSTAND/2);
}
if(feld[i][j][2] == 1){
g.drawLine(x - ABSTAND/2, y + ABSTAND/2,x + ABSTAND/2 , y + ABSTAND/2);
}
if(feld[i][j][3] == 1){
g.drawLine(x - ABSTAND/2, y - ABSTAND/2,x - ABSTAND/2 , y + ABSTAND/2);
}
x += ABSTAND;
}
x = start_x + ABSTAND/2;
y -= ABSTAND;
}
}
}
Java:
public class Test {
public static void main(String[] args) {
MainFrame mf = new MainFrame();
int [][][] a = {{{1,0,1,1,0,0},{1,0,1,0,0,0},{0,1,1,0,0,0}},
{{0,0,1,1,0,1},{1,0,1,0,0,0},{0,1,0,0,0,0}},
{{1,1,0,1,0,0},{1,0,1,1,1,0},{1,1,0,0,0,0}}};
mf.setMap(3,3,a);
}
}
Zuletzt bearbeitet: