Skip to content

Instantly share code, notes, and snippets.

@welel
Last active January 31, 2023 20:15
Show Gist options
  • Save welel/04362474ce1134574043d9428ef57506 to your computer and use it in GitHub Desktop.
Save welel/04362474ce1134574043d9428ef57506 to your computer and use it in GitHub Desktop.
Simple GUI coder.

Краткое описание

Создано демонстрационное приложение с графическим интерфейсом пользователя на основе разработанного/модифицированного лёгкого AWT-компонента и стандартных компонентов AWT. Данное приложение представляет из себя демонстрацию работы шифратора, где нажатие на кнопку имитирует подачу импульса на вход шифратора.

screenshot

package lbutton;
import java.awt.*;
import java.awt.event.*;
public class LButton extends Component {
protected ActionListener actionListener;
protected String label; // Метка кнопки
protected boolean pressed = false; // Флаг нажатия на кнопку
protected boolean inside = false; // Флаг наведения мыши на кнопку
protected Color color = Color.lightGray; // Стандартный цвет
protected Color color2 = Color.GREEN; // Цвет при наведении мышки на кнопку
// Конструктор кнопки
public LButton(String label) {
this.label = label;
enableEvents(AWTEvent.MOUSE_EVENT_MASK);
}
// Конструктор кнопки при отсутствующем аргументе
public LButton() {
this("");
}
// Отрисовка содержимого кнопки
public void paint(Graphics g) {
// Определение размеров кнопки
int width = getSize().width;
int height = getSize().height;
// Определение коэффициента сужения кнопки при нажатии
int delta = ( width + height ) / 25 ;
// Буффер для выбора цвета по условию
Color newColor;
if ( !inside )
newColor = color;
else
newColor = Color.GREEN;
if (!pressed) {
g.setColor(newColor);
g.fillRect( 0, 0, width, height);
} else {
g.setColor(newColor);
g.fillRect( delta/2 , delta/2, width - delta, height - delta);
}
Font f = getFont();
if (f != null) {
// Получение характеристик шрифта
FontMetrics fm = getFontMetrics(getFont());
// Рисование метки кнопки
g.setColor(Color.white);
g.drawString(label, width - fm.stringWidth(label) - (width-fm.stringWidth(label))/2, height - fm.getHeight()/2);
}
}
// Установка размеров кнопки
public Dimension getPreferredSize() {
Font f = getFont();
if (f != null) {
// Получение характеристик шрифта
FontMetrics fm = getFontMetrics(getFont());
// Установка размеров кнопки
// в зависимости от геометрических размеров шрифта
// и длинны строки метки кнопки
return new Dimension(fm.stringWidth(label) + 20, fm.getHeight() + 20);
} else {
return new Dimension(100, 100);
}
}
// Установка размеров кнопки по умолчанию
public Dimension getMinimumSize() {
return new Dimension(100, 100);
}
// Переопределение метода, которому подается AWT-событие от мыши
public void processMouseEvent(MouseEvent e) {
Graphics g;
switch (e.getID()) {
case MouseEvent.MOUSE_PRESSED:
pressed = true;
repaint();
break;
case MouseEvent.MOUSE_RELEASED:
// Если был зарегестрирован блок прослушивания сообщений для компонента
if (actionListener != null) {
// Сообщение о том, что произошло action-событие
actionListener.actionPerformed(new ActionEvent(this, ActionEvent.ACTION_PERFORMED, label));
}
if (pressed == true) {
pressed = false;
repaint();
}
break;
case MouseEvent.MOUSE_ENTERED:
if(!inside) {
inside = true;
repaint();
}
break;
case MouseEvent.MOUSE_EXITED:
if (inside) {
inside = false;
repaint();
}
break;
}
super.processMouseEvent(e);
}
// Методя для изменения цветов кнопки
public void setColor(Color color, Color color2) {
this.color = color;
this.color2= color2;
}
// Метод для регистрации блока прослушивания событий от кнопки
public void addActionListener(ActionListener listener) {
actionListener =
AWTEventMulticaster.add(actionListener, listener);
enableEvents(AWTEvent.MOUSE_EVENT_MASK);
}
// Метод удаления блока прослушивания событий от кнопки
public void removeActionListener(ActionListener listener) {
actionListener = AWTEventMulticaster.remove(actionListener, listener);
}
}
import java.awt.*;
import java.awt.event.*;
import lbutton.LButton;
public class MyFrame extends Frame {
static MyFrame frame = new MyFrame();
// Холст для рисования
static Canvas canvas;
static int font_size = 20;
// Кнопки соответствующие входам шифратора
static LButton n0 = new LButton("0");
static LButton n1 = new LButton("1");
static LButton n2 = new LButton("2");
static LButton n3 = new LButton("3");
static LButton n4 = new LButton("4");
static LButton n5 = new LButton("5");
static LButton n6 = new LButton("6");
static LButton n7 = new LButton("7");
static LButton n8 = new LButton("8");
static LButton n9 = new LButton("9");
// Переменные для хранения выходных сигналов шифратора
static int y1 = 0, y2 = 0, y3= 0, y4 = 0;
public static void main(String [] args) {
frame.setTitle("Example of Coder");
frame.setSize(500,500);
frame.setBackground(new Color(128,20,50));
n0.setFont(new Font("TimesRoman", Font.PLAIN, font_size));
n1.setFont(new Font("TimesRoman", Font.PLAIN, font_size));
n2.setFont(new Font("TimesRoman", Font.PLAIN, font_size));
n3.setFont(new Font("TimesRoman", Font.PLAIN, font_size));
n4.setFont(new Font("TimesRoman", Font.PLAIN, font_size));
n5.setFont(new Font("TimesRoman", Font.PLAIN, font_size));
n6.setFont(new Font("TimesRoman", Font.PLAIN, font_size));
n7.setFont(new Font("TimesRoman", Font.PLAIN, font_size));
n8.setFont(new Font("TimesRoman", Font.PLAIN, font_size));
n9.setFont(new Font("TimesRoman", Font.PLAIN, font_size));
// Создание панели для размещения кнопок
Panel panel = new Panel(new FlowLayout());
// Добавление панели на верхнюю часть окна
frame.add(panel, BorderLayout.NORTH);
// Доваление кнопок на панель
panel.add(n0);
panel.add(n1);
panel.add(n2);
panel.add(n3);
panel.add(n4);
panel.add(n5);
panel.add(n6);
panel.add(n7);
panel.add(n8);
panel.add(n9);
// Регистрация блоков прослушивания с последующей реализацией приемников событий от кнопок
n0.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
y1 = 0; y2 = 0; y3 = 0; y4 = 0;
canvas.repaint(); }});
n1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
y1 = 0; y2 = 0; y3 = 0; y4 = 1;
canvas.repaint(); }});
n2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
y1 = 0; y2 = 0; y3 = 1; y4 = 0;
canvas.repaint(); }});
n3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
y1 = 0; y2 = 0; y3 = 1; y4 = 1;
canvas.repaint(); }});
n4.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
y1 = 0; y2 = 1; y3 = 0; y4 = 0;
canvas.repaint(); }});
n5.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
y1 = 0; y2 = 1; y3 = 0; y4 = 1;
canvas.repaint(); }});
n6.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
y1 = 0; y2 = 1; y3 = 1; y4 = 0;
canvas.repaint(); }});
n7.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
y1 = 0; y2 = 1; y3 = 1; y4 = 1;
canvas.repaint(); }});
n8.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
y1 = 1; y2 = 0; y3 = 0; y4 = 0;
canvas.repaint(); }});
n9.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
y1 = 1; y2 = 0; y3 = 0; y4 = 1;
canvas.repaint(); }});
canvas = new Canvas() {
// Переопределение метода paint
public void paint(Graphics g) {
int x = n0.getX()+20;
int y = n0.getY();
int delta = 0;
// Отрисовка рисунка шифратора
for ( int i = 0; i < 10; i++ ) {
g.drawLine(x+delta,0, x+delta, 100);
delta+=35;
}
g.drawRect(x-23,100, 360,100);
delta = 0;
for ( int i = 0; i < 4; i++ ) {
g.drawLine(30+x+delta, 100+100, 30+x+delta, 230);
delta+=87;
}
g.setFont(new Font("TimesRoman", Font.PLAIN, 100));
g.setColor(Color.lightGray);
g.drawString("Coder", x+10 , y+180);
// Отрисовка выходных сигналов шифратора
g.setColor(Color.WHITE);
g.drawString(""+y1, x, y+310);
g.drawString(""+y2, x + 87, y+310);
g.drawString(""+y3, x + 87*2, y+310);
g.drawString(""+y4, x + 87*3, y+310);
}
};
frame.add(canvas, BorderLayout.CENTER);
frame.setVisible(true);
}
}
package lbutton;
import java.awt.*;
import java.awt.event.*;
public class RoundButton extends Component {
protected ActionListener actionListener;
protected String label; // Метка кнопки
protected boolean pressed = false; // Флаг нажатия на кнопку
protected boolean inside = false; // Флаг наведения мыши на кнопку
protected Color color = Color.lightGray; // Стандартный цвет
protected Color color2 = Color.GREEN; // Цвет при наведении мышки на кнопку
// Конструктор кнопки
public RoundButton(String label) {
this.label = label;
enableEvents(AWTEvent.MOUSE_EVENT_MASK);
}
// Конструктор кнопки при отсутствующем аргументе
public RoundButton() {
this("");
}
// Отрисовка содержимого кнопки
public void paint(Graphics g) {
// Определение размеров кнопки
int width = getSize().width;
int height = getSize().height;
// Определение коэффициента сужения кнопки при нажатии
int delta = ( width + height ) / 25 ;
// Буффер для выбора цвета по условию
Color newColor;
if ( !inside )
newColor = color;
else
newColor = Color.GREEN;
g.setColor(newColor);
if (!pressed) {
g.fillOval( delta/2 , delta/2, width - delta, height - delta);
} else {
g.fillOval( delta/2 , delta/2, width - delta, height - delta);
}
Font f = getFont();
if (f != null) {
// Получение характеристик шрифта
FontMetrics fm = getFontMetrics(getFont());
// Рисование метки кнопки
g.setColor(Color.white);
g.drawString(label, width - fm.stringWidth(label) - (width-fm.stringWidth(label))/2, height - fm.getHeight()/2);
}
}
// Установка размеров кнопки
public Dimension getPreferredSize() {
Font f = getFont();
if (f != null) {
// Получение характеристик шрифта
FontMetrics fm = getFontMetrics(getFont());
// Установка размеров кнопки
// в зависимости от геометрических размеров шрифта
// и длинны строки метки кнопки
return new Dimension(fm.stringWidth(label) + 20, fm.getHeight() + 20);
} else {
return new Dimension(100, 100);
}
}
// Установка размеров кнопки по умолчанию
public Dimension getMinimumSize() {
return new Dimension(100, 100);
}
// Переопределение метода, которому подается AWT-событие от мыши
public void processMouseEvent(MouseEvent e) {
Graphics g;
switch (e.getID()) {
case MouseEvent.MOUSE_PRESSED:
pressed = true;
repaint();
break;
case MouseEvent.MOUSE_RELEASED:
// Если был зарегестрирован блок прослушивания сообщений для компонента
if (actionListener != null) {
// Сообщение о том, что произошло action-событие
actionListener.actionPerformed(new ActionEvent(this, ActionEvent.ACTION_PERFORMED, label));
}
if (pressed == true) {
pressed = false;
repaint();
}
break;
case MouseEvent.MOUSE_ENTERED:
if(!inside) {
inside = true;
repaint();
}
break;
case MouseEvent.MOUSE_EXITED:
if (inside) {
inside = false;
repaint();
}
break;
}
super.processMouseEvent(e);
}
// Методя для изменения цветов кнопки
public void setColor(Color color, Color color2) {
this.color = color;
this.color2= color2;
}
// Метод для регистрации блока прослушивания событий от кнопки
public void addActionListener(ActionListener listener) {
actionListener =
AWTEventMulticaster.add(actionListener, listener);
enableEvents(AWTEvent.MOUSE_EVENT_MASK);
}
// Метод удаления блока прослушивания событий от кнопки
public void removeActionListener(ActionListener listener) {
actionListener = AWTEventMulticaster.remove(actionListener, listener);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment