import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
/**
*
* @author Dfhaii
*/
public class SevenSegmentDisplay extends JPanel {
private final Color mDisplayColor = Color.RED;
private static final JPanel[] mSegments = new JPanel[7];
private static final JPanel[] mSpacers = new JPanel[7];
private volatile int mNumberDisplayed;
private static final Dimension mHorizontalSize = new Dimension(40,10);
private static final Dimension mVerticalSize = new Dimension(10,40);
private static final int mDefaultNumber = 0;
public SevenSegmentDisplay(){
this(mDefaultNumber);
}
public SevenSegmentDisplay(int Number){
super(new GridBagLayout());
setBackground(null);
setOpaque(false);
for(int i = 0; i < mSegments.length; i++){
mSegments[i] = new JPanel();
mSegments[i].setBackground(mDisplayColor);
mSegments[i].setOpaque(true);
mSegments[i].setVisible(false);
mSpacers[i] = new JPanel();
mSpacers[i].setBackground(null);
mSpacers[i].setOpaque(false);
mSpacers[i].setVisible(false);
}
GridBagConstraints GBConst = new GridBagConstraints();
GBConst.gridx = 1;
GBConst.gridy = 0;
GBConst.gridwidth = 1;
GBConst.gridheight = 1;
GBConst.fill = GridBagConstraints.NONE;
GBConst.anchor = GridBagConstraints.CENTER;
GBConst.weightx = 1;
GBConst.weighty = 1;
SetRigidSize(mSegments[0], mHorizontalSize);
SetRigidSize(mSpacers[0], mHorizontalSize);
add(mSegments[0], GBConst);
add(mSpacers[0], GBConst);
GBConst.gridx = 0;
GBConst.gridy = 1;
SetRigidSize(mSegments[1], mVerticalSize);
SetRigidSize(mSpacers[1], mVerticalSize);
add(mSegments[1], GBConst);
add(mSpacers[1], GBConst);
GBConst.gridx = 2;
SetRigidSize(mSegments[2], mVerticalSize);
SetRigidSize(mSpacers[2], mVerticalSize);
add(mSegments[2], GBConst);
add(mSpacers[2], GBConst);
GBConst.gridx = 1;
GBConst.gridy = 2;
SetRigidSize(mSegments[3], mHorizontalSize);
SetRigidSize(mSpacers[3], mHorizontalSize);
add(mSegments[3], GBConst);
add(mSpacers[3], GBConst);
GBConst.gridx = 0;
GBConst.gridy = 3;
SetRigidSize(mSegments[4], mVerticalSize);
SetRigidSize(mSpacers[4], mVerticalSize);
add(mSegments[4], GBConst);
add(mSpacers[4], GBConst);
GBConst.gridx = 2;
SetRigidSize(mSegments[5], mVerticalSize);
SetRigidSize(mSpacers[5], mVerticalSize);
add(mSegments[5], GBConst);
add(mSpacers[5], GBConst);
GBConst.gridx = 1;
GBConst.gridy = 4;
SetRigidSize(mSegments[6], mHorizontalSize);
SetRigidSize(mSpacers[6], mHorizontalSize);
add(mSegments[6], GBConst);
add(mSpacers[6], GBConst);
SetNumber(Number);
}
private void SetRigidSize(Component toSize, Dimension size){
toSize.setMinimumSize(size);
toSize.setMaximumSize(size);
toSize.setPreferredSize(size);
}
public void SetNumber(final int Number){
if(Number < 0 || Number > 9)
throw new IllegalArgumentException("It's a single display, use a valid number numbnuts");
mNumberDisplayed = Number;
Runnable DisplayUpdate = new Runnable(){
public void run(){
for(int i = 0; i < mSegments.length; i++){
mSegments[i].setVisible(false);
}
switch(Number){
case 0:
for(int i = 0; i < mSegments.length; i++){
mSegments[i].setVisible(true);
}
mSegments[3].setVisible(false);
break;
case 1:
mSegments[2].setVisible(true);
mSegments[5].setVisible(true);
break;
case 2:
mSegments[0].setVisible(true);
mSegments[2].setVisible(true);
mSegments[3].setVisible(true);
mSegments[4].setVisible(true);
mSegments[6].setVisible(true);
break;
case 3:
mSegments[0].setVisible(true);
mSegments[2].setVisible(true);
mSegments[3].setVisible(true);
mSegments[5].setVisible(true);
mSegments[6].setVisible(true);
break;
case 4:
mSegments[1].setVisible(true);
mSegments[2].setVisible(true);
mSegments[3].setVisible(true);
mSegments[5].setVisible(true);
break;
case 5:
mSegments[0].setVisible(true);
mSegments[1].setVisible(true);
mSegments[3].setVisible(true);
mSegments[5].setVisible(true);
mSegments[6].setVisible(true);
break;
case 6:
mSegments[0].setVisible(true);
mSegments[1].setVisible(true);
mSegments[3].setVisible(true);
mSegments[4].setVisible(true);
mSegments[5].setVisible(true);
mSegments[6].setVisible(true);
break;
case 7:
mSegments[0].setVisible(true);
mSegments[2].setVisible(true);
mSegments[5].setVisible(true);
break;
case 8:
for(int i = 0; i < mSegments.length; i++){
mSegments[i].setVisible(true);
}
break;
case 9:
mSegments[0].setVisible(true);
mSegments[1].setVisible(true);
mSegments[2].setVisible(true);
mSegments[3].setVisible(true);
mSegments[5].setVisible(true);
break;
}
for(int i = 0; i < mSpacers.length; i++){
mSpacers[i].setVisible(!mSegments[i].isVisible());
}
}
};
if(SwingUtilities.isEventDispatchThread())
DisplayUpdate.run();
else
SwingUtilities.invokeLater(DisplayUpdate);
}
public int GetDisplayedNumber(){
return mNumberDisplayed;
}
}