溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

用JAVA寫文本編輯器的方法是什么

發(fā)布時間:2021-11-16 09:05:46 來源:億速云 閱讀:114 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容介紹了“用JAVA寫文本編輯器的方法是什么”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

下面我們要實現(xiàn)的是一個點擊選擇文本格式的窗口,這里同樣是要畫一個窗口,跟(二)差不多。要實現(xiàn)的功能呢,主要是有幾個ComboBox彈出list出來,選中的屬性改變下面的文本。最下面兩個按鈕,確定則主窗口文本改變,取消則不改變。

在這里我建議大家可以先重新開一個工程,然后一步一步的測試完成后,將代碼拷回來,把main刪掉就可以了。

剛剛提到的界面最上方有幾個下拉框,這個需要用JComboBox實現(xiàn),而內(nèi)容的填充呢,需要相對應(yīng)的數(shù)組。   

public class about_Format extends JFrame{
 
	private JComboBox choose_word_style;
	private JComboBox choose_word_big;
	private JComboBox choose_word_pattern;
	private JComboBox choose_word_color;
	
	private String[] styles = {"宋體","黑體","楷體","微軟雅黑","隸書"};
	private String[] colors = {"紅色","藍(lán)色","綠色","黑色","白色","黃色"};
	private String[] word_big = {"2","4","8","16","24","32","64","72"};
	private String[] pattern = {"常規(guī)","傾斜","粗體"};
	
	private JPanel paneNorth;//用于裝四個ComboBox
	
	public about_Format() {
		  initBox();
		  initLocation();
		  
		  this.setSize(550,200);
		  this.setTitle("文字格式");
		  this.setVisible(true);
		  this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
	  }
	
	/**
	   * 初始化布局
	   * 將每個控件按照一定得布局排在this窗口中
	   */
	  public void initLocation() {
		  paneNorth = new JPanel();
		  paneNorth.add(new JLabel("字體:"));
		  paneNorth.add(choose_word_style);
		  paneNorth.add(new JLabel("字號:"));
		  paneNorth.add(choose_word_big);
		  paneNorth.add(new JLabel("字形:"));
		  paneNorth.add(choose_word_pattern);
		  paneNorth.add(new JLabel("顏色:"));
		  paneNorth.add(choose_word_color);
		  this.add(paneNorth,BorderLayout.NORTH);
		  
		  
		  
	  }
	
	/**
  	 * 初始化幾個comboBox 
  	 * 把相應(yīng)的選項加入
  	 */
  public void initBox() {
	  choose_word_style = new JComboBox(styles);
	  choose_word_big = new JComboBox(word_big);
	  choose_word_pattern = new JComboBox(pattern);
	  choose_word_color = new JComboBox(colors);
  }
  
  public static void main(String[] args) {
		about_Format a = new about_Format();
	}
}

首先我們在類內(nèi)聲明了變量,然后通過initBox()方法,進(jìn)行初始化,這樣顯得結(jié)構(gòu)比較整齊。方法內(nèi)將comboBox實例化,并且將相應(yīng)的字符串?dāng)?shù)組放入,這樣list效果就會出來了。

接下來,我們需要一個容器panel來把四個JComboBox裝進(jìn)去,所以在initLocation()方法里實例化一個panel,把一大堆JLabel,JComboBox裝進(jìn)去了。然后再將panel裝進(jìn)父窗體,設(shè)置屬性north。

下來是一個文本顯示區(qū)域,可以有很多種,我這里選了JTextField,這里需要提前講一下,這里我還提前定義了一堆的字體屬性,是為了最終子父窗體屬性的影響而存在的,這里不需要在意:

public class about_Format extends JFrame{
 
	...
	
	private JPanel paneNorth;//用于裝四個ComboBox
	private JPanel paneCenter;
	
	private JTextField showText ;
	// 用一個font來裝選中的的屬性,每選中一次,對對應(yīng)的屬性修改
		//然后集成一個font里進(jìn)行修改
		//對selectedFont 設(shè)置默認(rèn)屬性
		private Font selectedFont = new Font("黑體",Font.PLAIN, 32);
		private String selectedStyle = "宋體";
		private int selectedBig = 32;
		private int selectedPattern = Font.PLAIN;
		private Color selectedColor = Color.BLACK;
	
