mirror of
https://github.com/aNNiMON/Own-Programming-Language-Tutorial.git
synced 2024-09-20 08:44:20 +03:00
Добавлен JProgressBar
This commit is contained in:
parent
7775b264cb
commit
090f3a5a70
29
examples/forms/progressbar.own
Normal file
29
examples/forms/progressbar.own
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
use "forms"
|
||||||
|
|
||||||
|
label = newLabel("Current value: 50")
|
||||||
|
progressBar = newProgressBar()
|
||||||
|
progressBar.setValue(50)
|
||||||
|
progressBar.onChange(def() {
|
||||||
|
label.setText("Current value: " + progressBar.getValue())
|
||||||
|
})
|
||||||
|
minusBtn = newButton("-1")
|
||||||
|
minusBtn.onClick(def() = changeProgress(-1))
|
||||||
|
plusBtn = newButton("+1")
|
||||||
|
plusBtn.onClick(def() = changeProgress(1))
|
||||||
|
|
||||||
|
def changeProgress(delta) {
|
||||||
|
value = progressBar.getValue() + delta
|
||||||
|
if (value > 100) value = 100
|
||||||
|
else if (value < 0) value = 0
|
||||||
|
progressBar.setValue(value)
|
||||||
|
}
|
||||||
|
|
||||||
|
window = newWindow("ProgressBar example")
|
||||||
|
window.add(minusBtn, BorderLayout.WEST)
|
||||||
|
window.add(progressBar, BorderLayout.CENTER)
|
||||||
|
window.add(plusBtn, BorderLayout.EAST)
|
||||||
|
window.add(label, BorderLayout.SOUTH)
|
||||||
|
window.pack()
|
||||||
|
window.setLocationByPlatform()
|
||||||
|
window.setResizable(false)
|
||||||
|
window.setVisible()
|
@ -159,6 +159,18 @@ public final class Converters {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static FunctionValue intOptToVoid(VoidToVoidFunction f1, IntToVoidFunction f2) {
|
||||||
|
return new FunctionValue(args -> {
|
||||||
|
Arguments.checkOrOr(0, 1, args.length);
|
||||||
|
if (args.length == 0) {
|
||||||
|
f1.apply();
|
||||||
|
} else {
|
||||||
|
f2.apply(args[0].asInt());
|
||||||
|
}
|
||||||
|
return NumberValue.ZERO;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public static FunctionValue intToLong(IntToLongFunction f) {
|
public static FunctionValue intToLong(IntToLongFunction f) {
|
||||||
return new FunctionValue(args -> {
|
return new FunctionValue(args -> {
|
||||||
Arguments.check(1, args.length);
|
Arguments.check(1, args.length);
|
||||||
@ -168,7 +180,7 @@ public final class Converters {
|
|||||||
|
|
||||||
public static FunctionValue int2ToVoid(Int2ToVoidFunction f) {
|
public static FunctionValue int2ToVoid(Int2ToVoidFunction f) {
|
||||||
return new FunctionValue(args -> {
|
return new FunctionValue(args -> {
|
||||||
Arguments.check(4, args.length);
|
Arguments.check(2, args.length);
|
||||||
f.apply(args[0].asInt(),
|
f.apply(args[0].asInt(),
|
||||||
args[1].asInt());
|
args[1].asInt());
|
||||||
return NumberValue.ZERO;
|
return NumberValue.ZERO;
|
||||||
|
@ -6,6 +6,8 @@ import javax.swing.JButton;
|
|||||||
import javax.swing.JFrame;
|
import javax.swing.JFrame;
|
||||||
import javax.swing.JLabel;
|
import javax.swing.JLabel;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
|
import javax.swing.JProgressBar;
|
||||||
|
import javax.swing.JTextArea;
|
||||||
import javax.swing.JTextField;
|
import javax.swing.JTextField;
|
||||||
import javax.swing.SwingConstants;
|
import javax.swing.SwingConstants;
|
||||||
|
|
||||||
@ -16,7 +18,7 @@ public final class Components {
|
|||||||
|
|
||||||
private Components() { }
|
private Components() { }
|
||||||
|
|
||||||
static Value newWindow(Value... args) {
|
static Value newWindow(Value[] args) {
|
||||||
Arguments.checkOrOr(0, 1, args.length);
|
Arguments.checkOrOr(0, 1, args.length);
|
||||||
String title = (args.length == 1) ? args[0].asString() : "";
|
String title = (args.length == 1) ? args[0].asString() : "";
|
||||||
final JFrame frame = new JFrame(title);
|
final JFrame frame = new JFrame(title);
|
||||||
@ -24,7 +26,7 @@ public final class Components {
|
|||||||
return new JFrameValue(frame);
|
return new JFrameValue(frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Value newPanel(Value... args) {
|
static Value newPanel(Value[] args) {
|
||||||
Arguments.checkOrOr(0, 1, args.length);
|
Arguments.checkOrOr(0, 1, args.length);
|
||||||
final JPanel panel = new JPanel();
|
final JPanel panel = new JPanel();
|
||||||
if (args.length == 1) {
|
if (args.length == 1) {
|
||||||
@ -33,22 +35,57 @@ public final class Components {
|
|||||||
return new JPanelValue(panel);
|
return new JPanelValue(panel);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Value newButton(Value... args) {
|
static Value newButton(Value[] args) {
|
||||||
Arguments.checkOrOr(0, 1, args.length);
|
Arguments.checkOrOr(0, 1, args.length);
|
||||||
String text = (args.length == 1) ? args[0].asString() : "";
|
String text = (args.length == 1) ? args[0].asString() : "";
|
||||||
return new JButtonValue(new JButton(text));
|
return new JButtonValue(new JButton(text));
|
||||||
}
|
}
|
||||||
|
|
||||||
static Value newLabel(Value... args) {
|
static Value newLabel(Value[] args) {
|
||||||
Arguments.checkRange(0, 2, args.length);
|
Arguments.checkRange(0, 2, args.length);
|
||||||
String text = (args.length >= 1) ? args[0].asString() : "";
|
String text = (args.length >= 1) ? args[0].asString() : "";
|
||||||
int align = (args.length == 2) ? args[1].asInt() : SwingConstants.LEADING;
|
int align = (args.length == 2) ? args[1].asInt() : SwingConstants.LEADING;
|
||||||
return new JLabelValue(new JLabel(text, align));
|
return new JLabelValue(new JLabel(text, align));
|
||||||
}
|
}
|
||||||
|
|
||||||
static Value newTextField(Value... args) {
|
static Value newTextField(Value[] args) {
|
||||||
Arguments.checkOrOr(0, 1, args.length);
|
Arguments.checkRange(0, 2, args.length);
|
||||||
String text = (args.length == 1) ? args[0].asString() : "";
|
String text = "";
|
||||||
return new JTextFieldValue(new JTextField(text));
|
int cols = 0;
|
||||||
|
switch (args.length) {
|
||||||
|
case 1: {
|
||||||
|
text = args[0].asString();
|
||||||
|
} break;
|
||||||
|
case 2: {
|
||||||
|
text = args[0].asString();
|
||||||
|
cols = args[1].asInt();
|
||||||
|
} break;
|
||||||
|
}
|
||||||
|
return new JTextFieldValue(new JTextField(text, cols));
|
||||||
|
}
|
||||||
|
|
||||||
|
static Value newProgressBar(Value[] args) {
|
||||||
|
Arguments.checkRange(0, 3, args.length);
|
||||||
|
boolean isVertical = false;
|
||||||
|
int min = 0;
|
||||||
|
int max = 100;
|
||||||
|
switch (args.length) {
|
||||||
|
case 1: {
|
||||||
|
isVertical = args[0].asInt() != 0;
|
||||||
|
} break;
|
||||||
|
case 2: {
|
||||||
|
min = args[0].asInt();
|
||||||
|
max = args[1].asInt();
|
||||||
|
} break;
|
||||||
|
case 3: {
|
||||||
|
isVertical = args[0].asInt() != 0;
|
||||||
|
min = args[1].asInt();
|
||||||
|
max = args[2].asInt();
|
||||||
|
} break;
|
||||||
|
}
|
||||||
|
return new JProgressBarValue(new JProgressBar(
|
||||||
|
isVertical ? SwingConstants.VERTICAL : SwingConstants.HORIZONTAL,
|
||||||
|
min, max
|
||||||
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,51 @@
|
|||||||
|
package com.annimon.ownlang.modules.forms;
|
||||||
|
|
||||||
|
import com.annimon.ownlang.lib.Arguments;
|
||||||
|
import static com.annimon.ownlang.lib.Converters.*;
|
||||||
|
import com.annimon.ownlang.lib.Function;
|
||||||
|
import com.annimon.ownlang.lib.FunctionValue;
|
||||||
|
import com.annimon.ownlang.lib.NumberValue;
|
||||||
|
import com.annimon.ownlang.lib.Value;
|
||||||
|
import com.annimon.ownlang.lib.ValueUtils;
|
||||||
|
import javax.swing.JProgressBar;
|
||||||
|
|
||||||
|
public class JProgressBarValue extends JComponentValue {
|
||||||
|
|
||||||
|
final JProgressBar progressBar;
|
||||||
|
|
||||||
|
public JProgressBarValue(JProgressBar progressBar) {
|
||||||
|
super(19, progressBar);
|
||||||
|
this.progressBar = progressBar;
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void init() {
|
||||||
|
set("onChange", new FunctionValue(this::addChangeListener));
|
||||||
|
set("addChangeListener", new FunctionValue(this::addChangeListener));
|
||||||
|
set("getMinimum", voidToInt(progressBar::getMinimum));
|
||||||
|
set("getMaximum", voidToInt(progressBar::getMaximum));
|
||||||
|
set("getOrientation", voidToInt(progressBar::getOrientation));
|
||||||
|
set("getValue", voidToInt(progressBar::getValue));
|
||||||
|
set("isBorderPainted", voidToBoolean(progressBar::isBorderPainted));
|
||||||
|
set("isIndeterminate", voidToBoolean(progressBar::isIndeterminate));
|
||||||
|
set("isStringPainted", voidToBoolean(progressBar::isStringPainted));
|
||||||
|
set("getString", voidToString(progressBar::getString));
|
||||||
|
set("getPercentComplete", voidToDouble(progressBar::getPercentComplete));
|
||||||
|
|
||||||
|
set("setMinimum", intToVoid(progressBar::setMinimum));
|
||||||
|
set("setMaximum", intToVoid(progressBar::setMaximum));
|
||||||
|
set("setBorderPainted", booleanToVoid(progressBar::setBorderPainted));
|
||||||
|
set("setIndeterminate", booleanToVoid(progressBar::setIndeterminate));
|
||||||
|
set("setOrientation", intToVoid(progressBar::setOrientation));
|
||||||
|
set("setStringPainted", booleanToVoid(progressBar::setStringPainted));
|
||||||
|
set("setString", stringToVoid(progressBar::setString));
|
||||||
|
set("setValue", intToVoid(progressBar::setValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
private Value addChangeListener(Value[] args) {
|
||||||
|
Arguments.check(1, args.length);
|
||||||
|
final Function action = ValueUtils.consumeFunction(args[0], 0);
|
||||||
|
progressBar.addChangeListener(e -> action.execute());
|
||||||
|
return NumberValue.ZERO;
|
||||||
|
}
|
||||||
|
}
|
@ -15,7 +15,7 @@ public final class LayoutManagers {
|
|||||||
|
|
||||||
private LayoutManagers() { }
|
private LayoutManagers() { }
|
||||||
|
|
||||||
static Value borderLayout(Value... args) {
|
static Value borderLayout(Value[] args) {
|
||||||
Arguments.checkOrOr(0, 2, args.length);
|
Arguments.checkOrOr(0, 2, args.length);
|
||||||
int hgap = (args.length == 2) ? args[0].asInt() : 0;
|
int hgap = (args.length == 2) ? args[0].asInt() : 0;
|
||||||
int vgap = (args.length == 2) ? args[1].asInt() : 0;
|
int vgap = (args.length == 2) ? args[1].asInt() : 0;
|
||||||
@ -24,7 +24,7 @@ public final class LayoutManagers {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Value boxLayout(Value... args) {
|
static Value boxLayout(Value[] args) {
|
||||||
Arguments.checkOrOr(1, 2, args.length);
|
Arguments.checkOrOr(1, 2, args.length);
|
||||||
int axis = (args.length == 2) ? args[1].asInt() : BoxLayout.PAGE_AXIS;
|
int axis = (args.length == 2) ? args[1].asInt() : BoxLayout.PAGE_AXIS;
|
||||||
return new LayoutManagerValue(
|
return new LayoutManagerValue(
|
||||||
@ -32,7 +32,7 @@ public final class LayoutManagers {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Value cardLayout(Value... args) {
|
static Value cardLayout(Value[] args) {
|
||||||
Arguments.checkOrOr(0, 2, args.length);
|
Arguments.checkOrOr(0, 2, args.length);
|
||||||
int hgap = (args.length == 2) ? args[0].asInt() : 0;
|
int hgap = (args.length == 2) ? args[0].asInt() : 0;
|
||||||
int vgap = (args.length == 2) ? args[1].asInt() : 0;
|
int vgap = (args.length == 2) ? args[1].asInt() : 0;
|
||||||
@ -41,7 +41,7 @@ public final class LayoutManagers {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Value gridLayout(Value... args) {
|
static Value gridLayout(Value[] args) {
|
||||||
Arguments.checkRange(0, 4, args.length);
|
Arguments.checkRange(0, 4, args.length);
|
||||||
int rows = 1, cols = 0, hgap = 0, vgap = 0;
|
int rows = 1, cols = 0, hgap = 0, vgap = 0;
|
||||||
switch (args.length) {
|
switch (args.length) {
|
||||||
@ -69,7 +69,7 @@ public final class LayoutManagers {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Value flowLayout(Value... args) {
|
static Value flowLayout(Value[] args) {
|
||||||
Arguments.checkRange(0, 3, args.length);
|
Arguments.checkRange(0, 3, args.length);
|
||||||
final int align, hgap, vgap;
|
final int align, hgap, vgap;
|
||||||
switch (args.length) {
|
switch (args.length) {
|
||||||
|
@ -75,6 +75,7 @@ public final class forms implements Module {
|
|||||||
Functions.set("newButton", Components::newButton);
|
Functions.set("newButton", Components::newButton);
|
||||||
Functions.set("newLabel", Components::newLabel);
|
Functions.set("newLabel", Components::newLabel);
|
||||||
Functions.set("newPanel", Components::newPanel);
|
Functions.set("newPanel", Components::newPanel);
|
||||||
|
Functions.set("newProgressBar", Components::newProgressBar);
|
||||||
Functions.set("newTextField", Components::newTextField);
|
Functions.set("newTextField", Components::newTextField);
|
||||||
Functions.set("newWindow", Components::newWindow);
|
Functions.set("newWindow", Components::newWindow);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user