mirror of
https://github.com/aNNiMON/Own-Programming-Language-Tutorial.git
synced 2024-09-20 00:34: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) {
|
||||
return new FunctionValue(args -> {
|
||||
Arguments.check(1, args.length);
|
||||
@ -168,7 +180,7 @@ public final class Converters {
|
||||
|
||||
public static FunctionValue int2ToVoid(Int2ToVoidFunction f) {
|
||||
return new FunctionValue(args -> {
|
||||
Arguments.check(4, args.length);
|
||||
Arguments.check(2, args.length);
|
||||
f.apply(args[0].asInt(),
|
||||
args[1].asInt());
|
||||
return NumberValue.ZERO;
|
||||
|
@ -6,6 +6,8 @@ import javax.swing.JButton;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JProgressBar;
|
||||
import javax.swing.JTextArea;
|
||||
import javax.swing.JTextField;
|
||||
import javax.swing.SwingConstants;
|
||||
|
||||
@ -16,7 +18,7 @@ public final class Components {
|
||||
|
||||
private Components() { }
|
||||
|
||||
static Value newWindow(Value... args) {
|
||||
static Value newWindow(Value[] args) {
|
||||
Arguments.checkOrOr(0, 1, args.length);
|
||||
String title = (args.length == 1) ? args[0].asString() : "";
|
||||
final JFrame frame = new JFrame(title);
|
||||
@ -24,7 +26,7 @@ public final class Components {
|
||||
return new JFrameValue(frame);
|
||||
}
|
||||
|
||||
static Value newPanel(Value... args) {
|
||||
static Value newPanel(Value[] args) {
|
||||
Arguments.checkOrOr(0, 1, args.length);
|
||||
final JPanel panel = new JPanel();
|
||||
if (args.length == 1) {
|
||||
@ -33,22 +35,57 @@ public final class Components {
|
||||
return new JPanelValue(panel);
|
||||
}
|
||||
|
||||
static Value newButton(Value... args) {
|
||||
static Value newButton(Value[] args) {
|
||||
Arguments.checkOrOr(0, 1, args.length);
|
||||
String text = (args.length == 1) ? args[0].asString() : "";
|
||||
return new JButtonValue(new JButton(text));
|
||||
}
|
||||
|
||||
static Value newLabel(Value... args) {
|
||||
static Value newLabel(Value[] args) {
|
||||
Arguments.checkRange(0, 2, args.length);
|
||||
String text = (args.length >= 1) ? args[0].asString() : "";
|
||||
int align = (args.length == 2) ? args[1].asInt() : SwingConstants.LEADING;
|
||||
return new JLabelValue(new JLabel(text, align));
|
||||
}
|
||||
|
||||
static Value newTextField(Value... args) {
|
||||
Arguments.checkOrOr(0, 1, args.length);
|
||||
String text = (args.length == 1) ? args[0].asString() : "";
|
||||
return new JTextFieldValue(new JTextField(text));
|
||||
static Value newTextField(Value[] args) {
|
||||
Arguments.checkRange(0, 2, args.length);
|
||||
String 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() { }
|
||||
|
||||
static Value borderLayout(Value... args) {
|
||||
static Value borderLayout(Value[] args) {
|
||||
Arguments.checkOrOr(0, 2, args.length);
|
||||
int hgap = (args.length == 2) ? args[0].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);
|
||||
int axis = (args.length == 2) ? args[1].asInt() : BoxLayout.PAGE_AXIS;
|
||||
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);
|
||||
int hgap = (args.length == 2) ? args[0].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);
|
||||
int rows = 1, cols = 0, hgap = 0, vgap = 0;
|
||||
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);
|
||||
final int align, hgap, vgap;
|
||||
switch (args.length) {
|
||||
|
@ -75,6 +75,7 @@ public final class forms implements Module {
|
||||
Functions.set("newButton", Components::newButton);
|
||||
Functions.set("newLabel", Components::newLabel);
|
||||
Functions.set("newPanel", Components::newPanel);
|
||||
Functions.set("newProgressBar", Components::newProgressBar);
|
||||
Functions.set("newTextField", Components::newTextField);
|
||||
Functions.set("newWindow", Components::newWindow);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user