【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.NIO】SelectionKey,***監聽的事件***
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測試】Junit、Mock+代碼覆蓋率
tput 活性 插件 報告 tsa println doc 彈出 exe 原文見此處 單元測試是編寫測試代碼,用來檢測特定的、明確的、細顆粒的功能。單元測試並不一定保證程序功能是正確的,更不保證整體業務是準備的。 單元測試不僅僅用來保證當前代碼的正確性,更重要的是用來保證代
【由淺入深理解java集合】(一)——集合框架 Collction、Map
list 值傳遞 基本 深入 基本功 shu 叠代 簡單 () 本篇文章主要對java集合的框架進行介紹,使大家對java集合的整體框架有個了解。具體介紹了Collection接口,Map接口以及Collection接口的三個子接口Set,List,Queue。
【Vj作業】【拓撲排序經典理解題】Ordering Tasks 1、Kahn算法;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併發】CountDownLatch、CyclicBarrier、Semaphore、Exchanger
CountDownLatch、CyclicBarrier、Semaphore、Exchanger CountDownLatch CyclicBarrier Semaphore Exchanger 參考 CountDownLa
【Java併發】Daemon、Interrupt、Wait/Notify、Join、ThreadLocal、Pipe
Daemon、Interrupt、Wait/Notify、Join、ThreadLocal、Pipe 關於執行緒 Daemon Interrupt Wait/Notify Join ThreadLocal Pipe 參考
《瘋狂Java講義(第4版)》-----第8章【Java集合】(Collection、Iterator、Set)
Java集合概述 Java集合本身是封裝的幾種常見的資料結構,只要學習過基本的資料結構課程,便可理解清楚底層的實現細節。由於Java提供封裝好的集合眾多,每個集合暴露的方法眾多,一般記住常用的,其他的知道有就行了,用的時候查詢官方API即可。 Java集合裡存放
《瘋狂Java講義(第4版)》-----第8章【Java集合】(Map、Collections)
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學習】for、while、do...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實現】(一) 氣泡排序、快速排序
氣泡排序 氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢“浮”到數列的頂端。 氣泡排序的示例: 氣