title image


Smiley Re: JTabbedPane und JTextarea
Hi



Hab mal den Code aus dem ersten Post compiliert (was ich schon früher gemacht hätte, wenn er einfach compilierbar gewesen wäre ;-)). Wenn ich deine Absichten richtig verstanden habe, dann haben da einfach nur ein paar LayoutManager gefehlt.



import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.border.*;



class Test {

public static void main(String args[]) {

ShowOutputFrame.buildFrame("foo");

}





}



class ShowOutputFrame extends JPanel { //implements ActionListener {



public static void buildFrame(String input)

{

JFrame ausgabeFrame = new JFrame();

ausgabeFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

ausgabeFrame.setSize(800,800);

ausgabeFrame.setTitle("XML-File");



ausgabeFrame.getContentPane().add(new ShowOutputFrame(input));



ausgabeFrame.setVisible(true);

}



public ShowOutputFrame(String input)

{

JPanel jp = new JPanel(new GridLayout(1,1));

jp.add(new TabbedPane_Panel(input));

this.setLayout(new GridLayout(1,1)); // hier

add(jp);

}

}



class TabbedPane_Panel extends JPanel

{

public TabbedPane_Panel(String input)

{

JTabbedPane tp = new JTabbedPane();

tp.addTab("Source",new Source_Panel(input));

tp.addTab("Tree", new JTextField("Hallo"));

setLayout(new GridLayout(1,1)); // hier

add(tp);

}

}



class Source_Panel extends JPanel

{

private JButton bSaveAs;

private String doc;

private String sF = "";



public Source_Panel(String input)

{

doc = input;



/*

StringWriter sw = new StringWriter();

try

{ // Aufruf der Builder-Methode, um String in XMLDoc umzuwandeln

Document formattedXML = str2xml.useBuilder4XML(input);

XMLOutputter xmlresult = new XMLOutputter();

xmlresult.setFormat(Format.getPrettyFormat());

xmlresult.output(formattedXML, sw);

sF= sw.getBuffer().toString();

sw.close();

} catch(Exception e){};

*/



// Hier wirds interessant!

JPanel jp = new JPanel(new BorderLayout()); // hier nicht null // Hier rein Textarea u Buttons

JTextArea textarea = new JTextArea(){public void scrollRectToVisible(Rectangle r){};}; // um den Focus am Textanfang zu halten

textarea.setText(sF);

textarea.setBorder( new TitledBorder("Die automatisch erzeugte sF-Beispieldatei"));



// ScrollBars im Text-Feld

JScrollPane scrollPane = new JScrollPane(textarea);



// Box fuer Buttons

Box buttonBox = new Box(BoxLayout.X_AXIS);

JButton bEdit = new JButton("Bearbeiten");

bEdit.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e) {

//EditingsF.buildMask(doc);

}

});



bSaveAs = new JButton("Speichern");

bSaveAs.setActionCommand("Speichern");

// ActionListener fehlt noch

bSaveAs.setEnabled(false);

buttonBox.add(bEdit);

buttonBox.add(bSaveAs);



// Add Components

jp.add(scrollPane, BorderLayout.CENTER); // hier wegen BorderLayout

jp.add(buttonBox, BorderLayout.SOUTH);



setLayout(new GridLayout(1,1)); // hier

add(jp);

}

}







Dabei ist mir aber aufgefallen, daß einige Klassen und JPanels scheinbar überflüssig sind. Ich weiß nicht, ob das daher kommt, daß du nur die relevanten Teile eingefügt hast, aber eine Klasse wie "TabbedPane_Panel", die wirklich NUR ein Panel ist, das ein Tabbed Pane enthält, ist ziemlich überflüssig. Bei den anderen Klassen waren einige Panels nicht notwendig, weil all diese Klassen ja selbst schon Panels SIND.





Nicht gut:





class MyClass extends JPanel

{

public MyClass()

{

// Man braucht kein neues Panel - "this" IST schon ein Panel!

JPanel p = new JPanel(new GridLayout(3,1));



p.add(new JButton("bla"));

p.add(new JButton("foo"));

p.add(new JButton("bar"));



add(p); // 'this' hat hier noch kein Layout - aber soll 'p' enthalten!

}

}





besser:





class MyClass extends JPanel

{

public MyClass()

{

// Die Komponenten werden DIREKT zu "this" hinzugefügt (was ja ein Panel ist!)

this.setLayout(new GridLayout(3,1));

add(new JButton("bla"));

add(new JButton("foo"));

add(new JButton("bar"));

}

}







Insgesamt würde (glaube ich) nichts dagegen sprechen, das, was du gepostet hast, so zu machen, aber (WICHTIG:) Welche der dabei gemachten Vereinfachungen im Rahmen dessen, was dabei insgesamt am Ende rauskommen soll, sinnvoll sind, kannst nur du entscheiden!



// OutputFrame.java

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.border.*;





class OutputFrame extends JFrame { //implements ActionListener {



public static void main(String args[]) {

new OutputFrame("foo");

}



public OutputFrame(String input)

{

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

setSize(800,800);

setTitle("XML-File");

getContentPane().setLayout(new GridLayout(1,1));



// Hier das TabbedPane erstellen, das das SourcePanel enthält

JTabbedPane tp = new JTabbedPane();

tp.addTab("Source",new SourcePanel(input));

tp.addTab("Tree", new JTextField("Hallo"));

getContentPane().add(tp);



setVisible(true);

}

}





class SourcePanel extends JPanel

{

private JButton bSaveAs;

private String doc;

private String sF = "";



public SourcePanel(String input)

{

doc = input;



/*

StringWriter sw = new StringWriter();

try

{ // Aufruf der Builder-Methode, um String in XMLDoc umzuwandeln

Document formattedXML = str2xml.useBuilder4XML(input);

XMLOutputter xmlresult = new XMLOutputter();

xmlresult.setFormat(Format.getPrettyFormat());

xmlresult.output(formattedXML, sw);

sF= sw.getBuffer().toString();

sw.close();

} catch(Exception e){};

*/



// Hier wirds interessant!

setLayout(new BorderLayout()); // Hier rein Textarea u Buttons

JTextArea textarea = new JTextArea(){public void scrollRectToVisible(Rectangle r){};}; // um den Focus am Textanfang zu halten

textarea.setText(sF);

textarea.setBorder( new TitledBorder("Die automatisch erzeugte sF-Beispieldatei"));



// ScrollBars im Text-Feld

JScrollPane scrollPane = new JScrollPane(textarea);



// Box fuer Buttons

Box buttonBox = new Box(BoxLayout.X_AXIS);

JButton bEdit = new JButton("Bearbeiten");

bEdit.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e) {

//EditingsF.buildMask(doc);

}

});



bSaveAs = new JButton("Speichern");

// ActionListener fehlt noch

bSaveAs.setEnabled(false);

buttonBox.add(bEdit);

buttonBox.add(bSaveAs);



// Add Components

add(scrollPane, BorderLayout.CENTER);

add(buttonBox, BorderLayout.SOUTH);

}

}







bye



geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: