2016-04-01 11 views
4

Ich habe eine GUI erstellt. Es hat mehrere Knöpfe. Ich möchte ein konsolenähnliches Objekt unter ihnen hinzufügen, in dem ich Nachrichten schreiben könnte, damit der Benutzer sie sehen würde. Welches Element/Objekt/Klasse sollte ich verwenden? Ich möchte, dass es Nachrichten in verschiedenen Zeilen präsentieren kann. hier mein Code ist die GUI für die Erstellung von:Wie fügt man einem GUI ein "Konsolen" ähnliches Fenster hinzu?

public ssGUI() { 
    setLayout(new BorderLayout()); 

    bRunNoAdj = new JButton("Run no adjustment"); 
    bRunNoAdj.setVerticalTextPosition(AbstractButton.CENTER); 
    bRunNoAdj.setHorizontalTextPosition(AbstractButton.LEADING); 
    bRunNoAdj.setMnemonic(KeyEvent.VK_E); 
    bRunNoAdj.addActionListener(this); 
    bRunNoAdj.setEnabled(false); 
    bRunNoAdj.setBackground(Color.white); 

    bRunAdj = new JButton("Run adjustment"); 
    bRunAdj.setVerticalTextPosition(AbstractButton.CENTER); 
    bRunAdj.setHorizontalTextPosition(AbstractButton.LEADING); 
    bRunAdj.setMnemonic(KeyEvent.VK_E); 
    bRunAdj.addActionListener(this); 
    bRunAdj.setEnabled(false); 
    bRunAdj.setBackground(Color.white); 

    bConnect = new JButton("Connect"); 
    bConnect.setMnemonic(KeyEvent.VK_E); 
    bConnect.addActionListener(this); 
    bConnect.setEnabled(true); 
    bConnect.setBackground(Color.white); 

    bDisconnect = new JButton("Disconnect"); 
    bDisconnect.setMnemonic(KeyEvent.VK_E); 
    bDisconnect.addActionListener(this); 
    bDisconnect.setEnabled(false); 
    bDisconnect.setBackground(Color.white); 

    bStationary = new JButton("Show Stationary"); 
    bStationary.setMnemonic(KeyEvent.VK_E); 
    bStationary.addActionListener(this); 
    bStationary.setEnabled(false); 
    bStationary.setBackground(Color.white); 

    bMoving = new JButton("Show Moving"); 
    bMoving.setMnemonic(KeyEvent.VK_E); 
    bMoving.addActionListener(this); 
    bMoving.setEnabled(false); 
    bMoving.setBackground(Color.white); 

    JPanel topPanel = new JPanel(); 
    topPanel.add(bConnect); 
    topPanel.add(bDisconnect); 
    add(topPanel, BorderLayout.NORTH); 
    JPanel centerPanel = new JPanel(); 
    centerPanel.add(bRunNoAdj); 
    centerPanel.add(bRunAdj); 
    add(centerPanel, BorderLayout.CENTER); 
    JPanel bottomPanel = new JPanel(); 
    bottomPanel.add(bStationary); 
    bottomPanel.add(bMoving); 
    add(bottomPanel, BorderLayout.SOUTH); 
} 

jede mögliche Hilfe würde geschätzt, danke.

+2

ist, könnte Sie nur 'JTextArea' verwenden und' setEditable (false) 'drauf . – BadCash

+0

warum sollte ich es falsch setzen? –

+3

@DanyLavrov Wenn Sie es nicht auf false setzen, kann der Benutzer die von Ihnen hinzugefügten Nachrichten löschen oder ändern. – Roan

Antwort

6

Am einfachsten wäre wahrscheinlich eine JTextArea zu verwenden.

Sie würden natürlich den Benutzer verhindern, dass der Bereich von der Bearbeitung, kann dies wie folgt geschehen:

JTextArea area = new JTextArea(); 
area.setEditable(false); 

Und wenn der Benutzer möchte den Bereich in der Lage sein blättern können Sie es zu einem JScrollPane hinzufügen wie dies:

JTextArea area = new JTextArea(); 
JScrollPane scrollableArea = new JScrollPane(area); 

Und schließlich können Sie eine Linie auf den Bereich hinzufügen, indem Sie:

area.setText(area.getText() + "\n" + newLine); 

Oder bevorzugt:

area.append("\n" + newLine); 

Ich hoffe, das hilft :)

+0

danke. eine letzte Sache. Bei der ersten Ladung werden alle Komponenten im Hauptrahmen zusammengedrückt. Warum passiert dies? Ich versuche, die 'setSize()' Methode zu verwenden, aber es hilft nicht. –

+0

Wie meinst du zusammengequetscht? By the way, wenn Sie einen Layout-Manager verwenden, dann wird 'setSize()' ignoriert, da es normalerweise vom Layoutmanager berechnet wird, 'setPreferredSize()' wird jedoch von einigen Layout-Managern verwendet. – Roan

+0

einige der Tasten sind übereinander. Es ist keine große Sache. Zum Beispiel hat das Rollfeld beim ersten Laden nur eine Zeile, kann ich es beispielsweise von Anfang an 3 Zeilen breit machen? –

5

Verwenden Sie eine JTextArea. Rufen Sie text_area.setEditable(false); darauf an, um es schreibgeschützt zu machen.

+0

warum sollte es falsch sein? –

+2

Ihre "Konsole" ist ein Ausgabefenster; 'setEditable (false)' macht die Steuerung schreibgeschützt. Der Benutzer sollte nicht in der Lage sein, Nachrichten zu ändern, die Ihr Programm angezeigt hat. Ihr Programm kann natürlich weitere Zeilen hinzufügen oder nach Belieben andere Änderungen vornehmen. – AJNeufeld

0

denke ich, was Sie meinen JTextArea oder JTextField

Verwandte Themen