Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
habe ein fragen. Ich will mein Fenster in zwei teile teilen. Ich weis aber nicht mit welchen Layout typ ich das hinkriege.
das ergebnis soll so aussehen:
..........................................
: :
: :
: :
: :
: :
: :
: :
: :
:........................................:
: :
:........................................:
mit dem GridLayout(2,0) teil er das ding genau in der hälte, dass sollst aber nicht!
hmm.... hab es nicht besonders gut erklärt nehme ich an. Aber ich hoffe mir kann trozdem wer helfen!
ich habe schon so viel versucht. sämtlich Layout Manager oder setLayout(null). Aber es klappt nichts.
ich liste mal den code
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.image.BufferedImage;
import javax.imageio.*;
import java.io.*;
public class Kalaha extends JFrame implements ActionListener {
// Anfang Variablen
private ButtonGroup menuSettingBeginnerModus;
BufferedImage bild; //Referenz auf das aktuelle Bild
BildLeinwand leinwand, startbild; //JPanel zum Anzeigen des Bildes
// Ende Variablen
//inner Klasse zum Überschreiben von paintComponent()
class BildLeinwand extends JPanel{
public void paintComponent(Graphics g){
if(bild!=null)
g.drawImage(bild, 0, 0, this);
}
}
public Kalaha(final String title) {
// Frame-Initialisierung
super(title);
startbild = new BildLeinwand();
getContentPane().add(startbild, BorderLayout.CENTER);
addWindowListener(new WindowAdapter() {
public void windowOpened(final WindowEvent evt){ startBild(); }
public void windowClosing(final WindowEvent evt) { System.exit(0); }
});
final int frameWidth = 810;
final int frameHeight = 580;
setSize(frameWidth, frameHeight);
Container cp = getContentPane();
// Anfang Komponenten
//Menüleiste
JMenuBar menuLeiste = erzeugeMenueLeiste();
setJMenuBar(menuLeiste);
//Eine Leinwand anlegen (von JPanel abgeleitet)
leinwand = new BildLeinwand();
cp.add(leinwand, BorderLayout.CENTER);
// Ende Komponenten
setVisible(true);
}
// Stellt die Menüleiste zusammen
private JMenuBar erzeugeMenueLeiste(){
....
return menueLeiste;
}
// Anfang Ereignisprozeduren
public void actionPerformed(ActionEvent e){
if(e.getActionCommand().equals("Beenden"))
{ int auswahl = JOptionPane.showConfirmDialog(this,
"Möchten Sie wirklich das Spiel beenden?", "Spiel beenden?",
JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE);
if(auswahl==JOptionPane.YES_OPTION)
System.exit(0);
}
if(e.getActionCommand().equals("Neues Spiel")){
bildOeffnen();
}
}
// Ende Ereignisprozeduren
//Methode zum öffnen des aktuellen Bildes
protected void bildOeffnen(){
try{
bild = ImageIO.read(new File("images/brett_o.png"));
leinwand.repaint();
}catch(IOException e){
bild = null;
}
}
protected void startBild(){
try{
bild = ImageIO.read(new File("images/kalaha.png"));
leinwand.repaint();
}catch(IOException e){
bild = null;
}
}
public static void main(final String[] args) {
new Kalaha("Kalaha");
}
}
Es funkt ja soweit zu beginn, also mit dem öffnen wird das startbild geladen.
dann wenn ich über <Spiele> <neues Spiel> klicken kommt ein neues Bild, aber diese Bild soll nun dich die gesamte fläsche belegen, sonder ich will unter einen Streifen frei lassen, wo ich Labels etc. einbauen kann (für Spielstände und Infos)
du solltest folgendes probieren... so wie das ausschaut, möchtest du oben etwas darstellen und unten so ne art buttonview basteln die fest ist:
baue für jede darstellung eine eigene view (... extends jpanel) die du dann in einem "mainjpanel" mit borderlayout zusammenfügst. Dort nimmst du den oberen teil als Borderlayout.CENTER und das, was du unten darstellen möchtest als Borderlayout.SOUTH. Welchen Layoutmanager die Komponenten haben ist egal. Unten könnten z. b. die buttons mit nem flowlayout zusammengesetzt sein.
Wichtig ist nur, das die views wieder in einem jpanel mit layoutmanager zusammengebaut werden. Dadurch erhältst du noch nebenbei eine schöne Gliederung, die dein code übersichtlicher macht.
Noch ein Tip: der Mainframe wird grad von dir für alles mögliche hergenommen.
lagere den mainframe noch aus als eigene klasse und baue dann eine art "runner"
der nichts anderes tut als den mainframe zu instanzieren und zu starten.
z. B. so
Code:
public class MainApp {
public static void main(String[] args) {
TestFrame frame = new TestFrame();
frame.setTitle("DirectoryTree");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
der testframe (uhm, jetzt mainframe..) schaut dann ungefähr so aus:
Code:
public class MainFrame extends JFrame {
...
public MainFrame() {
listeners = new ArrayList();
MainFrameController controller = new MainFrameController();
BorderLayout layout = new BorderLayout();
getContentPane().setLayout(layout);
main = new SqlBrowserView();
getContentPane().add(main, BorderLayout.CENTER);
main.addActionListener(controller);
JMenuBar bar = new JMenuBar();
JMenu file = new JMenu("File");
bar.add(file);
JMenuItem item1 = new JMenuItem("open");
file.add(item1);
file.addSeparator();
JMenuItem item2 = new JMenuItem("Exit");
file.add(item2);
item2.addActionListener(controller);
item2.setActionCommand(AllActionCommands.ACTION_EXIT);
getContentPane().add(bar, BorderLayout.NORTH);
setSize(1000, 500);
addWindowListener(controller);
}
...
}
Die hier eingefügte SqlBrowserView ist genau so eine view mit oben ein paar eingabefeldern, in der mitte ein freies
feld und unten eine buttonview (das wäre dann bei dir die sache mit den spielständen, etc.) -> alles eigene views die
von jpanel abgeleitet sind.
Code:
...
public SqlBrowserView() {
listeners = new ArrayList();
head = new KopfzeileView();
browser = new BrowserView();
fuss = new FussZeileView();
BorderLayout layout = new BorderLayout();
setLayout(layout);
add(head, BorderLayout.NORTH);
add(browser, BorderLayout.CENTER);
add(fuss, BorderLayout.SOUTH);
fuss.addActionListener(new SqlBrowserController());
}
...
so, ich hoffe, ich hab deine frage nich völlig falsch verstanden und konnte dir ein wenig weiterhelfen......