【发布时间】:2014-02-27 20:09:16
【问题描述】:
不久前,我开始了一个项目,该项目很快就构建了大量代码,大部分代码都是由组件及其属性组成的。一切都很顺利,直到我遇到错误。头顶上,错误是超出了构造函数的代码限制,大约 65000 字节。
这个错误确实让我和我的项目停止了。同时我也发现自己对 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(灰色)。
-
“当按下这些按钮中的任何一个时,我希望 panel1 或 panel2 打开”是什么意思?你确定你不想要某种类型的 JDialog 实现吗?
-
大声笑,我以为有人会这么说。我的意思是,如果按下 btn1,panel1 会显示在 jframe 中。当按下 btn2 时,我希望 panel2 被显示。对不起,我的错。
-
您希望面板作为新窗口打开还是仅在框架内打开?
标签: java swing jframe jpanel add