JavaRx 基于响应式编程构建 GUI
JavaRx Build a GUI based on Reactive Programming
大家好,我是响应式编程的新手,我只想知道如何使用这段代码实现和处理新按钮。如果您知道答案,请写下正确的代码。所以我要问的是用第二个按钮来实现这段代码,它可以做任何你想做的事。我只需要看到用第二个按钮实现的代码。
package pcd.lab08.rx;
import javax.swing.*;
import io.reactivex.rxjava3.core.Scheduler;
import io.reactivex.rxjava3.schedulers.Schedulers;
import io.reactivex.rxjava3.subjects.PublishSubject;
import java.awt.event.*;
import java.util.concurrent.TimeUnit;
public class Test04_swing_pubsub {
static class MyFrame extends JFrame {
private PublishSubject<Integer> stream;
public MyFrame(PublishSubject<Integer> stream){
super("Swing + RxJava");
this.stream = stream;
setSize(150,60);
setVisible(true);
JButton button = new JButton("Press me");
button.addActionListener((ActionEvent ev) -> {
stream.onNext(1);
});
getContentPane().add(button);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(-1);
}
});
}
}
static public void main(String[] args){
PublishSubject<Integer> clickStream = PublishSubject.create();
SwingUtilities.invokeLater(()->{
new MyFrame(clickStream);
});
clickStream
.observeOn(Schedulers.computation())
.subscribe((v) -> {
System.out.println(Thread.currentThread().getName() + "click: "+System.currentTimeMillis());
});
clickStream
.buffer(clickStream.throttleWithTimeout(250, TimeUnit.MILLISECONDS))
.map(xs -> xs.size())
.filter((v) -> v >= 2)
.subscribe((v) -> {
System.out.println(Thread.currentThread().getName() + "Multi-click: "+v);
});
}
}
好的,我已经解决了问题很简单,我们必须使用过滤器。
package pcd.lab08.rx;
import javax.swing.*;
import io.reactivex.rxjava3.core.Scheduler;
import io.reactivex.rxjava3.schedulers.Schedulers;
import io.reactivex.rxjava3.subjects.PublishSubject;
import java.awt.event.*;
import java.util.concurrent.TimeUnit;
public class Test04_swing_pubsub {
static class MyFrame extends JFrame {
private PublishSubject<Integer> stream;
public MyFrame(PublishSubject<Integer> stream){
super("Swing + RxJava");
this.stream = stream;
setSize(150,60);
setVisible(true);
JButton button = new JButton("Press me");
button.addActionListener((ActionEvent ev) -> {
stream.onNext(1);
});
JButton button2 = new JButton("Button2");
button.addActionListener((ActionEvent ev) -> {
stream.onNext(2);
});
getContentPane().add(button);
getContentPane().add(button2);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(-1);
}
});
}
}
static public void main(String[] args){
PublishSubject<Integer> clickStream = PublishSubject.create();
SwingUtilities.invokeLater(()->{
new MyFrame(clickStream);
});
clickStream
.observeOn(Schedulers.computation())
.subscribe((v) -> {
System.out.println(Thread.currentThread().getName() + "click: "+System.currentTimeMillis());
});
clickStream
.observeOn(Schedulers.computation())
.filter((v) -> v == 2)
.subscribe((v) -> {
System.out.println(Thread.currentThread().getName() + "i've pressed the button2": "+System.currentTimeMillis());
});
clickStream
.buffer(clickStream.throttleWithTimeout(250, TimeUnit.MILLISECONDS))
.map(xs -> xs.size())
.filter((v) -> v >= 2)
.subscribe((v) -> {
System.out.println(Thread.currentThread().getName() + "Multi-click: "+v);
});
}
}
大家好,我是响应式编程的新手,我只想知道如何使用这段代码实现和处理新按钮。如果您知道答案,请写下正确的代码。所以我要问的是用第二个按钮来实现这段代码,它可以做任何你想做的事。我只需要看到用第二个按钮实现的代码。
package pcd.lab08.rx;
import javax.swing.*;
import io.reactivex.rxjava3.core.Scheduler;
import io.reactivex.rxjava3.schedulers.Schedulers;
import io.reactivex.rxjava3.subjects.PublishSubject;
import java.awt.event.*;
import java.util.concurrent.TimeUnit;
public class Test04_swing_pubsub {
static class MyFrame extends JFrame {
private PublishSubject<Integer> stream;
public MyFrame(PublishSubject<Integer> stream){
super("Swing + RxJava");
this.stream = stream;
setSize(150,60);
setVisible(true);
JButton button = new JButton("Press me");
button.addActionListener((ActionEvent ev) -> {
stream.onNext(1);
});
getContentPane().add(button);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(-1);
}
});
}
}
static public void main(String[] args){
PublishSubject<Integer> clickStream = PublishSubject.create();
SwingUtilities.invokeLater(()->{
new MyFrame(clickStream);
});
clickStream
.observeOn(Schedulers.computation())
.subscribe((v) -> {
System.out.println(Thread.currentThread().getName() + "click: "+System.currentTimeMillis());
});
clickStream
.buffer(clickStream.throttleWithTimeout(250, TimeUnit.MILLISECONDS))
.map(xs -> xs.size())
.filter((v) -> v >= 2)
.subscribe((v) -> {
System.out.println(Thread.currentThread().getName() + "Multi-click: "+v);
});
}
}
好的,我已经解决了问题很简单,我们必须使用过滤器。
package pcd.lab08.rx;
import javax.swing.*;
import io.reactivex.rxjava3.core.Scheduler;
import io.reactivex.rxjava3.schedulers.Schedulers;
import io.reactivex.rxjava3.subjects.PublishSubject;
import java.awt.event.*;
import java.util.concurrent.TimeUnit;
public class Test04_swing_pubsub {
static class MyFrame extends JFrame {
private PublishSubject<Integer> stream;
public MyFrame(PublishSubject<Integer> stream){
super("Swing + RxJava");
this.stream = stream;
setSize(150,60);
setVisible(true);
JButton button = new JButton("Press me");
button.addActionListener((ActionEvent ev) -> {
stream.onNext(1);
});
JButton button2 = new JButton("Button2");
button.addActionListener((ActionEvent ev) -> {
stream.onNext(2);
});
getContentPane().add(button);
getContentPane().add(button2);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(-1);
}
});
}
}
static public void main(String[] args){
PublishSubject<Integer> clickStream = PublishSubject.create();
SwingUtilities.invokeLater(()->{
new MyFrame(clickStream);
});
clickStream
.observeOn(Schedulers.computation())
.subscribe((v) -> {
System.out.println(Thread.currentThread().getName() + "click: "+System.currentTimeMillis());
});
clickStream
.observeOn(Schedulers.computation())
.filter((v) -> v == 2)
.subscribe((v) -> {
System.out.println(Thread.currentThread().getName() + "i've pressed the button2": "+System.currentTimeMillis());
});
clickStream
.buffer(clickStream.throttleWithTimeout(250, TimeUnit.MILLISECONDS))
.map(xs -> xs.size())
.filter((v) -> v >= 2)
.subscribe((v) -> {
System.out.println(Thread.currentThread().getName() + "Multi-click: "+v);
});
}
}