1. 程式人生 > >【java作業】GUI佈局、選單、事件

【java作業】GUI佈局、選單、事件

設計兩個介面,不需要實現功能,在同一個frame中利用選單切換兩個介面。
這裡寫圖片描述

檔案結構如下:
結構
程式碼如下:

/*java第十一週實驗
 *[email protected]
 *JNU 計科1604 2018-04-24
 */
//CalculatorFrame.java
package window;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JButton;
import
javax.swing.JPanel; import javax.swing.JTextField; public class CalculatorFrame extends JPanel { private JButton[] keys; private JPanel keyPadJPanel; private JTextField lcdJTextField; // constructor sets up GUI public CalculatorFrame(){ //super("Calculator"); lcdJTextField = new
JTextField(20); lcdJTextField.setEditable(true); keys = new JButton[16]; //按鈕佈局4*4 setLayout(new BorderLayout()); // 數字按鈕的初始化 String sign = "789/456*123-0.=+"; Font bottonFont = new Font("Consolas",Font.BOLD,40);//設定統一字型 for(int i=0;i<16;i++) { char c = sign.charAt(i); keys[i] = new
JButton(String.valueOf(c)); keys[i].setFont(bottonFont); if((i+1)%4!=0) { keys[i].setForeground(Color.BLACK ); keys[i].setBackground(Color.LIGHT_GRAY); } else { keys[i].setForeground(Color.WHITE); keys[i].setBackground(Color.ORANGE); } } // 按鈕網格佈局 keyPadJPanel = new JPanel(); keyPadJPanel.setLayout(new GridLayout(4, 4)); //加入按鈕 注意順序 for(int i=0;i<16;i++) { keyPadJPanel.add(keys[i]); } add(lcdJTextField, BorderLayout.NORTH); add(keyPadJPanel, BorderLayout.CENTER); } } // end class CalculatorFrame
//Calculator.java
package window;

import java.awt.*;
import javax.swing.*;
public class Calculator extends CalculatorFrame {
   public Calculator() {
       //setLayout(new BorderLayout());
      CalculatorFrame calculatorFrame = new CalculatorFrame(); 
     //calculatorFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      // 設定大小
      calculatorFrame.setSize(400, 650); 
      // 顯示
      calculatorFrame.setVisible(false); 
   } 
}
//ColorSelectFrame.java
package window;

import java.awt.BorderLayout;
import java.awt.Font;

import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JPanel;

public class ColorSelectFrame extends JPanel {
   private JButton okJButton;
   private JButton cancelJButton;
   private JCheckBox backgroundJCheckBox;
   private JCheckBox foregroundJCheckBox;
   private JComboBox<String> colorJComboBox;
   private JPanel panel;
   private JPanel panel2;

   // constructor creates components and adds them to applet
   public ColorSelectFrame() {
     // super("ColorSelect");

      setLayout(new BorderLayout());
      //設定下拉選項條
      colorJComboBox = new JComboBox<String>();
      colorJComboBox.addItem("RED");
      colorJComboBox.addItem("BLUE");
      colorJComboBox.addItem("GREEN");
      add(colorJComboBox, BorderLayout.NORTH); 


      panel = new JPanel(); // 建立panel

      Font boxFont = new Font("Consolas",Font.BOLD,16);//設定統一字型
      //設定勾選框
      backgroundJCheckBox = new JCheckBox("Background"); 
      backgroundJCheckBox.setFont(boxFont );
      foregroundJCheckBox = new JCheckBox("Foreground");
      foregroundJCheckBox.setFont(boxFont );
      panel.add(backgroundJCheckBox);
      panel.add(foregroundJCheckBox); 
      add(panel, BorderLayout.CENTER);
      //設定按鈕
      okJButton = new JButton("Ok"); 
      cancelJButton = new JButton("Cancel"); 
      panel2 = new JPanel(); 
      panel2.add(okJButton);
      panel2.add(cancelJButton); 
      add(panel2, BorderLayout.SOUTH); 
   } 
} 
//ColorSelect.java
package window;

import java.awt.*;
import javax.swing.*;

