Button 如何使用JavaFX中的按钮更改行的大小
我想改变一条线的大小使用一个按钮,以便以后我可以使线看起来像是旋转。。。以下是我目前掌握的代码:Button 如何使用JavaFX中的按钮更改行的大小,button,javafx,Button,Javafx,我想改变一条线的大小使用一个按钮,以便以后我可以使线看起来像是旋转。。。以下是我目前掌握的代码: package JavaFXApplication14; import javafx.application.Application; import javafx.geometry.HPos; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.sce
package JavaFXApplication14;
import javafx.application.Application;
import javafx.geometry.HPos;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.GridPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Line;
import javafx.stage.Stage;
public class JavaFXApplication14 extends Application
{
public static void main(String[] args)
{
launch(args);
}
int x = 200;
@Override public void start(Stage primaryStage) throws Exception
{
final GridPane grid = new GridPane();
grid.setAlignment(Pos.CENTER);
grid.setHgap(100);
grid.setVgap(100);
grid.setPadding(new Insets(10, 10, 10, 10));
Scene scene = new Scene(grid, 600, 400); //Color.BLACK ?
primaryStage.setScene(scene);
primaryStage.setTitle("4D");
primaryStage.show();
Line ln = new Line(100, 200, x, 200);
ln.setStroke(Color.BLUE);
ln.setStrokeWidth(5);
grid.add(ln, 0, 0);
Button btn = new Button("X-Y");
grid.setHalignment(btn, HPos.CENTER);
btn.setOnAction(e -> btn_Click());
grid.add(btn, 0, 1);
}
public void btn_Click()
{
x = x + 50;
}
}
此外,有时当我使用以下代码行时,背景的颜色不会改变
Scene scene = new Scene(grid, 600, 400, Color.BLACK);
原因是什么?该按钮工作得很好。您可以对其进行测试,但在这里,您仅将新值设置为
x
,没有其他设置,换句话说,您不需要更新行的x2
位置。您可以通过使变量ln
可访问并更新其值EndX
,对其进行点号:
//before the method start
Line ln;
//Inside your btn_click() method add
ln.setEndX(x);
但它只会增加线条的大小(水平方向),而不会旋转线条。根据我在评论中告诉您的内容,经过一点研究解释,您可以根据旋转轴(startX
&startY
)和要旋转的点(endX
&endY
)轻松完成这项工作:
注意:在您的示例中,您使用的是网格窗格
,因此您将仅限于其功能,祝您好运如果你想要旋转,改变的不是尺寸,而是位置(x1,y1
)或(x2,y2
),第一个代表中心
和中心
,另一个代表周长
!我知道,但按钮不起作用:(
public class Launcher extends Application{
private Pane root = new Pane();
private Scene scene;
private Button btn = new Button("Test");
private Line line;
@Override
public void start(Stage stage) throws Exception {
line = new Line(200,200,200,100);
line.setStroke(Color.BLACK);
line.setStrokeWidth(5);
btn.setOnAction(e -> rotate());
root.getChildren().addAll(btn,line);
scene = new Scene(root,500,500);
stage.setScene(scene);
stage.show();
}
private void rotate(){
double x1 = line.getEndX() - line.getStartX();
double y1 = line.getEndY() - line.getStartY();
//The more you reduce the angle the longer the rotation
double x2 = x1 * Math.cos(0.1) - y1 * Math.sin(0.1);
double y2 = x1 * Math.sin(0.1) + y1 * Math.cos(0.1);
line.setEndX(x2+ line.getStartX());
line.setEndY(y2+ line.getStartY());
}
public static void main(String[] args) {
launch(args);
}
}