Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

Layout-Frage in Java

DumDum / 5 Antworten / Baumansicht Nickles

Will ein kleines Frame mit 3 Komponenten erstellen. Hab bis jetzt noch den BorderLayout.


Kann man hier irgendwie die Größe der Komponenten einstellen ?


Hab nämlich ein TextArea("Central"), ein TextField("North") und ein Button("East"), aber der Button wird einfach zu groß dargestellt.


Oder soll ich vielleicht mit nem anderen Layout arbeiten. Bin für jede Antwort dankbar.

bei Antwort benachrichtigen
vergisses DumDum „Layout-Frage in Java“
Optionen

Hi,

Du kannst Layouts schachteln. Das ContentPane bekommt bei Dir z. B. das BorderLayout.
In WEST addest Du wieder ein Panel mit z. B. einem GridLayout usw. usw.

Das Ganze ist ziemlich fummelig, aber mit der Zeit gewöhnt man sich dran
und am Ende bringen die Layoutmanager auch einiges an Vorteilen.
Gute Links über Layoutmanager:
http://java.sun.com/docs/books/tutorial/uiswing/mini/layout.html
http://www.softbear.com/people/larry/javalm.htm

Gruss, vergisses.

bei Antwort benachrichtigen
DumDum Nachtrag zu: „Layout-Frage in Java“
Optionen

danke für deine Antwort.
Ich konnt das mit den Layout leider noch nicht testen, weil ich mein Programm eigentlich hauptsächlich aus schon fertigen Componenten von JavaEditor zusammengebastelt hab. Jetzt wollt ich den Quellcode mal ein bisschen vereinfachen und übersichtlicher machen aber jetzt bekomm ich einen Fehler bei dem ich nicht weiter weiß.
Mein Problem liegt in der Methode actionPerformed. Ich will das wenn man auf Beenden klick das Programm geschloßen wird. Aber der bringt immer einen Fehler. Hab schon verschiedene Sachen wie getText usw. versucht



import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Test implements ActionListener {

JFrame frame = new JFrame("Test");
JMenuBar MenuBar = new JMenuBar();
JMenu Menu = new JMenu("Datei");
JMenuItem MenuItem1 = new JMenuItem ("Neu");
JMenuItem MenuItem2 = new JMenuItem ("Öffnen");
JMenuItem MenuItem3 = new JMenuItem ("Speichern");
JMenuItem MenuItem4 = new JMenuItem ("Beenden");
JTextArea Text = new JTextArea ("", 1, 1);
JPanel panel = new JPanel();

public void fenster () {

frame.add (MenuBar);
MenuBar.add (Menu);
Menu.add (MenuItem1);
MenuItem1.addActionListener(this);
Menu.add (MenuItem2);
MenuItem2.addActionListener(this);
Menu.add (MenuItem3);
MenuItem3.addActionListener(this);
Menu.add (MenuItem4);
MenuItem4.addActionListener(this);

Text.setText("Test");
Text.setEditable(false);
frame.add("Center",Text);

panel.setLayout(new GridLayout(1,1));
frame.getContentPane().add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800,600);
frame.setVisible(true);
}

public void actionPerformed (ActionEvent e) {
if (JMenuItem.getComponent().equals(MenuItem4))
System.exit(0);
else Text.setText("Neu");


}

public static void main(String args[]){

JFilmeVerwalter test = new JFilmeVerwalter();
test.fenster();
}
}

bei Antwort benachrichtigen
vergisses DumDum „danke für deine Antwort. Ich konnt das mit den Layout leider noch nicht testen,...“
Optionen

Hallo,

mit der Methode actionPerformed implementierst Du das Interface
ActionListener.
Als Parameter bekommst Du ein Object der Klasse ActionEvent übergeben,
welches Detailinformationen über die Aktion enthält.
So kannst Du z. B. mit der Methode getSource() ermitteln, über
welches Object das ActionEvent ausgelöst wurde.
Deine actionPerformed könnte also wie folgt aussehen:
-----schnipp----------
public void actionPerformed(ActionEvent evt)
{
Object source = evt.getSource();
if(source == MenuItem4) tuwas();
else tuwasAnderes();
}
-----schnipp----------

In Deiner Source rufst Du die nicht statische Methode
JMenuItem.getComponent()
ohne eine Instanz der Klasse JMenuItem auf.
Das sollte entweder einen Compiler Error oder eine
NullPointerException geben.

Gruss, vergisses

bei Antwort benachrichtigen
DumDum Nachtrag zu: „Layout-Frage in Java“
Optionen

Hi,
danke für deine Antwort. Hat mir sehr geholfen. Ich hab jetzt auch Das Layout einigermaßen hingekriegt. Doch jetzt hab ich auch ein neues Problem. Ich will ein Textdatei öffnen und den Inhalt in einem TextArea ausgeben.
Den folgenden Quellcode einfach ins obere Programm denken.
Der bringt mir immer einen Fehler beim Initialisieren des BufferdReaders (Fehler : "must be caught oder declared to be thrown")
Kann mir jemand helfen ?


------------------------------------------------------

import java.io.*;

File Filme = new File ("Filme.txt");
BufferedReader file_in = new BufferedReader(new InputStreamReader(new FileInputStream(Filme)));
String S;

public void actionPerformed (ActionEvent e) {
Object source = e.getSource();
if(source == MenuItem1) {
Text.setText("Neu");
}
if(source == MenuItem2) {
try {
while( (S = file_in.readLine()) != null) {
Text.setText(S);
}
file_in.close();
}
catch(IOException ioe){
ioe.printStackTrace();
}
}
if(source == MenuItem3) {
Text.setText("Speichern");
}
if(source == MenuItem4) {
System.exit(0);
}
}

bei Antwort benachrichtigen
vergisses DumDum „Hi, danke für deine Antwort. Hat mir sehr geholfen. Ich hab jetzt auch Das...“
Optionen

Hallo,

die Meldung kommt, weil Du eine Methode aufrufst, die bei Fehlern
eine Exception (warscheinlich IOException) auslöst.
Diese Exception musst Du entweder in Deiner Methode behandeln oder an den
Aufrufer Deiner Methode weiterleiten, damit der die behandeln kann.
Zum weiterleiten an den Aufrufer muss Deine Methode dann als
throws

bei Antwort benachrichtigen