2015-04-03 38 views
-2

什麼是編寫(在Java Swing中)多個可操作對象之間/從多個可操作對象之間的依賴關係的正確方法?來自多個可操作對象的Java Swing依賴關係

E.g.假設我們有2個JButton對象和2個其他GUI對象(例如2個JLabel對象) 單擊JButton1時,JLabel1應該變爲可見,並將其文本更改爲「NewText1」,而JLabel2應該變爲不可見。 單擊JButton2時,JLabel1應該變爲不可見,而JLabel2應該變爲可見並將其文本更改爲「NewText2」。

我想出了一對解決方案,其中沒有一個我喜歡我自己 (主要基於子類JLabel對象,以確保具有不同的ActionPerformed方法,然後將它們註冊爲使用JButtons的偵聽器)。 但是這並沒有擴展,因爲對於每個依賴/偵聽器對象(在本例中爲JLabel),我最終創建了一個新類。隨着GUI對象的激增,所有這些類很快就難以跟蹤和管理。另一方面,我寧願避免使用匿名類,因爲我可能需要從其他代碼段訪問這些GUI元素。

回答

2

當單擊JButton1時,JLabel1應該變爲可見並將其文本更改爲「NewText1」,而JLabel2應該變爲不可見。當單擊JButton2時,JLabel1應該變爲不可見,而JLabel2應該變爲可見並將其文本更改爲「NewText2」。

我啓用了文本,而不是使其可見或不可見。這樣,文本沒有在JPanel中移動。

Two Action Listeners

我寫了兩個動作偵聽器,每個按鈕的功能。

如果您有六個JButton和六個JLabel,那麼您必須編寫六個動作偵聽器。你會爲每個JButton編寫一個動作監聽器。

我會讓動作偵聽器匿名類,但既然你說過你不想要那樣,我就讓它們分開了內部類。

下面是生成GUI的代碼。

package com.ggl.testing; 

import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 

public class TwoActionListeners implements Runnable { 

    private JFrame frame; 

    private JLabel label1; 
    private JLabel label2; 

    @Override 
    public void run() { 
     frame = new JFrame("Two Action Listeners"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JPanel mainPanel = new JPanel(); 
     mainPanel.setLayout(new FlowLayout(FlowLayout.LEADING, 30, 5)); 

     JButton button1 = new JButton("Button 1"); 
     button1.addActionListener(new Button1ActionListener()); 
     mainPanel.add(button1); 

     JButton button2 = new JButton("Button 2"); 
     button2.addActionListener(new Button2ActionListener()); 
     mainPanel.add(button2); 

     label1 = new JLabel("New Text 1"); 
     mainPanel.add(label1); 

     label2 = new JLabel("New Text 2"); 
     mainPanel.add(label2); 

     frame.add(mainPanel); 

     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new TwoActionListeners()); 
    } 

    public class Button1ActionListener implements ActionListener { 

     @Override 
     public void actionPerformed(ActionEvent event) { 
      label1.setEnabled(true); 
      label2.setEnabled(false); 
     } 

    } 

    public class Button2ActionListener implements ActionListener { 

     @Override 
     public void actionPerformed(ActionEvent event) { 
      label1.setEnabled(false); 
      label2.setEnabled(true); 
     } 

    } 

} 
+0

Thanks @Gilbert Le Blanc! – Pedja 2015-04-04 00:02:11