所以我有两个类(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?
这是我希望它的外观的草图:
最佳答案
您的上述问题似乎源于不良的 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/