2017-02-18 4 views
1

Ich sende meine Klasse, die JPanel durch einen ObjectOutputStream zum Client erweitert, so dass ihre GUI 'geladen' wird.Korrekte Art, ein JPanel zu serialisieren?

public class ClickOptionPanel extends JPanel implements Serializable { 

private Font font = new Font("Arial", Font.BOLD, 13); 

private JLabel clickerTitle; 

private JSlider clickerMaxSlider, clickerMinSlider; 

private JTextField clickerMinField, clickerMaxField; 

private JCheckBox clickInsideMinecraft, autoBlock; 

public ClickOptionPanel() { 
    setLayout(new BorderLayout()); 
    add(getClickerTitlePanel(), BorderLayout.NORTH); 
    add(getClickerSliderPanel(), BorderLayout.CENTER); 
    add(getCheckBoxPanel(), BorderLayout.SOUTH); 
} 

private JPanel getClickerTitlePanel() { 
    JPanel panel = new JPanel(); 
    panel.setBorder(BorderFactory.createEtchedBorder()); 
    clickerTitle = new JLabel("Clicker Options"); 
    clickerTitle.setFont(font); 
    panel.add(clickerTitle); 
    return panel; 
} 

private JPanel getClickerSliderPanel() { 
    JPanel panel = new JPanel(); 
    panel.setLayout(new BorderLayout()); 
    clickerMaxSlider = new JSlider(0, 200, 125); 
    clickerMaxSlider.setPreferredSize(new Dimension(300, 45)); 
    clickerMinSlider = new JSlider(0, 200, 75); 
    clickerMinSlider.setPreferredSize(new Dimension(300, 45)); 
    panel.add(clickerMaxSlider, BorderLayout.NORTH); 
    panel.add(clickerMinSlider, BorderLayout.CENTER); 
    panel.add(getClickFieldPanel(), BorderLayout.SOUTH); 
    return panel; 
} 

private JPanel getClickFieldPanel() { 
    JPanel panel = new JPanel(); 
    clickerMaxField = new JTextField(10); 
    clickerMaxField.setFont(font); 
    clickerMaxField.setHorizontalAlignment(SwingConstants.CENTER); 
    clickerMinField = new JTextField(10); 
    clickerMinField.setFont(font); 
    clickerMinField.setHorizontalAlignment(SwingConstants.CENTER); 
    panel.add(clickerMinField); 
    panel.add(clickerMaxField); 
    return panel; 
} 

private JPanel getCheckBoxPanel() { 
    JPanel panel = new JPanel(); 
    panel.setLayout(new BorderLayout()); 
    panel.setBorder(BorderFactory.createEtchedBorder()); 
    clickInsideMinecraft = new JCheckBox("Only click inside of Minecraft:              "); 
    clickInsideMinecraft.setHorizontalTextPosition(SwingConstants.LEFT); 
    autoBlock = new JCheckBox("Enable auto-block:              "); 
    autoBlock.setHorizontalTextPosition(SwingConstants.LEFT); 
    panel.add(clickInsideMinecraft, BorderLayout.NORTH); 
    panel.add(autoBlock, BorderLayout.SOUTH); 
    return panel; 
} 

Da ist die JPanel, die ich sende. Ich erstelle eine neue Instanz davon, bevor es gesendet wird.

Das JPanel wird leer - warum ist das?

Antwort

0

Ich habe alles richtig gemacht - es war nur, dass ich auf der Client-Seite vergessen habe, das ois.readObject Objekt auf dem Panel zu setzen!

Verwandte Themen