回過頭來,我開始了一個項目,很快就建立了一個大量的代碼,大部分代碼都是由組件及其屬性組成的。一切都很順利,直到我遇到了錯誤。在頭頂上,錯誤是超出構造函數的代碼限制的行,大約65000字節。從JFrame調用的外部JPanels
這個錯誤實際上是給我和我的項目停下來的。同時我也發現了我對SWING的理解方面的主要問題。
我試過的是把我的遊戲代碼分成邏輯部分,把每個部分放到不同的類中。例如,處理購買和銷售的jpanel將是它自己的.java文件。處理髮貨的另一個jpanel將在另一個.java文件中。
我希望實現的是一個JFrame,當用戶在按下jbutton時請求它時,會調用這些jpanel中的每一個。然而,這並沒有按照我的意願行事,讓我處於需要幫助的位置。
我所做的是通過創建一個示例框架來簡化我的問題,希望有人能指出我需要看什麼,甚至可能是一個解決方案。
我創建了一個JFrame,它包含一個名爲bg的面板,該面板本身擁有2個JButton(btn1和btn2)。在另一個類文件中,我創建了一個名爲panel1的JPanel,並在另一個類中再次創建了另一個名爲panel2的JPanel。
當用戶打開應用程序時,他們會看到一個框架和兩個按鈕的選項,當按下其中任何一個按鈕時,我想要打開panel1或 panel2。這將如何完成?
任何幫助將不勝感激。提前致謝。
////////////// frame
package panel;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Frame implements ActionListener {
public JPanel bg;
public static JButton btn1, btn2;
public Frame(){
JFrame f = new JFrame();
f.setSize(308, 205);
f.setLayout(null);
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
bg = new JPanel();
bg.setSize(300, 200);
bg.setLocation(0, 0);
bg.setLayout(null);
bg.setBackground(Color.black);
bg.setVisible(true);
btn1 = new JButton("open 1");
btn1.setSize(135, 30);
btn1.setLocation(10, 10);
btn1.addActionListener(this);
btn2 = new JButton("open 2");
btn2.setSize(135, 30);
btn2.setLocation(155, 10);
btn2.addActionListener(this);
bg.add(btn1);
bg.add(btn2);
f.add(bg);
}
public static void main(String[] args) {
new Frame();
}
@Override
public void actionPerformed(ActionEvent a) {
if (a.getSource() == btn1){
}
if (a.getSource() == btn2){
}
}
}
////////////////////// panel1
package panel;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
public class panel1 implements ActionListener {
public JButton btn3;
public panel1(){
JPanel a = new JPanel();
a.setSize(280, 110);
a.setLocation(155, 10);
a.setBackground(Color.red);
a.setVisible(true);
btn3 = new JButton("open bb");
btn3.setSize(100, 30);
btn3.setLocation(10, 10);
btn3.addActionListener(this);
a.add(btn3);
}
@Override
public void actionPerformed(ActionEvent a) {
if (a.getSource() == btn3){
}
}
}
//////////////////////////// panel2.java
package panel;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
public class panel2 implements ActionListener {
public JButton btn4;
public panel2(){
JPanel b = new JPanel();
b.setSize(280, 110);
b.setLocation(155, 10);
b.setBackground(Color.blue);
b.setVisible(true);
btn4 = new JButton("open");
btn4.setSize(100, 30);
btn4.setLocation(10, 10);
btn4.addActionListener(this);
b.add(btn4);
}
@Override
public void actionPerformed(ActionEvent a) {
if (a.getSource() == btn4){
}
}
}
已嘗試添加一個面板的新實例到'bg'?怎麼了? –
我已經嘗試了許多代碼,如果我沒有記錯,我有一個完全空白的內部jframe(灰色)。 – dazbrad
你是什麼意思的「當任何這些按鈕被按下我想爲panel1或panel2打開」?你確定你不想要某種類型的JDialog實現嗎? –