| 

.NET C# Java Javascript Exception

0
Hey Leute,

ich hab ein kleines Programm erstellt, das dir einfach random Antworten gibt.
doch immer wenn ich das Programm als .jar starte habe ich kein JTextArea, erst wenn ich
die Größe meines Fensters verstelle updatet sich das Fenster und mein JTextArea erscheint.

Hier der Code:

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

public class Main implements KeyListener {

private JFrame frame;
private JTextArea textArea;
private JScrollPane scroll;
private String a,b,c,d,e,newLine;

public static void main(String[] args0){
Main m = new Main();
}

public Main(){
int x = 800;
int y = 500;

Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();

int width = (int) (dimension.getWidth() - x) / 2;
int hight = (int) (dimension.getHeight() - y) / 2;

frame = new JFrame("Start");
frame.setLayout(null);
frame.setResizable(true);
frame.setLocation(width, hight);
frame.setSize(800,500);
frame.setVisible(true);

textArea = new JTextArea();
textArea.addKeyListener(this);
JScrollPane scroll = new JScrollPane(textArea);
scroll.setBounds(0,0,(frame.getWidth()-18),(frame.getHeight()-34));
scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

frame.getContentPane().add(scroll);

a = "Ja.";
b = "Nein.";
c = "Vielleicht.";
d = "Warscheinlich.";
e = "Eher nicht.";
newLine = "\n";
}

public void keyTyped(KeyEvent e) {}
public void keyReleased(KeyEvent e) {}

public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_ENTER){
RandomAnswer();
}
}

private void RandomAnswer(){
Random r = new Random();
int answer = (int)r.nextInt((5 - 1) + 1) + 1;
switch (answer) {
case 1: textArea.append(newLine + a);
break;
case 2: textArea.append(newLine + b);
break;
case 3: textArea.append(newLine + c);
break;
case 4: textArea.append(newLine + d);
break;
case 5: textArea.append(newLine + e);
break;
default: textArea.append(newLine + d);
break;
}
answer = 0;
}
}


Vielen dank schon mal.

[Edit]"Schlagwörter" ergänzt[/Edit]
18.06.2015
Dechasa 1 1
1 Antwort
0
Entweder du rufst setVisible erst auf, nachdem du das JTextArea hinzugefügt hast oder du renderst das JFrame neu, nachdem du das JTextArea hinzugefügt hat.

Variante 1:
// ...
frame.setSize(800,500);
// frame.setVisible(true); hier nicht
textArea = new JTextArea();
// ...
frame.getContentPane().add(scroll);
frame.setVisible(true); // sondern hier
// ...

Variante 2:
// ...
frame.getContentPane().add(scroll);
frame.repaint(); // JFrame neu rendern
// ...


Das verändern der Fenstergröße führt zu einem erneuten rendern der GUI-Elemente, darum wird das JTextPanel dann erst dargestellt. Mit Variante 1 wird das JFrame erste gerendert wenn das JTextPanel bereits exisitert und eingebunden ist. Mit Variante 2 wird das JFrame neu gerendert nachdem das JTextPanel hinzugefügt wurde.
18.06.2015
phg 1,6k 3

Stelle deine Java-Frage jetzt!