Java Applet
-
Ich möchte ein Java Applet schreiben, dass die folgenden Eigenschaften und Funktionen hat:
- Eine Oberfläche, auf der ein Memo, 5 RadioButtons und 4 normale Buttons sind
- Im Memo wird eine Aufgabe angezeigt, hinter den RadioButtons stehen verschiedene Lösungen, von denen eine richtig ist
- Ein Button startet die Funktion, die überprüft, ob man die richtige Lösung ausgewählt hat
- Ein anderer lässt in dem Memo die Erlkärung / den Rechenweg anzeigen
- Mit den letzten beiden lassen sich die Aufgaben durchschaltenDas ist alles! In C++ hätte ich das in 10 min zusammengebastelt, aber das kann man nun mal nicht in Webseiten einbauen
Jetzt probier ich schon eine halbe Woche rum, ohne wirklich Fortschritte zu machen. Die Probleme: Ich habe einen schlechten Editor und kenne die Namen der ganzen Java Funktionen nicht. Dazu kommen Probleme der "lässt sich weder erklären noch reproduzieren" Art o_OKann mir hier irgendwer helfen?
Der erste Schritt wäre, einen geeigneten Editor zu finden (möglichst einen, wo man sich eine GUI zusammenklicken kann). Hat da wer einen Tipp?
-
Eclipse oder NetBeans sind zwei gute IDEs, die auch einen GUI-Designer mitbringen. Da du dich anscheinend mit GUI - Programmierung nicht auskennst, solltest du mal auf java.sun.com unter Tutorials das Swing-Tut durchlesen, dort wird hauptsächlich auf das javax.swing.* Package eingegangen.
Für ein wenig Asche findest du auch jemanden, der dir das programmiert, wenn du gar keinen Plan hast.
-
Hab mir NetBeans runtergeladen.
die auch einen GUI-Designer mitbringen
omg, das hab ich überlesen o_O
Jetzt hab ich mir die Sachen doch selber zusammengeschrieben...
Zwei Probleme:
1. Ich habe ein JTextArea und möchte es mit ScrollBars versehen. Mein Versuch:txtLog = new JTextArea("PhyNet Aufgaben"); add(txtLog); txtLog.setBounds(5, 5, 590, 145); txtLog.setEditable(false); JScrollPane scrollPane = new JScrollPane(txtLog, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
Statt mit ScrollBars wird das Textfeld jetzt aber gar nicht mehr angezeigt. Was ist da falsch?
2. In meiner Klasse CExercise habe ich ein String Array:
private String sSolution[];
Im Konstruktor von CExercise möchte ich es initialisieren:
public CExercise() { String sSolution[] = new String[5]; for (int i=0; i<5; i++) { sSolution[i] = new String(); sSolution[i] = ""; } }
Das scheint aber falsch zu sein, denn wenn ich später auf ein Element von sSolution zugreifen möchte, kommt eine NullPointerException. Was muss ich hier ändern?
-
Jetzt hab ich mir die Sachen doch selber zusammengeschrieben...
Egal, ich schreib meine GUIs immer von Hand
Zu der JTextArea ein kleines Beispiel:
JPanel pcenter0 = null; JScrollPane jScrollPane1 = null; JTextArea jTextArea1 = null; getContentPane().add(pcenter0 = new JPanel(new BorderLayout()),"Center"); pcenter0.add(jScrollPane1 = new JScrollPane(), "Center"); jScrollPane1.setViewportView(jTextArea1 = new JTextArea()); jTextArea1.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.LOWERED)); jTextArea1.setTabSize(4); jTextArea1.setFont(new java.awt.Font("Courier", 0, 14)); jTextArea1.setCaretColor(Color.red); jTextArea1.setLineWrap(true); jTextArea1.setWrapStyleWord(true);
Jetzt zum Array, so müsste es eigentlich gehen:
String arr[] = new String[5]; for (int i=0;i<arr.length;++i) { arr[i] = new String(""); }
Dein Fehler war (soweit ich dass sehe), dass du sSolution 2x deklariert hast.va]
-
Zu der JTextArea ein kleines Beispiel
Hmm, wenn ich das so mache:
public void InitLog() { getContentPane().add(pcenter0 = new JPanel(new BorderLayout()),"Center"); pcenter0.add(jScrollPane1 = new JScrollPane(), "Center"); jScrollPane1.setViewportView(txtLog = new JTextArea()); txtLog.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.LOWERED)); txtLog.setLineWrap(true); txtLog.setWrapStyleWord(true); txtLog.setBounds(5, 5, 590, 145); }
... dann funktioniert die setBound Funktion nicht (die TextArea nimmt den gesamten Platz ein) Woran liegt das?
-
Wir haben die JTextArea als einziges Child der JScrollPane hinzugefügt, und die liegt mit "Center" im BorderLayout von pCenter0, welches den ganzen Platz im contentPane einnimmt. Deshalb.
Du scheinst nicht so der Swing-Experte zu sein. Vllt. nimmst du doch lieber einen GUI-Designer?
-
Du scheinst nicht so der Swing-Experte zu sein
Bis gestern wusste ich nicht mal, was Swing ist
Ich hab halt keine Ahnung von Java, das was ich hinbekomme, kann ich nur, weil vieles ähnlich wie in C++ ist.Vllt. nimmst du doch lieber einen GUI-Designer?
Da müsste ich mich wahrscheinlich auch noch reinarbeiten... Das lohnt sich jetzt nicht mehr, die GUI ist ja fertig, bis auf die ScrollBar der TextArea. Könntest du mir nicht einfach sagen, was ich ändern muss, damit man die TextArea platzieren kann? (*bettel bettel bettel*) Ich weiß, so etwas ist in diesem Forum verpönt, ich verspreche auch, dass ich mich näher mit der Materie beschäftige, wenn ich irgendwann in meinem Leben zum 2. Mal zum schreiben eines Applets überredet werden sollte...
-
Willst du die JTextArea exakt positionieren? Dann setze für das pcenter0 ein NullLayout, denk dran, du positionierst die JTextArea über die JScrollPane, denn wo die JScrollPane hingeht, da geht auch die JTextArea als child-Widget hin
-
Noch was für die Zukunft: NullLayout ist eigentlich dreck, mit dem Grid[Bag] - und BorderLayout lassen sich wunderbare Oberflächen erstellen, die auch sehr flexibel sind, deshalb nimmt man ja solche Container.
-
Sorry, aber so hilft mir das noch nicht weiter. Was ist ein NullLayout? (*duck*)
Heißt das einfach, dass man gar kein Layout benutzt?public void init() { add(jScrollPane1 = new JScrollPane(), "Center"); jScrollPane1.setViewportView(txtLog = new JTextArea()); txtLog.setBounds(10,10, 200,200); }
So funktioniert es noch nicht...
-
Ein NullLayout heißt einfach, dass du selber für die Positionierung verantwortlich bist, bei einem BorderLayout wird das automatisch gemanaged:
Und hier der Code (deine Einrückung ist echt ätzend ).public void InitLog() { getContentPane().add(pcenter0 = new JPanel(new NullLayout()),"Center"); //Hier, NullLayout gesetzt pcenter0.add(jScrollPane1 = new JScrollPane()); jScrollPane1.setViewportView(txtLog = new JTextArea()); txtLog.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.LOWERED)); txtLog.setLineWrap(true); txtLog.setWrapStyleWord(true); //Hab ich nicht gesagt, du sollst die JScrollPane postitionieren? jScrollPanel.setBounds(5, 5, 590, 145); }
So, ich geh jetzt Abendessen, bis morgen in alter Frische.
Mfg
GPC
-
Ganz so hat es nicht funktioniert: Unknown Identifier: NullLayout
Hätte ich vielleicht noch irgendwas importen müssen...Naja ich hab es jetzt so:
public void init() { setLayout(null); add(jScrollPane1 = new JScrollPane(), "Center"); jScrollPane1.setViewportView(txtLog = new JTextArea()); jScrollPane1.setBounds(5, 5, 590, 145); }
Und da es funktioniert, bin ich endlich zufrieden
Vielen Dank für deine Hilfe.
-
snOOfy schrieb:
Ganz so hat es nicht funktioniert: Unknown Identifier: NullLayout
Hätte ich vielleicht noch irgendwas importen müssen...Nein, war mein Fehler. Eigentlich benutzt man NullLayout nur als Synonym für setLayout(null), das hatte ich gestern vergessen zu sagen und zu schreiben.