外部JPanels从JFrame调用

时间:2014-02-27 20:09:17

标签: java swing jframe jpanel add

前段时间我开始了一个很快就构建了大量代码的项目,大部分代码都是由组件及其属性组成的。一切顺利,直到我遇到错误。在顶部,错误是超出构造函数的代码限制,大约65000字节。

这个错误确实让我和我的项目停止了。与此同时,我也发现了我对SWING的理解存在的主要问题。

我尝试将我的游戏代码分解为逻辑部分,将每个部分放入不同的类中。例如,处理买卖的jpanel将是其自己的.java文件。处理运输的另一个jpanel将在另一个.java文件中。

我希望实现的是一个JFrame,当用户在按下jbutton时请求它们时调用每个jpanel。然而,这并不像我希望的那样有效,让我处于需要帮助的位置。

我所做的是通过创建一个示例框架来简化我的问题,希望有人可以指出我需要查看的内容,甚至是解决方案。

我创建了一个JFrame,它包含一个名为bg的面板,它本身包含2个JButton(btn1和btn2)。在另一个类文件中,我创建了一个名为panel1的JPanel,而在另一个类中,我又创建了另一个名为panel2的JPanel。

当用户打开应用程序时,他们会看到一个框架和两个按钮的选项,当按下任何这些按钮时,我想要面板1或 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){

    }
}
}

1 个答案:

答案 0 :(得分:0)

您不需要将面板拆分为不同的类,这很简单。尽量保持一切:

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,panel1,panel2;
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);  

panel1 = new JPanel();
panel1.setSize(280, 110);
panel1.setLocation(155, 10);
panel1.setBackground(Color.red);
panel1.setVisible(false);
bg.add(panel1);

panel2 = new JPanel();
panel2.setSize(280, 110);
panel2.setLocation(155, 10);
panel2.setBackground(Color.blue);
panel2.setVisible(false);
bg.add(panel2);



}

public static void main(String[] args) {
new Frame();
}



@Override
public void actionPerformed(ActionEvent a) {

if (a.getSource() == btn1){
panel1.setVisible(true);panel2.setVisible(false);
}
if (a.getSource() == btn2){
panel1.setVisible(false);panel2.setVisible(true);
}
}
}