Hallo!
Wie einige vielleicht schon wissen, versuche ich Java zu lernen :) Das Lernen hat bei JavaScript mit viel Geduld und noch mehr Beispielen ganz gut geklappt. Das Problem bei Java ist, ist dass die Beispiele geringer werden, die man z.B. im Netz findet. Jetzt wollte ich mal einen Browser schreiben. Das ist mit Java nicht besonders schwer. Aber ich will auch ermöglichen, dass die URL der Seite per Textfield verändert werden kann. Aber das klappt leider nicht. Zudem kommt, dass ich massive Probleme mit den Layoutmanagern habe. Mein Browser sollte in etwa so aussehen:
|---------------------|
| |Textfield| |ok| |
|---------------------|
| |
| Browser |
| |
| |
Aber aussehen tut es so:
|---------------------|
| |
| |Textfield| |ok| |
Browser |
--------------------- |
Natürlich wird das komplette Fenster in zwei Teile geteilt (GridLayout), aber wie kann ich das erreichen (Welcher LayoutManager), dass das Textfield mit dem JButton nur genausoviel Platz einnimmt, wie es soll? Wenn man bei anderen Anwendungen die Fenstergröße verändert, dann wird die Tool-Leiste auch nicht größer, sondern nur z.B. das Dokument (Word) oder die Website (Firefox).
Wie kann ich für ein JPanel (Ist das für mein Vorhaben das richtige?), das das TextField und den Button enthält, eine feste Höhe angeben? Von mir aus 100px o.ä.?
Jetzt zu meinem zweiten Problem:
Wie schon klar geworden ist möchte ich ein JTextfield, in das der Anwender eine Adresse angeben kann. Diese Adresse soll dann per Klick auf den OK-Button angezeigt werden. Doch ich habe starke Probleme das Verändern der URL zu erreichen. Wie muss ich es schreiben, dass es klappt?
Hier der Quelltext mit Kommentaren:
package test;
import javax.swing.*;
import javax.swing.event.*;
import java.io.*;
import java.net.*;
import java.awt.event.*;
import java.awt.*;
class Test{
String neueSeite;
}
class Adresse{
static void SetzeURL(Test nS){
nS.neueSeite = adresse.getText();
//Hier meckert Java, weil es adresse nicht kennt. Ich weiß aber nicht, wie ich es schreiben muss, damit Java weiß was ich damit mein?!
}
}
public class JBrowserTextField extends JEditorPane implements HyperlinkListener {
JBrowserTextField( String url )
{
setEditable( false );
addHyperlinkListener( this );
try
{
setPage( new URL(url) );
}
catch ( IOException e ) { e.printStackTrace(); }
}
public void hyperlinkUpdate( HyperlinkEvent event )
{
HyperlinkEvent.EventType typ = event.getEventType();
if ( typ == HyperlinkEvent.EventType.ACTIVATED )
{
try
{
setPage( event.getURL() );
}
catch( IOException e ) {
JOptionPane.showMessageDialog( this,
"Can't follow link to "
+ event.getURL().toExternalForm(),
"Error",
JOptionPane.ERROR_MESSAGE);
}
}
}
public static void main(String[] args){
String startseite = "http://www.selfhtml.org";
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLayout(new GridLayout(2,0));
JPanel eingabe = new JPanel();
final JTextField adresse = new JTextField(startseite);
final JButton ok = new JButton("OK");
eingabe.add(adresse);
eingabe.add(ok);
f.add(eingabe);
ActionListener al = new ActionListener(){
public void actionPerformed(ActionEvent e){
Adresse neueURL = new Adresse();
JBrowserTextField( neueURL );
//Hier meckert Java wegen dem Fehler weiter oben (siehe erster Kommentar).
//Wie muss ich in diesem ActionListener Java sagen, dass ich die URL verändern will? Stimmt das wenigstens ansatzweise mit JBrowserTextField(neueURL);?
//Wie kann ich den String mit der Adresse überall verfügbar machen? Ich habe das jetzt mit mehreren Klassen "gelöst" (Test & Adresse), weil ich ein Beispiel fand, das mir wenigstens diesen Weg gezeigt hat. Sicher ist das total umständlich oder sogar falsch, aber ich weiß nicht, wie ich es anders machen kann. Habt ihr einen Tipp?
}
};
f.setSize(600,500);
f.add(new JScrollPane(new JBrowserTextField(startseite)));
f.setVisible(true);
}
}
Vielen Dank für eure Hilfe!
ciao, ww
Yet it seems that some have succeeded in finding a way which instead of leading you to a dead end offers you a way out - a way to freedom. Apparently, developing your physical abilities is like pressing harder against the wall of natural limits. And the harder you press the farther you are from true freedom which logically thinking is the direction opposite to the wall.