gpt4 book ai didi

java - 当用户检查 JCheckBox 时,尝试让 Jframe 类和 JComponent 类进行交互

转载 作者:行者123 更新时间:2023-12-01 09:08:07 26 4
gpt4 key购买 nike

到目前为止,代码创建了两个框架:一个放置 DrawingComponent 的框架和一个带有交互式按钮的框架。目前,用户可以选择绘制直线、矩形或椭圆形。我为 DrawingComponent 设置了 MouseActionListener,因此可以单独绘制每个形状。

<小时/>
public class DrawingViewer extends JFrame {

private JFrame controlFrame;
private JButton drawButton, fillButton, undoButton;
private JCheckBox lineBox, recBox, ellipseBox;
private JLabel drawLabel, fillLabel;
private DrawingComponent component;

public DrawingViewer () {
setupThisFrame();
setupControlFrame();
setupButtons();
showFrames();
}

....

fillLabel = new JLabel();
fillLabel.setOpaque(true);
fillLabel.setFont(new Font("Consolas", Font.PLAIN,12));
fillLabel.setForeground(Color.BLACK);
fillLabel.setBackground(null);
if(fillLabel.getBackground() != null){
fillLabel.setText(" ");
}
else{
fillLabel.setText(" nothing ");
}

....

class shapeCheckListener implements ActionListener{

@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == lineBox){
System.out.println("Line Chosen");
component.setLine();
}
else if (e.getSource() == recBox){
System.out.println("Rectangle Chosen");
component.setRec();
}
else if (e.getSource() == ellipseBox){
System.out.println("Ellipse Chosen");
component.setEllipse();
}
}
}
}

----------------------------------------------------------
public class DrawingComponent extends JComponent {

private int mouseX;
private int mouseY;
private int mouseX2;
private int mouseY2;
public Shape shape;
public Color borderColor;
public Color fillColor;

public DrawingComponent() {
setupMouse();
}

@Override
public void paintComponent(Graphics g){

Graphics2D g2 = (Graphics2D) g;

if(shape != null){
g2.draw(shape);
}
else{
shape = null;
}

}

public void setLine(){
shape = new Line2D.Double(mouseX, mouseY, mouseX2, mouseY2);
}
public void setRec(){
shape = new Rectangle(Math.min(mouseX, mouseX2), Math.min(mouseY, mouseY2) , Math.abs(mouseX - mouseX2), Math.abs(mouseY - mouseY2));
}
public void setEllipse(){
shape = new Ellipse2D.Double(Math.min(mouseX, mouseX2), Math.min(mouseY, mouseY2), Math.abs(mouseX - mouseX2), Math.abs(mouseY - mouseY2));
}

最佳答案

框架只是一个外壳。它不应包含与应用程序相关的任何数据。事实上,您甚至根本不需要扩展 JFrame。

您的绘图区域应该具有更改类属性的方法。然后您可以创建一个可以访问绘图区域类的按钮面板。每当您想要更改形状时,只需将更改通知绘图区域即可。

查看Custom Painting Approaches有关此方法的示例。此示例只有一个可以更改的“颜色”属性。因此,根据您的情况,您需要添加“形状”属性。

关于java - 当用户检查 JCheckBox 时,尝试让 Jframe 类和 JComponent 类进行交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41086634/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com