2016-04-20 16 views
0

Ich habe ein ernstes Problem. Wenn ich versuche, 2 JRadioButtons und ein JLabel auf meinem JFrame hinzuzufügen, funktioniert es nicht. Sie zeigen nicht, aber andere Elemente tun es.Einige Swing-Komponenten werden nicht auf JFrame angezeigt

Das lustige ist, dass andere Komponenten, die ich zuvor hinzugefügt habe (auch JLabels) auf dem JFrame sichtbar sind.

Alle Swing-Komponenten werden über einen Container 'panel' hinzugefügt, der den Inhaltsbereich des JFrame darstellt.

Ich benutze Java DK 7 u67.

Hier ist der Code: (nach unten scrollen zu /* Dieser Code funktioniert nicht */)

public class UDP_FileTransfer implements KeyListener, Runnable { 

JFrame fenster; 
Container panel; 
JButton startBt, setPathBt; 
JTextField portFeld, ipFeld, savePathFeld; 
JLabel infoLbl, serverLbl, clientLbl; 
JRadioButton server, client; 

boolean typeIsServer = true; 

int port = 4444; 
long size = 0; 

boolean serverStarted; 

public static void main(String[] args){ 

    new UDP_FileTransfer(); 
} 

public UDP_FileTransfer(){ 

    fenster = new JFrame(); 
    fenster.setLayout(null); 
    fenster.addKeyListener(this); 
    fenster.setTitle("UDP File Transfer - Server"); 
    fenster.setLocationRelativeTo(null); 
    fenster.setResizable(false); 
    fenster.setSize(400,150); 

    panel = fenster.getContentPane(); 
    panel.setLayout(null); 
    panel.addKeyListener(this); 

    JLabel portLbl = new JLabel("Port: "); 
    portLbl.setBounds(10,10, 50,20); 
    panel.add(portLbl); 

    ... 
    ... 
    ... 

    infoLbl = new JLabel("Status: Starten Sie den Server zuerst!"); 
    infoLbl.setBounds(10, 70, 371,20); 
    infoLbl.setBorder(new LineBorder(Color.black, 1)); 
    panel.add(infoLbl); 

    /* This code doesn't work */ 

    JLabel typeLbl = new JLabel("Wählen Sie den Typ aus:"); 
    typeLbl.setBounds(10,125,200,20); 
    panel.add(typeLbl); 

    client = new JRadioButton("Client"); 
    client.setBounds(230,125,70,20); 
    panel.add(client); 

    client = new JRadioButton("Server"); 
    client.setBounds(320,125,70,20); 
    panel.add(client); 

    /* End of non-working code */ 

    fenster.setVisible(true); 
    fenster.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 

Die GUI wie folgt aussieht: Click me

Die JRadioButtons Client & Server und die JLabel typeLbl sollte unter dem Rahmen mit der Grenze erscheinen.

Ich hoffe einer von euch kann mir helfen ...

+2

nicht Grenzen Ihrer Komponenten eingestellt. Das ist die Rolle des Layout-Managers. Verwenden Sie einen Layout-Manager. –

+0

'fenster.setLayout (null);' 1) Java GUIs müssen auf verschiedenen Betriebssystemen, Bildschirmgrößen, Bildschirmauflösungen usw. mit verschiedenen PLAFs in verschiedenen Locales arbeiten. Als solche sind sie nicht für ein perfektes Pixel-Layout geeignet. Verwenden Sie stattdessen Layout-Manager oder [Kombinationen davon] (http://stackoverflow.com/a/5630271/418556) zusammen mit Layout-Auffüllung und Rahmen für [Leerraum] (http://stackoverflow.com/a/17874718/ 418556). 2) Bereitstellung von ASCII-Grafiken oder einer einfachen Zeichnung des * beabsichtigten * Layouts der GUI bei minimaler Größe und wenn sie in der Größe veränderbar ist, mit mehr Breite und Höhe. –

Antwort

0

Zunächst sollten Sie Ihre letztere Variable Server ändern.

client = new JRadioButton("Client"); 
    client.setBounds(230,125,70,20); 
    panel.add(client); 

    server = new JRadioButton("Server"); 
    server.setBounds(320,125,70,20); 
    panel.add(server); 

und Rahmengröße ändern

frame.setSize(450, 175); 
Verwandte Themen