Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to wire one pane to another

How do I wire output to paneWithList?

PaneWithList has a listener on its JList so that the selected row is output to the console. How can I direct that output to the JTextPane on output?

Could PaneWithList fire an event which Main picks up? Would PropertyChangeSupport suffice?

Main.java:

package dur.bounceme.net;

import javax.swing.JTabbedPane;

public class Main {

    private static JTabbedPane tabs;
    private static PaneWithList paneWithList;
    private static PaneWithTable paneWithTable;
    private static Output output;

    public static void main(String[] args) {
        tabs = new javax.swing.JTabbedPane();
        paneWithList = new PaneWithList();
        paneWithTable = new PaneWithTable();
        tabs.addTab("list", paneWithList);
        tabs.addTab("table", paneWithTable);
        tabs.addTab("output", output);
    }
}
like image 286
Thufir Avatar asked May 09 '12 20:05

Thufir


People also ask

Can you run a sub panel off a sub panel?

Can I run a subpanel from a subpanel? Generally speaking, yes. You could put a million subpanels in series, and by itself that wouldn't be a code violation. The metal conduit can act as the equipment ground so a 4th wire is not required.

Can you run 2 sub panels off the main panel?

There's no set number of electrical sub panels you can connect to a 200A main panel. But generally, you'll see people installing a single 200 amps subpanel (which is rarely done, if ever) or connecting two sub panels with 100 amps each.

Can you add a second electrical panel?

If your home's electrical service panel (breaker box) is full and you need more room to add new circuits, installing a subpanel might be the way to go. Subpanels certainly can add convenience and plenty of room for installing new circuits, but your current system must have enough capacity to support a subpanel.

Can you run a 100 amp sub panel off a 100 amp main panel?

Installing a 100 amp subpanel is fine since you can protect it with a 100 amp breaker from the main, which is that panel's maximum amp rating. You can feed it using the main breaker, assuming the wire size for the subpanel matches the main's.


2 Answers

Here's an example using the observer pattern, also seen here, here and here. Note that it would also be possible to listen to the combo's model.

enter image description here

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.*;

/**
* @see http://en.wikipedia.org/wiki/Observer_pattern
* @see https://stackoverflow.com/a/10523401/230513
*/
public class PropertyChangeDemo {

    public PropertyChangeDemo() {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setResizable(false);
        f.add(new ObserverPanel());
        f.pack();
        f.setLocationByPlatform(true);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                PropertyChangeDemo example = new PropertyChangeDemo();
            }
        });
    }
}

class ObserverPanel extends JPanel {

    private JLabel title = new JLabel("Value received: ");
    private JLabel label = new JLabel("null", JLabel.CENTER);

    public ObserverPanel() {
        this.setBorder(BorderFactory.createTitledBorder("ObserverPanel"));
        JPanel panel = new JPanel(new GridLayout(0, 1));
        panel.add(title);
        panel.add(label);
        this.add(panel);
        ObservedPanel observed = new ObservedPanel();
        observed.addPropertyChangeListener(new PropertyChangeListener() {

            @Override
            public void propertyChange(PropertyChangeEvent e) {
                if (e.getPropertyName().equals(ObservedPanel.PHYSICIST)) {
                    String value = e.getNewValue().toString();
                    label.setText(value);
                }
            }
        });
        this.add(observed);
    }
}

class ObservedPanel extends JPanel {

    public static final String PHYSICIST = "Physicist";
    private static final String[] items = new String[]{
        "Alpher", "Bethe", "Gamow", "Dirac", "Einstein"
    };
    private JComboBox combo = new JComboBox(items);
    private String oldValue;

    public ObservedPanel() {
        this.setBorder(BorderFactory.createTitledBorder("ObservedPanel"));
        combo.addActionListener(new ComboBoxListener());
        this.add(combo);
    }

    private class ComboBoxListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent ae) {
            String newValue = (String) combo.getSelectedItem();
            firePropertyChange(PHYSICIST, oldValue, newValue);
            oldValue = newValue;
        }
    }
}
like image 189
trashgod Avatar answered Oct 27 '22 02:10

trashgod


I'd be use JMenu with JMenuItems with contents layed by using CardLayout rather than very complicated JTabbedPane(s)

like image 25
mKorbel Avatar answered Oct 27 '22 02:10

mKorbel