有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

来自多个可操作对象的Java Swing依赖项

(在JavaSwing中)编程多个可操作对象之间的依赖关系的正确方法是什么

例如,假设我们有2个JButton对象和2个其他GUI对象(例如2个JLabel对象) 单击JButton1时,JLabel1应变为可见,并将其文本更改为“NewText1”,而JLabel2应变为不可见。 单击JButton2时,JLabel1应不可见,而JLabel2应可见,并将其文本更改为“NewText2”

我想出了几个解决方案,但没有一个我喜欢自己 (主要基于对JLabel对象进行子分类,以确保它们具有不同的ActionPerformed方法,然后将它们注册为JButtons的侦听器)。 但这根本不能扩展,因为对于每个依赖/侦听器对象(在本例中为JLabel),我最终创建了一个新类。 随着GUI对象的激增,所有这些类很快变得难以跟踪和管理。另一方面,我希望避免使用匿名类,因为我可能需要从其他代码段访问这些GUI元素


共 (1) 个答案

  1. # 1 楼答案

    When JButton1 is clicked, JLabel1 should become visible and alter its text to "NewText1", while JLabel2 should become invisible. When JButton2 is clicked, JLabel1 should become invisible, while JLabel2 should become visible and alter its text to "NewText2".

    我启用了文本,而不是使其可见或不可见。这样,文本就不会在JPanel中移动

    Two Action Listeners

    我写了两个动作监听器,每个按钮一个

    如果您有六个jbutton和六个jlabel,则必须编写六个动作侦听器。您将为每个JButton编写一个动作侦听器

    我本来会让action listeners成为匿名类,但既然你说你不想这样,我就让它们成为独立的内部类

    下面是生成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);
            }
    
        }
    
    }