	public about_Format() {
		  initBox();
		  initText(); // 這里要放在Location前因為initText里有元素被Location訪問 否則會出現(xiàn)空指針異常
		  initLocation();
		  
		  
		  this.setSize(550,200);
		  this.setTitle("文字格式");
		  this.setVisible(true);
		  this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
	  }
	
	/**
	   * 初始化布局
	   * 將每個控件按照一定得布局排在this窗口中
	   */
	  public void initLocation() {
		  paneNorth = new JPanel();
		  ...
		  
		  paneCenter = new JPanel();
		  paneCenter.add(showText);
		  this.add(paneCenter, BorderLayout.CENTER);
		  
	  }
	  
	  /**
	  	 * 初始化展示字體區(qū)域
	  	 */
	  	public void initText() {
		  showText = new JTextField("字體展示");
		  showText.setFont(selectedFont);
		  showText.setEditable(false);
		  showText.setSize(100,160);
		  //showText.setForeground(Color.red);
	  }
	
	/**
  	 * 初始化幾個comboBox 
  	 * 把相應(yīng)的選項加入
  	 */
  public void initBox() {
	  ...
  }
  
  public static void main(String[] args) {
		about_Format a = new about_Format();
	}
}

相信到這里大家的思路都清晰了吧,其實沒有那么復(fù)雜。我們只需要把每一個部件拆開來看,一個個的去實現(xiàn)就可以了。

接下來我們只需要添加兩個按鈕,然后統(tǒng)一響應(yīng)JComboBox和Button的事件就好了,照例在面板下部添加button,然后繼承接口,處理回調(diào)事件。

添加兩個button的代碼:

public class about_Format extends JFrame{
 
	...
	
	private JPanel paneNorth;//用于裝四個ComboBox
	private JPanel paneCenter;
	private JPanel paneSouth;
	
	private JButton btn_ok;
	private JButton btn_cancel;
	
	private JTextField showText ;
	...
	
	public about_Format() {
		  initBox();
		  initText();
		  initButton();
		  initLocation();
		  
		  
		  this.setSize(550,200);
		  this.setTitle("文字格式");
		  this.setVisible(true);
		  this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
	  }
	
	/**
	   * 初始化ok 和cancel 兩個按鈕
	   */
	  private void initButton() {
		  btn_ok = new JButton("OK");
		  btn_cancel = new JButton("CANCEL");
		}
	
	/**
	   * 初始化布局
	   * 將每個控件按照一定得布局排在this窗口中
	   */
	  public void initLocation() {
		  ...
		  this.add(paneCenter, BorderLayout.CENTER);
		  
		  paneSouth = new JPanel();
		  paneSouth.add(btn_ok);
		  paneSouth.add(btn_cancel);
		  this.add(paneSouth, BorderLayout.SOUTH);
	  }
	  
	  /**
	  	 * 初始化展示字體區(qū)域
	  	 */
	  	public void initText() {
		  showText = new JTextField("字體展示");
		  showText.setFont(selectedFont);
		  showText.setEditable(false);
		  showText.setSize(100,160);
		  //showText.setForeground(Color.red);
	  }
	
	/**
  	 * 初始化幾個comboBox 
  	 * 把相應(yīng)的選項加入
  	 */
  public void initBox() {
	  ...
  }
  
  public static void main(String[] args) {
		about_Format a = new about_Format();
	}
}

下面統(tǒng)一添加監(jiān)聽器,這回我們用ItemListener,ActionListener兩個接口,我們可以把button跟item分開來。如果想要統(tǒng)一監(jiān)聽也可以自己改。

添加監(jiān)聽器后代碼:

public class about_Format extends JFrame implements ItemListener,ActionListener{
 
	...
	
	...
	
	private JButton btn_ok;
	private JButton btn_cancel;
	
	private JTextField showText ;
	// 用一個font來裝選中的的屬性,每選中一次,對對應(yīng)的屬性修改
		//然后集成一個font里進(jìn)行修改
		//對selectedFont 設(shè)置默認(rèn)屬性
		private Font selectedFont = new Font("黑體",Font.PLAIN, 32);
		private String selectedStyle = "宋體";
		private int selectedBig = 32;
		private int selectedPattern = Font.PLAIN;
		private Color selectedColor = Color.BLACK;
	
	public about_Format() {
		  initBox();
		  initText();
		  initButton();
		  initLocation();
		  initListener();
		  addBtnListener();
		  
		  this.setSize(550,200);
		  this.setTitle("文字格式");
		  this.setVisible(true);
		  this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
	  }
	
	/**
	   * 時間監(jiān)聽回調(diào)函數(shù)
	   * 對每個item做出事件響應(yīng)
	   */
	  @Override
	  public void itemStateChanged(ItemEvent e) {
		  if (e.getItem() == "宋體") {
			  selectedStyle = "宋體";
			  renewFont();
		  }else if (e.getItem() == "黑體") {
			  selectedStyle = "黑體";
			  renewFont();
		  }else if (e.getItem() == "楷體") {
			  selectedStyle = "楷體";
			  renewFont();
		  }else if (e.getItem() == "微軟雅黑") {
			  selectedStyle = "微軟雅黑";
			  renewFont();
		  }else if (e.getItem() == "隸書") {
			  selectedStyle = "隸書";
			  renewFont();
		  }else if (e.getItem() == "常規(guī)") {
			  selectedPattern = Font.PLAIN;
			  renewFont();
		  }else if (e.getItem() == "傾斜") {
			  selectedPattern = Font.ITALIC;
			  renewFont();
		  }else if (e.getItem() == "粗體") {
			  selectedPattern = Font.BOLD;
			  renewFont();
		  }else if (e.getItem() == "2") {
			  selectedBig = 2;
			  renewFont();
		  }else if (e.getItem() == "4") {
			  selectedBig = 4;
			  renewFont();
		  }else if (e.getItem() == "8") {
			  selectedBig = 8;
			  renewFont();
		  }else if (e.getItem() == "16") {
			  selectedBig = 16;
			  renewFont();
		  }else if (e.getItem() == "24") {
			  selectedBig = 24;
			  renewFont();
		  }else if (e.getItem() == "32") {
			  selectedBig = 32;
			  renewFont();
		  }else if (e.getItem() == "64") {
			  selectedBig = 64;
			  renewFont();
		  }else if (e.getItem() == "72") {
			  selectedBig = 72;
			  renewFont();
		  }else if (e.getItem() == "紅色") {
			  selectedColor = Color.red;
			  renewFont();
		  }else if (e.getItem() == "黑色") {
			  selectedColor = Color.black;
			  renewFont();
		  }else if (e.getItem() == "藍(lán)色") {
			  selectedColor = Color.blue;
			  renewFont();
		  }else if (e.getItem() == "黃色") {
			  selectedColor = Color.yellow;
			  renewFont();
		  }else if (e.getItem() == "綠色") {
			  selectedColor = Color.green;
			  renewFont();
		  }else if (e.getItem() == "白色") {
			  selectedColor = Color.WHITE;
			  renewFont();
		  }
	  }
	  
	  /**
	   * 兩個btn的監(jiān)聽事件回調(diào)
	   * @param arg0
	   */
	  @Override
	  public void actionPerformed(ActionEvent e) {
		  if (e.getSource() == btn_cancel) {
			  this.dispose();//銷毀當(dāng)前窗口
		  }else if (e.getSource() == btn_ok) { // 調(diào)用父窗體的實例,拿到textarea并對其setFont
			  //fileManagement.getEdit_text_area().setFont(selectedFont); // 這里的Edit_text_area設(shè)置為靜態(tài)變量static 函數(shù)也一樣  這樣才能調(diào)用
			  //fileManagement.getEdit_text_area().setForeground(selectedColor); // 設(shè)置顏色
			  // 在父窗口內(nèi)必須將Edit_text_area設(shè)置為static變量(靜態(tài)變量)
			  // 靜態(tài)變量的特點是,已經(jīng)對象一經(jīng)實例化(test1被new出來) 其中的靜態(tài)變量也會在內(nèi)存中存在,一直持續(xù)到實例被銷毀
			  // 這時我們我們可以對其進(jìn)行訪問 
			  
			  /*test1 t1 = new test1();
			  t1.getEdit_text_area().setFont(selectedFont);*/
			  /**
			   * 以上這個方法是不行的,因為會通過實例化test1 窗口來設(shè)置一個新的Font的窗口,與我們想要的效果不相符
			   * 我們想要的是在原父窗口內(nèi)將其字體改變格式
			   */
			  this.dispose();
		  }
	  }
	  
	  public void renewFont() {
		  selectedFont = new Font(selectedStyle,selectedPattern,selectedBig);
		  showText.setFont(selectedFont);
		  showText.setForeground(selectedColor);
	  }
	  
	/**
	   * 對ComboBox添加監(jiān)聽器
	   */
	  private void initListener() {
		  choose_word_style.addItemListener(this);
		  choose_word_big.addItemListener(this);
		  choose_word_pattern.addItemListener(this);
		  choose_word_color.addItemListener(this);
	  }
	
	/**
	   * 給兩個btn添加監(jiān)聽器
	   */
	  public void addBtnListener() {
		  btn_ok.addActionListener(this);
		  btn_cancel.addActionListener(this);
	  }
	
	/**
	   * 初始化ok 和cancel 兩個按鈕
	   */
	  private void initButton() {
		  btn_ok = new JButton("OK");
		  btn_cancel = new JButton("CANCEL");
		}
	
	/**
	   * 初始化布局
	   * 將每個控件按照一定得布局排在this窗口中
	   */
	  public void initLocation() {
		  ...
	  }
	  
	  /**
	  	 * 初始化展示字體區(qū)域
	  	 */
	  	public void initText() {
		  ...
	  }
	
	/**
  	 * 初始化幾個comboBox 
  	 * 把相應(yīng)的選項加入
  	 */
  public void initBox() {
	  ...
  }
  
  public static void main(String[] args) {
		about_Format a = new about_Format();
	}
}

大家可能被嚇到了,一下子跳出來那么多代碼。莫慌,這里一個個分析還是很簡單的。剛才也說過了,我們現(xiàn)在需要對button和item添加監(jiān)聽器,然后在回調(diào)函數(shù)里處理就好了,至于處理的內(nèi)容。無非就是兩個button點擊然后關(guān)閉窗口。item選擇對showText改變Font,至于怎么變,前面我們聲明的selected屬性就很有用了,可以通過他們減少很多代碼量。這里不需要多說,大家看一眼就明白了。

OK,到這里,一個完整的可以選擇文本格式的小窗口已經(jīng)獨立的出來了。那我們接下來就是把除了main之外的其他內(nèi)容拷到原來的工程里,當(dāng)然要新建一個.java。完成之后,我們就可以考慮btn_ok點擊的時候主窗體文本改變的問題。

不多說,首先在父窗體的actionPerformed里處理事件,把a(bǔ)bout_Format窗口彈出來再說。

在主窗體.java內(nèi),將JTextArea 設(shè)置為static,然后給一個getter 方法:       

private static JTextArea edit_text_area;
 //private JTextArea edit_text_area; // 原來
public static JTextArea getEdit_text_area() {
 //public JTextArea getEdit_text_area() { 
  return edit_text_area;
 }

在about_Format.java里給btn_ok添加事件:

else if (e.getSource() == btn_ok) { // 調(diào)用父窗體的實例,拿到textarea并對其setFont
     test5.getEdit_text_area().setFont(selectedFont); // 這里的Edit_text_area設(shè)置為靜態(tài)變量static 函數(shù)也一樣  這樣才能調(diào)用
     //fileManagement.getEdit_text_area().setForeground(selectedColor); // 設(shè)置顏色
     // 在父窗口內(nèi)必須將Edit_text_area設(shè)置為static變量(靜態(tài)變量)
     // 靜態(tài)變量的特點是,已經(jīng)對象一經(jīng)實例化(test1被new出來) 其中的靜態(tài)變量也會在內(nèi)存中存在,一直持續(xù)到實例被銷毀
     // 這時我們我們可以對其進(jìn)行訪問 
     
     /*test1 t1 = new test1();
     t1.getEdit_text_area().setFont(selectedFont);*/
     /**
      * 以上這個方法是不行的,因為會通過實例化test1 窗口來設(shè)置一個新的Font的窗口,與我們想要的效果不相符
      * 我們想要的是在原父窗口內(nèi)將其字體改變格式
      */
     this.dispose();
    }

“用JAVA寫文本編輯器的方法是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI