2013-12-09 2 views
0

Хорошо, попытался подвести итог моей проблеме. Я пытаюсь добавить jpanel из другого класса. В этом классе у меня есть метод печати, где я получаю вход из файла и добавляю его в JTextArea, который является вторым блоком кода. Я хочу добавить эту панель в рамку внутри класса GUI. Текущий код правильно выводит кнопки в этом первом блоке. Но щелчки только немного расширяют окно и все черное. Кнопки остаются там, но накладываются на черное окно. = (добавить панель в кадр из другого класса?

package GamePackage; 

import java.*; 

import javax.swing.* 

public class CopyOfGUI extends JFrame { 
static String config = null; 
static JFrame frame; 
static JPanel panel; 

private static final long serialVersionUID = 1L; 

public CopyOfGUI() { 
    frame = new JFrame("Sheep City"); 
    panel = new JPanel(); 
    JButton options = new JButton("OPTIONS"); 
    JButton start = new JButton ("START"); 
    JButton controls = new JButton ("CONTROLS"); 

    panel.add(options); 
    panel.add(start); 
    panel.add(controls); 


    frame.add(panel); 

    options.addActionListener(new actionReadConfig(config)); 

    frame.pack(); 
    frame.setVisible(true); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 


} 

public static void main (String[] args) { 
    if (args.length > 0) 
     {config = args[0];} 
    CopyOfGUI gui = new CopyOfGUI();  

} 
//Here is where the options button loads the read in argument for the config file 
class actionReadConfig implements ActionListener { 
    String config = null; 
    public actionReadConfig(String config) { 
     this.config = config; 
    } 
    public void actionPerformed(ActionEvent e) { 
     try { 
      GameBoard.loadConfig(this.config); 
     } catch (IOException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 

    } 
} 

}

Вот код, где им пытаются добавить текст из файла читать в текстовой области, добавить его на панель, и вернуться к исходному кадру.

public static int print(ConfigurationManager cm) { 
    //code gere 
    JPanel configPanel = new JPanel(new BorderLayout()); 
    configPanel.setBorder(BorderFactory.createTitledBorder("Configuration Manager")); 
    JTextArea area = new JTextArea(); 
    area.append("Before we get started lets setup our configurations shall we?\n"); 
    area.append("These are the default configurations.\n"); 
    area.append("*************************\n"); 
    //for loop here { 
     //area.append output 
    //} 
    area.append("*************************\n"); 
    area.append("Would you like to change any of these values? (yes/no)\n"); 
    area.setEditable(false); 
    configPanel.add(area, BorderLayout.SOUTH); //Idk if any of this is right 
    CopyOfGUI.frame.add(configPanel); 
    CopyOfGUI.frame.remove(CopyOfGUI.panel); 
    CopyOfGUI.frame.pack(); 
    CopyOfGUI.frame.setVisible(true); 
    CopyOfGUI.frame.repaint(); 

Больше коде впоследствии, но мне нужна предыдущая часть работы, прежде чем я беспокоиться об остальном. Thx заранее.

+2

Просто наблюдение - это довольно трудно для любого, чтобы помочь вам, когда вы пишете Су много, и ваш код еще не завершен (например, кто вызывает метод печати?). Постарайтесь быть краткими, уменьшите проблему до минимума и предоставите некоторый компилируемый код. См. Http://sscce.org/ – aditsu

+0

@aditsu спасибо Я попытался подвести итог, но я думаю, что это так коротко, как я могу сделать код – waaffles

ответ

2

Я не уверен, где вызывается метод печати, но вы можете сделать панель класса v и поместить его в открытый геттер, чтобы вы могли добавить его в кадр (при условии, что метод печати находится в другом классе).

private JPanel configPanel; 

public JPanel getConfigPanel() 
{ 
    return configPanel; 
} 

Затем вы можете использовать этот метод и добавить его к раме:

frame.add(someClass.getConfigPanel); 
+0

Это на самом деле звучит отличная идея. Я попробую это и отчитаю! Спасибо! – waaffles

Смежные вопросы