私は、サーバーアプリケーションをjavaに書き出し、サーバーにヒットしたすべてのソケットを格納するベクトルv1を作成しようとしています。JCheckBoxをクライアントとの接続時にJFrameに組み込む
次に私はオブジェクトとしてすべてのクライアントソケットを保存した後、クラスコンストラクタで開始されたJPanelコントロールパネルにチェックボックスを追加するためにループするJCheckBox配列を作成しましたが、何かが間違っているようですチェックボックスは表示されません。
import java.util.*;
import java.net.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
import java.awt.*;
class server extends JFrame implements ActionListener {
JTextArea t1;
PrintWriter pw;
JButton b1, b2;
static Vector v1 = new Vector();
static ArrayList checks = new ArrayList();
static JPanel controlpanel;
server() {
setLayout(new FlowLayout());
t1 = new JTextArea();
add(t1);
b1 = new JButton("Send to All");
b2 = new JButton("Send");
//b1.addActionListener(this);
//b2.addActionListener(this);
add(b2, BorderLayout.SOUTH);
add(b1, BorderLayout.NORTH);
b1.addActionListener(this);
b2.addActionListener(this);
controlpanel = new JPanel();
controlpanel.setVisible(true);
add(controlpanel);
}
public void actionPerformed(ActionEvent ae) {
String m = t1.getText();
if (ae.getSource() == b1) {
try {
Iterator t2 = v1.iterator();
while (t2.hasNext()) {
Socket s = (Socket) t2.next();
pw = new PrintWriter(s.getOutputStream(), true);
pw.println(m);
pw.flush();
System.out.println("send" + m);
}
} catch (Exception e) {
}
}
if (ae.getSource() == b2) {
try {
Iterator itr = checks.iterator();
while (itr.hasNext()) {
Socket schecked = (Socket) itr.next();
pw = new PrintWriter(schecked.getOutputStream(), true);
pw.println(m);
pw.flush();
System.out.println("sent " + m);
}
} catch (Exception e) {
}
}
t1.setText("");
}
public static void main(String z[]) {
try {
new server().setVisible(true);
ServerSocket s = new ServerSocket(2000);
while (true) {
System.out.println("waiting...");
Socket c = s.accept();
// System.out.print(c);
v1.add(c);
for (int i = 0; i < v1.size(); i++) {
checks.add(v1.get(i));
// checks[i].setText()=v1[i];
}
JCheckBox checkbox[] = new JCheckBox[checks.size()];
for (int i = 0; i < checks.size(); i++) {
// Object o=checks.get(i);
checkbox[i] = new JCheckBox();
// checkbox[i].setText()=checks.get(i).name;
controlpanel.add(checkbox[i]);
checkbox[i].setSelected(true);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
)あなたのフレームでsetVisibleなどのメソッドを呼び出す必要があります。 B)あなたが以前に行ったことのない5つのものをミックスしないでください。代わりにフレームの使い方を示すチュートリアルを読み、作業してください。そしてそれらのことがうまくいったら... UI要素を動的に追加してください。そして、それがうまくいくと....サーバー部分を追加します。 – GhostCat
コンストラクタサーバー内にコントロールパネルを追加し、メインメソッド内でserver.setVisible(true)を追加しました。 @GhostCat –