java - JPanel 中的 JTextArea 不同类一个窗口...可能吗?

标签 java user-interface jpanel jtextarea

所以我有两个类(class):

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

最佳答案

您的上述问题似乎源于不良的 Swing 代码实践,而 Swing 代码生成器(尽管我不确定您当前是否正在使用此工具)和官方 Swing 教程似乎强化了这一实践,即:

  • 首先,您应该避免让您的 Swing GUI 类扩展 JFrame,因为这会不必要地将您的 GUI 代码陷入需要付出一些努力才能摆脱的困境。
  • 相反,将您的 Swing GUI 代码调整为制作 JPanel,这些面板现在可以轻松放置到其他 JPanel 中,或者放置到 JFrame、JDialogs、JOptionPanes 中,在 CardLayout 中交换,...​​无论需要什么地方。
  • 相反,在需要时创建、填充和打包 JFrame。

所以我建议你这样做:

  • 更改上面的代码,以便类不扩展 JFrame,而是创建 JPanel,
  • 创建一个使用 BorderLayout 的主 JPanel
  • 将网格添加到上面的 BorderLayout.CENTER
  • 将包含 JTextArea 的 JScrollPane 及其 JPanel 添加到主 JPanel 的 BorderLayout.PAGE_END 位置。
  • 创建 JFrame 来保存和显示主 JPanel。

如果您很好地将 GUI 代码与逻辑代码分开,那么在保留相同的逻辑(或“模型”)代码的同时重写 GUI 代码应该很容易。

<小时/>

编辑2
关于您更改的问题,现在第一个类扩展了 JPanel,只需将该 JPanel 添加到您的 JFrame 的 BorderLayout.LINE_END 末尾(也称为 BorderLayout.EAST)位置即可。

关于java - JPanel 中的 JTextArea 不同类一个窗口...可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21370687/

相关文章:

java - SolrCore 初始化失败

java - 如何使用 Swing 组件的自定义子类?我需要将它安装到调色板吗?

java - 是否有 Python sched 模块的 Java 等效项?

Android:9 补丁图像 vs 形状 vs 多图标

java - 使用 UI 在后台运行 sphinx4 识别器

java - JPanel 上的paintComponent() 性能不佳

java - 如何更改 JFrame 中 JLabel 的位置?

java repaint() 的不稳定行为(JPanel、JFrame)

java - 在java中删除一个形状

c++ - 如何将 Windows 控件添加到 Visual Studio 2017 中的 C++ 桌面应用程序?