zgodnie z prośbą podaję kod mojego JDialog oraz fragment kodu JFrame którego to dotyczy
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class
ConnectionDialog extends JDialog implements ActionListener{
protected JButton btnOK;
protected JButton btnCancel;
protected JTextField tfHost;
protected JTextField tfPort;
protected JLabel lblHost;
protected JLabel lblPort;
public boolean OKClicked;
public String host;
public String port;
public ConnectionDialog(JFrame parent)
{
super(parent, true);
setTitle("Parametry połączenia");
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent evt)
{
dispose();
}
}
);
initLayout();
setVisible(true);
}
public void initLayout()
{
setLayout(new GridLayout(3, 2));
setSize(250, 100);
tfHost = new JTextField();
tfHost.setSize(100, 20);
tfPort = new JTextField();
tfPort.setSize(100, 20);
lblHost = new JLabel("Host");
lblHost.setSize(100, 20);
lblPort = new JLabel("Port");
lblPort.setSize(100, 20);
btnOK = new JButton("OK");
btnOK.setSize(100, 20);
btnOK.addActionListener(this);
btnCancel = new JButton("Anuluj");
btnCancel.setSize(100, 20);
btnCancel.addActionListener(this);
add(lblHost);
add(tfHost);
add(lblPort);
add(tfPort);
add(btnOK);
add(btnCancel);
}
public void actionPerformed(ActionEvent evt)
{
String tmp = evt.getActionCommand();
if (tmp.equals("OK")){
host = tfHost.getText();
port = tfPort.getText();
OKClicked = true;
setVisible(false);
}
else if (tmp.equals("Anuluj")){
OKClicked = false;
setVisible(false);
}
}
}
teraz fragment JFrame:
public void actionPerformed(ActionEvent evt)
{
String tmp = evt.getActionCommand();
if (tmp.equals("Exit")){
exitClicked();
}
else if (tmp.equals("Disconnect")){
disconnectClicked();
}
else if (tmp.equals("Connect")){
connectClicked();
}
}
public void connectClicked()
{
if(connected){
insertText("Najpierw zakończ bieżące połączenie!");
return;
}
ConnectionDialog cd = new ConnectionDialog(this);
if (!cd.OKClicked){
return;
}
int port;
try{
port = Integer.parseInt(cd.port);
}
catch(NumberFormatException e){
insertText("Nieprawidłowy numer portu: " + cd.port + "\n");
return;
}
connect(cd.host, port);
}
public void connect(String host, int port)
{
connected = false;
insertText("Łączenie z hostem " + host + "\n");
try{
socket = new Socket(host, port);
}
catch(IOException e){
insertText("Błąd gniazda: " + e + "\n");
return;
}
insertText("Zakończona inicjalizacja gniazda...\n");
try{
socketOut = new DataOutputStream(socket.getOutputStream());
socketIn = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
}
catch(IOException e){
insertText("Błąd przy tworzeniu strumieni: " + e + "\n");
return;
}
clientThread = new ChatClientThread(this, socket, socketIn);
clientThread.start();
insertText("Połączono z serwerem.\n");
connected = true;
}
i tak jak pisałem: w wersji z właścicielem JDialog kod z JFrame następujący po stworzeniu obiektu JDialog jest dalej przetwarzany zgodnie z założeniami natomiast w wersji bezargumentowej jakby to ująć...kończy bieg jak pociąg do Świnoujścia bez tworzenia gniazda