[Java]グラフィカルインターフェイスを備えた計算機

今回は、イベントのない計算機と純粋なグラフィカルインターフェイスを作成します。結合されたイベント処理を徹底的に調べた後、それをこの記事に追加します。

要件:1〜9の数字、左大括弧、右大括弧、加算、減算、乗算、除算、バックスペース、ゼロ、および計算キーのボタンがあります。

それはこのようになります。
ここに画像の説明を挿入
それは、ここで見つけるのは簡単だ私は何を使用することである:表示枠と操作ボタンがJPanelのであり、そして以下のすべてのボタンは、のJPanelです。

私の考えは、FlowLayoutレイアウトを使用して「バックスペース」ボタンと「クリア」ボタンをJPanelに配置し、次にJPanelと表示ボックスを新しいJPanelに配置します。以下については、1つであることが簡単にわかります5×4 GridLayoutレイアウトのJPanelが利用可能になりました。

コアコードは次のとおりです。

/******显示框和两个按钮是网格布局*******/
viewPanel jp1 = new viewPanel();
add(jp1,BorderLayout.NORTH);
JButton jb1 = new JButton("清空");jp1.add(jb1);
JButton jb2 = new JButton("回退");jp1.add(jb2);//两个button是flow布局
JPanel jp2 = new JPanel(new GridLayout(2,1));//两行,每行一个组件
JTextField jt = new JTextField();jp2.add(jt);jp2.add(jp1);//jp1和显示框放到jp2里
container.add(jp2);//一定要放到内容网格上

この部分では、上部の2つのレイアウトを設定します。自分でviewPanelというタイプを設定した理由については、後で説明します。

JPanel jp3 = new JPanel(new GridLayout(5,4));//五行四列
JButton jbs1 = new JButton("(");jp3.add(jbs1);
JButton jbs2 = new JButton(")");jp3.add(jbs2);
JButton jbs3 = new JButton("/");jp3.add(jbs3);
JButton jbs4 = new JButton("*");jp3.add(jbs4);
JButton jbs5 = new JButton("7");jp3.add(jbs5);
JButton jbs6 = new JButton("8");jp3.add(jbs6);
JButton jbs7 = new JButton("9");jp3.add(jbs7);
JButton jbs8 = new JButton("-");jp3.add(jbs8);
JButton jbs9 = new JButton("4");jp3.add(jbs9);
JButton jbs10 = new JButton("5");jp3.add(jbs10);
JButton jbs11 = new JButton("6");jp3.add(jbs11);
JButton jbs12 = new JButton("+");jp3.add(jbs12);
JButton jbs13 = new JButton("1");jp3.add(jbs13);
JButton jbs14 = new JButton("2");jp3.add(jbs14);
JButton jbs15 = new JButton("3");jp3.add(jbs15);
JButton jbs16 = new JButton("=");jp3.add(jbs16);
JButton jbs17 = new JButton("%");jp3.add(jbs17);
JButton jbs18 = new JButton("0");jp3.add(jbs18);
JButton jbs19 = new JButton(".");jp3.add(jbs19);
JButton jbs20 = new JButton("=");jp3.add(jbs20);
container.add(jp3);

ここではばかげているようです。設定する必要のある文字を文字列または配列に入れようとしましたが、エラーが発生し続けます。エラーコードを投稿します。素晴らしい神がいれば、本当に感謝します!

エラーコード:

JPanel jp3 = new JPanel(new GridLayout(5,4));//五行四列
String buttonStr = "()/*789-456+123=%0.张";
ArrayList<String>list = new ArrayList<String>();
list.add(buttonStr);
//JButton[] jbs = new JButton[20];
for(int i=0;i<buttonStr.length();++i){
    
    
//jp3.addButton(jp3,buttonStr.substring(i,i+1));
//jbs[i].add(list.get(i));
list.add(buttonStr);
JButton jbs = new JButton(list.get(i));
jp3.add(jbs);
}

トピックに戻ると、上記は計算機全体を2つの部分(jp2とjp3)に分割したと言えます。現時点では、これら2つの部分をレイアウトに分割するには、全体のレイアウトをBorderLayoutとして設定します。 NORTHと1つのセンターに配置します。

/*******给总体applet设定border布局*******/
this.setLayout(new BorderLayout());
this.add(jp2,"North");
this.add(jp3,"Center");

上記の別の変数タイプのviewPanelを書き込む理由は、jp2を北に配置した後、デフォルトの高さが次のように非常に小さくなるためです。JPanel ここに画像の説明を挿入
を継承するクラスを記述し、setPreferredSizeを再利用して設定します。特定のJPanelのサイズを決定します。

