2014-01-26 18 views
1

所以我有兩個類:JTextArea&JPanel不同的類一個窗口...有可能嗎?

public class TimeServer extends JPanel implements TimeVariables 
{ 

public TimeServer() 
{ 

    JTextArea serverLog = new JTextArea(); 
    // Create a scroll pane to hold text area 
    JScrollPane scrollPane = new JScrollPane(serverLog); 

    JPanel serverWin = new JPanel(); 

    serverWin.add(scrollPane); 

} 

而且具有其他類:

private JPanel mainWin = new JPanel(); 
private JPanel gridArea = new JPanel(); //hold cells 

TimeServer serverWin = new TimeServer(); 

public class TimClient extends JFrame implements Runnable, TimeVariables 
{ 
    his.add(mainWin, BorderLayout.CENTER); 
    mainWin.setLayout(new BorderLayout()); 
    // mainWin.setLayout(new GridLayout(1,2)); 

    //Create Grid 
    gridArea.setLayout(new GridLayout(10, 10, 2, 2)); 

    for (int i = 0; i < 10; i++) 
     for (int j = 0; j < 10; j++) 
      gridArea.add(cell[i][j] = new Cell(i, j, this)); 

    gridArea.setBorder(new LineBorder(Color.black, 1)); 

    jlblTitle.setHorizontalAlignment(JLabel.CENTER); 
    jlblTitle.setFont(new Font("SansSerif", Font.BOLD, 16)); 
    jlblTitle.setBorder(new LineBorder(Color.black, 1)); 
    jlblStatus.setBorder(new LineBorder(Color.black, 1)); 

    mainWin.add(gridArea, BorderLayout.CENTER); 
    mainWin.add(serverWin, BorderLayout.PAGE_END); 
    // Place the panel and the labels to the frame 

    setLayout(new BorderLayout()); // implicit anyway 

    add(jlblTitle, BorderLayout.NORTH); 
    add(mainWin, BorderLayout.CENTER); 
    add(jlblStatus, BorderLayout.SOUTH); 
} 

public static void main(String[] args) { 

    // Create a frame 
    TimClient frame = new TimClient("Time Client"); 
    //frame.getContentPane().add(BorderLayout) 

    // Display the frame 
    frame.setSize(620, 600); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 

} 

所有我想要做的是保持在JPanel的服務器日誌和網格彼此相鄰,能你解釋如何?

我如何將服務器類中的JPanel添加到客戶端中的JPanel?

這裏有一個如何我想它看起來草圖:上面 sketch

+0

刪除問題的內容將不會幫助任何其他人在未來... – MadProgrammer

回答

1

您的問題似乎從壞的Swing代碼的做法,一個似乎被Swing代碼生成器來增強幹(雖然我不敢肯定,如果你目前正在使用這個工具)和官方的Swing教程,那就是:

  • 首先,你應該避免你的Swing GUI的類擴展的JFrame作爲不必要的描繪自己的GUI代碼進入需要一點努力才能離開的角落。
  • 取而代之的是將您的Swing GUI代碼轉換成JPanels,現在可以輕鬆放置到其他JPanels中的面板,或放入JFrames,JDialogs,JOptionPanes,在CardLayouts中交換的面板......無論它們是否需要。
  • 而是在需要時創建,填充和打包JFrame。

所以我建議你這樣做只是這一點:

  • 改變你的代碼之上,這樣的類不延長JFrames,而是創造JPanels,
  • 創建一個使用BorderLayout的高手的JPanel
  • 將您的網格添加到上面的BorderLayout.CENTER
  • 將您的含有JTextArea的JScrollPane及其JPanel添加到BorderLayout.PAGE_END位置的主JPanel中。
  • 創建您的JFrame來保存並顯示主JPanel。

如果你已經從你自己的邏輯進行分離你的GUI代碼的好工作,那麼它應該很容易,同時保持你相同的邏輯(或「模型」)的代碼重新編寫GUI代碼。


編輯2
關於你提到的問題,改變現在在哪裏一流的擴展JPanel,只需添加的JPanel在BorderLayout.LINE_END結束(也稱爲BorderLayout.EAST)的位置您的JFrame。

+1

我打算將服務器類從擴展到jframe更改爲jpanel。我沒有使用任何的搖擺代碼生成器...就像我說的一個菜鳥在編程,以最小的幫助來解決它:(除了在這裏的人:)感謝您的幫助:) – YouSof

+1

@YouSof:關於「不使用Swing代碼生成器「 - 對你有好處!我都是在學習Swing之後使用它們的,但是在這個階段你應該避免使用它們。 –

+0

我的計劃是將服務器類更改爲jpanel,然後將客戶端類保留爲擴展JFrame。但我如何將服務器中的jpanel添加到客戶端的框架?大聲笑希望有道理 – YouSof

相關問題