我在類「ClientGUI.java」中創建了我的GUI,並試圖在另一個類(「Client.java」)中創建一個實例。 GUI只包含兩個按鈕(「前進」和「後退」),其中一次只有一個按鈕。 起初,GUI似乎工作正常,因爲框架是用一個按鈕顯示的。但是,一旦按下按鈕,它就會消失,不會被第二個按鈕取代。 通過設置斷點,我發現調用了正確的ActionListener函數,並刪除了第一個按鈕,但沒有添加第二個按鈕。從另一個類運行GUI
的GUI類 「ClientGUI.java」:
package GUI;
import javax.swing.JPanel;
import java.awt.Dimension;
import javax.swing.JButton;
import java.net.MalformedURLException;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ClientGUI extends JPanel implements ActionListener {
private static JButton btnForward = new JButton("Forward"),
btnBackward = new JButton("Backward");
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
createAndShowGUI();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
public ClientGUI() throws MalformedURLException {
setLayout(new BorderLayout());
add(btnForward, BorderLayout.CENTER);
btnForward.addActionListener(this);
btnBackward.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == btnForward) {
remove(btnForward);
add(btnBackward, BorderLayout.CENTER);
revalidate();
repaint();
}
else if (e.getSource() == btnBackward) {
remove(btnBackward);
add(btnForward);
revalidate();
repaint();
}
}
private static void createAndShowGUI() throws MalformedURLException {
JFrame frame = new JFrame("ClientGUI");
frame.setMinimumSize(new Dimension(500, 400));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new ClientGUI());
frame.setSize(500, 400);
frame.setVisible(true);
}
}
和類 「Clients.java」 從中我想使用的GUI:
import java.net.*;
import GUI.ClientGUI;
public class Client {
public static void main(String[] args) {
Client client = new Client();
}
Client() {
String[] args = {"ggg", "vvv"};
try {
new ClientGUI().main(args);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
感謝您的幫助。
使用CardLayout ... – mKorbel
你不應該叫'init'。來自另一班。你應該從構造函數中調用它。在你的情況下,它可能不起作用,因爲你的類在一個JPanel中,你添加到'init'中的框架,所以如果你從構造器調用'init',你會得到一個無限循環。看到我的答案。我只是做了一些簡單的修復。但是,在良好的實踐方面,還有更多可以改進的地方。 –
@mKorbel我在想同樣的事情,但OP不想使用兩個分離幀。這個問題看起來像這樣,但OP只是試圖從加載GUI的另一個類運行GUI類。 –