class viewPanel extends JPanel{
    
    
	public viewPanel(){
    
    
		//setLayout(null);
		//setSize(400,200);
		setPreferredSize(new Dimension(500,100));
	}
}

ここで私の質問は、ウィンドウ全体の幅とは異なる幅に設定されていても、ウィンドウの幅は維持されるということですか?また、インターネット上ではsetLayout(null)が必要と言われていますが、この行を追加した後、2つのボタンの位置を変更する必要があります。nullを設定しなくても問題ありません。

グラフィカルインターフェイスのコードは次のとおりです。

package calculation;
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.io.IOException;
import javax.imageio.*;
public class C extends JFrame {
    
    

	private JPanel contentPane;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) throws IOException{
    
    
		C frame = new C();

	}

	/**
	 * Create the frame.
	 * @throws IOException 
	 */
	public C() throws IOException {
    
    
		setTitle("张致远的计算器");//设置窗口标题
		setSize(500,800);//设置窗口尺寸
		setLocationRelativeTo(null);//窗体居中显示
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗口是否可以关闭	

		Container container = getContentPane();//获取当前窗体的内容网格
		
		/******显示框和两个按钮是网格布局*******/
		viewPanel jp1 = new viewPanel();
		add(jp1,BorderLayout.NORTH);
		JButton jb1 = new JButton("清空");jp1.add(jb1);
		JButton jb2 = new JButton("回退");jp1.add(jb2);//两个button是flow布局
		JPanel jp2 = new JPanel(new GridLayout(2,1));//两行,每行一个组件
		JTextField jt = new JTextField();jp2.add(jt);jp2.add(jp1);//jp1和显示框放到jp2里
		container.add(jp2);//一定要放到内容网格上
		
	/*	JPanel jp3 = new JPanel(new GridLayout(5,4));//五行四列
	*	String buttonStr = "()/*789-456+123=%0.张";
	*	ArrayList<String>list = new ArrayList<String>();
	*	list.add(buttonStr);
	*	//JButton[] jbs = new JButton[20];
	*	for(int i=0;i<buttonStr.length();++i){
	*		//jp3.addButton(jp3,buttonStr.substring(i,i+1));
	*		//jbs[i].add(list.get(i));
	*		list.add(buttonStr);
	*		JButton jbs = new JButton(list.get(i));
	*		jp3.add(jbs);
	*	}
	*/
		JPanel jp3 = new JPanel(new GridLayout(5,4));//五行四列
		JButton jbs1 = new JButton("(");jp3.add(jbs1);
		JButton jbs2 = new JButton(")");jp3.add(jbs2);
		JButton jbs3 = new JButton("/");jp3.add(jbs3);
		JButton jbs4 = new JButton("*");jp3.add(jbs4);
		JButton jbs5 = new JButton("7");jp3.add(jbs5);
		JButton jbs6 = new JButton("8");jp3.add(jbs6);
		JButton jbs7 = new JButton("9");jp3.add(jbs7);
		JButton jbs8 = new JButton("-");jp3.add(jbs8);
		JButton jbs9 = new JButton("4");jp3.add(jbs9);
		JButton jbs10 = new JButton("5");jp3.add(jbs10);
		JButton jbs11 = new JButton("6");jp3.add(jbs11);
		JButton jbs12 = new JButton("+");jp3.add(jbs12);
		JButton jbs13 = new JButton("1");jp3.add(jbs13);
		JButton jbs14 = new JButton("2");jp3.add(jbs14);
		JButton jbs15 = new JButton("3");jp3.add(jbs15);
		JButton jbs16 = new JButton("=");jp3.add(jbs16);
		JButton jbs17 = new JButton("%");jp3.add(jbs17);
		JButton jbs18 = new JButton("0");jp3.add(jbs18);
		JButton jbs19 = new JButton(".");jp3.add(jbs19);
		JButton jbs20 = new JButton("=");jp3.add(jbs20);
		
		container.add(jp3);
		
		/*******给总体applet设定border布局*******/
		this.setLayout(new BorderLayout());
		this.add(jp2,"North");
		this.add(jp3,"Center");
		
		setVisible(true);
		//setBackground(Color.BLACK);
	}
	
	class viewPanel extends JPanel{
    
    
		public viewPanel(){
    
    
			//setLayout(null);
			//setSize(400,200);
			setPreferredSize(new Dimension(500,100));
		}
	}

}

インシデントの処理については、過去数日間の調査が追加されるのを待ちます。

おすすめ

転載: blog.csdn.net/qq_44899247/article/details/107347213