Добавлен JProgressBar

This commit is contained in:
Victor 2019-10-06 20:19:15 +03:00
parent 7775b264cb
commit 090f3a5a70
6 changed files with 144 additions and 14 deletions

View 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()

View File

@ -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;

View File

@ -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
));
} }
} }

View File

@ -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;
}
}

View File

@ -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) {

View File

@ -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);