public class ColorSelect extends ColorSelectFrame{
    ColorSelect() {
      ColorSelectFrame colorSelectFrame = new ColorSelectFrame(); 
      //colorSelectFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      colorSelectFrame.setSize(400, 650);
      colorSelectFrame.setVisible(false); 
   } 
}
//ConbinedWindow.java
package window;

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class CombinedWindow extends JFrame implements ActionListener {

    JPanel panel;
    JMenuBar bar;
    JMenu menu;
    JMenuItem itemCalculator,itemColorSelect;
    BorderLayout layout = new BorderLayout();
    Calculator card1;
    ColorSelect card2;

    public CombinedWindow() {
        // TODO Auto-generated constructor stub
        init();
        setBounds(100, 100, 400, 600);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public void init() {
        bar = new JMenuBar();
        menu = new JMenu("選單");
        itemCalculator = new JMenuItem("計算器");
        itemColorSelect = new JMenuItem("顏色選擇器");

        panel = new JPanel();

        card1 = new Calculator();
        card2 = new ColorSelect();

        itemCalculator.addActionListener(this);
        itemColorSelect.addActionListener(this);

        bar.add(menu);
        menu.add(itemCalculator);
        menu.add(itemColorSelect);

        panel.setLayout(layout);
        add(panel);
        setJMenuBar(bar);
    }
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == itemCalculator) {
            panel.removeAll();
            panel.add(card1);
            panel.validate();
            repaint();
        }
        else if(e.getSource() == itemColorSelect) {
            panel.removeAll();
            panel.add(card2);
            panel.validate();
            repaint();
        }
    }
}
//Test.java
package window;

public class Test {
    public static void main(String args[]){
        CombinedWindow wi = new CombinedWindow();
        wi.setTitle("介面切換");
    }
}

執行結果截圖:
這裡寫圖片描述

相關推薦

java作業GUI佈局選單事件

設計兩個介面,不需要實現功能,在同一個frame中利用選單切換兩個介面。 檔案結構如下: 程式碼如下: /*java第十一週實驗 *[email protected] *JN

Java基礎類的例項化static父類建構函式執行順序

重溫java基礎,以免自己以後犯原則性錯誤,這是最基本,最基礎的東西。 直接上程式碼: A.java public class A { int a1 = 8; int a2 = getA2(); { int a3 = 9; System.out.pr

Java程式設計DOM XML Parser解析遍歷建立XML

1、前言 DOM XML Parser介紹 DOM 是 W3C 處理 XML 的標準 API,它是許多其它與 XML 處理相關的標準的基礎,不僅是 Java,其它諸如 Javascript,PHP,MS .NET 等等語言都實現了該標準,成為了應用最為廣泛的 XML 處理方

java程式設計GUI之綜合練習(二)

1.選單的包含關係 下面是一個簡單的示例: 需求:實現一個簡單的記事本,功能包括:開啟,儲存,退出 import java.awt.*; import java.awt.event.*; import java.io.*; class MenuDemo { publi

java學習GUI 圖形程式設計

1,相關外掛 對於新手來說,不要在一開始使用此類外掛。當你能自己寫出來程式碼的時候,才是使用此類外掛的時候,為了加快開發效率。加油! 1)eclipse windowbuilder視覺化設計介面 ①安裝 登陸網址:http://eclipse.org/windo

Java.NIOSelectionKey,***監聽的事件***

java.nio.channels public abstract class SelectionKey extends Object SelectionKey物件是用來跟蹤註冊事件的控制代碼。 在SelectionKey物件的有效期間,Selector會一直監控與Sel

轉載:Java基礎InputStream InputStreamReader和BufferedReader

gen 結果 取字符 sys try eight string font buffer 來源:http://blog.csdn.net/zgljl2012/article/details/47267609 在Java中,上述三個類經常用於處理數據流,下面介紹一下三個類的

java測試JunitMock+代碼覆蓋率

tput 活性 插件 報告 tsa println doc 彈出 exe 原文見此處 單元測試是編寫測試代碼,用來檢測特定的、明確的、細顆粒的功能。單元測試並不一定保證程序功能是正確的,更不保證整體業務是準備的。 單元測試不僅僅用來保證當前代碼的正確性,更重要的是用來保證代

由淺入深理解java集合(一)——集合框架 CollctionMap

list 值傳遞 基本 深入 基本功 shu 叠代 簡單 () 本篇文章主要對java集合的框架進行介紹,使大家對java集合的整體框架有個了解。具體介紹了Collection接口,Map接口以及Collection接口的三個子接口Set,List,Queue。   

Vj作業拓撲排序經典理解題Ordering Tasks 1Kahn算法;2基於DFS的算法。

pri from have for 失敗 dep empty enc there 2018-02-13 鏈接 https://cn.vjudge.net/contest/211129#problem/D John has n tasks to do. Unfortuna

Java程式設計寫入讀取遍歷Properties檔案

在Java開發中通常我們會儲存配置引數資訊到屬性檔案。這種屬性檔案能夠是擁有鍵值對的屬性檔案,也能夠是XML檔案。關於XML檔案的操作,請參考博文【Java程式設計】DOM XML Parser 解析、遍歷、建立XML。 在該篇博文中,我將展示怎樣向屬性檔案寫入鍵值對。怎樣讀取屬性檔案

Java併發CountDownLatchCyclicBarrierSemaphoreExchanger

CountDownLatch、CyclicBarrier、Semaphore、Exchanger CountDownLatch CyclicBarrier Semaphore Exchanger 參考 CountDownLa

Java併發DaemonInterruptWait/NotifyJoinThreadLocalPipe

Daemon、Interrupt、Wait/Notify、Join、ThreadLocal、Pipe 關於執行緒 Daemon Interrupt Wait/Notify Join ThreadLocal Pipe 參考

《瘋狂Java講義(第4版)》-----第8章Java集合(CollectionIteratorSet)

Java集合概述 Java集合本身是封裝的幾種常見的資料結構,只要學習過基本的資料結構課程,便可理解清楚底層的實現細節。由於Java提供封裝好的集合眾多,每個集合暴露的方法眾多,一般記住常用的,其他的知道有就行了,用的時候查詢官方API即可。 Java集合裡存放

《瘋狂Java講義(第4版)》-----第8章Java集合(MapCollections)

Map import java.util.Map; import java.util.HashMap; public class Hello{ public static void main(String[] args){ Map map = new

《瘋狂Java講義(第4版)》-----第11章AWT程式設計(AWT常用元件事件處理)

AWT常用元件 雖說是常用元件,如果不經常使用,還是比較陌生的!!!暫且根據書本列出來一些,先結合書上例項認識之,待之後結合實際案例選擇用之、研究之(參看官方API)! Button Canvas(用於繪圖的畫布) Checkbox CheckboxGroup(

Java學習forwhiledo...while迴圈語句的學習,斐波那契數列例項。

for迴圈: 先判斷再迴圈,適用於迴圈次數已知。 for迴圈語法:for(表示式1;表示式2;表示式3){ 語句; //迴圈體 } 表示式1、3:任意表達式語句或空語句 表示式2:必須為布林型常量、變數或表示式 執行過程: 例項:求1+2+3+…+100的

Java併發JVM記憶體模型

JVM記憶體模型 什麼是Java記憶體模型 Java記憶體模型即Java Memory Model,簡稱JMM。JMM定義了Java 虛擬機器(JVM)在計算機記憶體(RAM)中的工作方式。JVM是整個計算機虛擬模型,所以JMM是隸屬於JVM的。 想要理解Ja

必須知道的八大種排序演算法java實現(三) 歸併排序演算法堆排序演算法詳解

一、歸併排序演算法 基本思想:   歸併(Merge)排序法是將兩個(或兩個以上)有序表合併成一個新的有序表,即把待排序序列分為若干個子序列,每個子序列是有序的。然後再把有序子序列合併為整體有序序列。 歸併排序示例:   合併方法: 設r[i…n]由兩個有序子表r[i…m]和r[m+1…n]組

必須知道的八大種排序演算法java實現(一) 氣泡排序快速排序

氣泡排序   氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢“浮”到數列的頂端。   氣泡排序的示例:   氣