- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个有 2 个框架
的程序。 1 Frame
包含一个简单的 Button
和 JComboBox
GUI 界面,而另一个 Frame
则应该根据情况绘制和操作形状到界面上选择的选项。
我已经设置了界面,但我不知道如何实现多边形绘图。我知道如何绘制多边形,但是我在网上搜索的所有教程和帮助并没有真正为我提供绘图+多种方法的组合。此外,我的代码可能因我构建程序的所有尝试而变得相当复杂,所以我想知道这是否会增加我的问题。
我将在下面发布我的代码,并在我需要关注的地方写上“这里需要帮助1”和“这里需要帮助2”。这是一个image我的程序大致是什么样子的。
提前感谢任何试图解决我的问题的人。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.Polygon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Final {
// Declare variables for everything used in the program
private JFrame f;
private JPanel p, p2;
private JButton b1, b2, b3, b4, b5, b6, b7, b8;
private JComboBox combo, combo2, combo3;
private JTextField txt, txt2, txt3;
private Graphics g;
private Shape selectedShape;
public Final() {
gui();
draw();
}
public void gui() {
f = new JFrame("Interface");
f.setVisible(true);
f.setSize(800, 600);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Closes the program
// when you click
// the X
p = new JPanel(new GridBagLayout()); // create panel and decide the
// details
p.setBackground(Color.WHITE);
GridBagConstraints c = new GridBagConstraints(); // Define way to call
// constraints for
// grid layout
GridBagConstraints c2 = new GridBagConstraints();
GridBagConstraints c3 = new GridBagConstraints();
c.insets = new Insets(0, 0, 0, 0); // add spacing between objects on the
// grid. 10 pixels from bottom top,
// left and right
c2.insets = new Insets(5, 5, 5, 5);
c3.insets = new Insets(0, 0, 0, 0);
// Combo Box stuff below this
String course2[] = { "CHOOSE", "YELLOW", "BLUE", "RED" };
String course3[] = { "CHOOSE", "YELLOW", "BLUE", "RED" };
combo = new JComboBox(Shape.values());
combo.setBackground(Color.white);
combo.setForeground(Color.black);
txt = new JTextField(20);
combo.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent ie) {
if(ie.getStateChange() == ItemEvent.DESELECTED) {
return;
}
Shape selectedShape = (Shape) combo.getSelectedItem();
setSelectedShape(selectedShape);
String str = selectedShape.getLabel();
txt.setText(str);
switch (selectedShape) {
case NONE:
break;
case PARALLELOGRAM:
drawParallelogram();
break;
case QUADRILATERAL:
drawQuadrilateral();
break;
case RECTANGLE:
drawRectangle();
break;
case RHOMBUS:
drawRhombus();
break;
case SQUARE:
drawSquare();
break;
case TRAPEZOID:
drawTrapezoid();
break;
case TRIANGLE:
drawTriangle();
break;
default:
break;
}
}
private Polygon drawTriangle() {
// Need Help Here 1
Polygon triangle = new Polygon();
triangle.addPoint(100,100);
triangle.addPoint(150,150);
triangle.addPoint(50,150);
return triangle;
}
private void drawTrapezoid() {
// TODO Auto-generated method stub
System.out.println("This is the code to draw a trapezoid");
}
private void drawSquare() {
// TODO Auto-generated method stub
g.drawRect(0, 0, 50, 50);
}
private void drawRhombus() {
// TODO Auto-generated method stub
}
private void drawRectangle() {
// TODO Auto-generated method stub
System.out.println("This is the code to draw a rectangle");
}
private void drawQuadrilateral() {
// TODO Auto-generated method stub
System.out.println("This is the code to draw a quadrilateral");
}
private void drawParallelogram() {
// TODO Auto-generated method stub
System.out.println("This is the code to draw a parallelogram");
}
});
combo2 = new JComboBox(course2);
combo2.setBackground(Color.white);
combo2.setForeground(Color.black);
txt2 = new JTextField(20);
combo2.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent ie) {
String str2 = (String) combo2.getSelectedItem();
txt2.setText(str2 + " BORDER");
}
});
combo3 = new JComboBox(course3);
combo3.setBackground(Color.white);
combo3.setForeground(Color.black);
txt3 = new JTextField(20);
combo3.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent ie) {
String str3 = (String) combo3.getSelectedItem();
txt3.setText(str3 + " INSIDE");
}
});
// X and Y movement buttons
b1 = new JButton("X+");
b2 = new JButton("X-");
b3 = new JButton("Y+");
b4 = new JButton("Y-");
b5 = new JButton("Clockwise");
b6 = new JButton(" Counter ");
b7 = new JButton("Enlarge");
b8 = new JButton("Shrink ");
// Object adding to panel and grid layout here
c.gridx = 0;
c.gridy = 0;
p.add(combo, c);
c.gridx = 1;
c.gridy = 0;
p.add(txt, c);
c2.gridx = 0; // x and y for first object
c2.gridy = 1;
p.add(b1, c2);
c2.gridx = 1;
c2.gridy = 1;
p.add(b2, c2);
c2.gridx = 0;
c2.gridy = 2;
p.add(b3, c2);
c2.gridx = 1;
c2.gridy = 2;
p.add(b4, c2);
c3.gridx = 0;
c3.gridy = 4;
p.add(combo2, c3);
c3.gridx = 1;
c3.gridy = 4;
p.add(txt2, c3);
c3.gridx = 0;
c3.gridy = 5;
p.add(combo3, c3);
c3.gridx = 1;
c3.gridy = 5;
p.add(txt3, c3);
c2.gridx = 0;
c2.gridy = 6;
p.add(b5, c2);
c2.gridx = 1;
c2.gridy = 6;
p.add(b6, c2);
c2.gridx = 0;
c2.gridy = 7;
p.add(b7, c2);
c2.gridx = 1;
c2.gridy = 7;
p.add(b8, c2);
f.add(p, BorderLayout.NORTH); // add the entire panel to the frame
f.show();
}
public void draw() {
// Need help here 2
// Create a frame
JFrame frame = new JFrame();
// Add a component with a custom paint method
//frame.getContentPane().add(new MyComponent());
Container contentPane = frame.getContentPane();
contentPane.add(drawTriangle());
// Display the frame
int frameWidth = 600;
int frameHeight = 600;
frame.setSize(frameWidth, frameHeight);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
/* class MyComponent extends JComponent {
// This method is called whenever the contents needs to be painted
public void paint(Graphics g) {
// Retrieve the graphics context; this object is used to paint
// shapes
Graphics2D g2d = (Graphics2D) g;
}
}*/
public static void main(String[] args) {
new Final();
}
public Shape getSelectedShape() {
return selectedShape;
}
public void setSelectedShape(Shape selectedShape) {
this.selectedShape = selectedShape;
}
public enum Shape {
NONE, TRIANGLE, QUADRILATERAL, PARALLELOGRAM, TRAPEZOID, RHOMBUS, RECTANGLE, SQUARE;
static {
NONE.label = "Choose one...";
TRIANGLE.label = "Triangle";
QUADRILATERAL.label = "Quadrillateral";
PARALLELOGRAM.label = "Parallelogram";
TRAPEZOID.label = "Trapezoid";
RHOMBUS.label = "Rhombus";
RECTANGLE.label = "Rectangle";
SQUARE.label = "Square";
}
private String label;
public String getLabel() {
return label;
}
}
}
抱歉搞得一团糟,JComboBoxes
似乎是我存在的祸根,我想知道我是否应该只使用 JButtons
从头开始重建程序。
最佳答案
我将创建自己的形状类,而不是形状的枚举(在您的情况下会导致非 OO switch-case)。然后,您可以使用子类(或 java.awt.Shape 类型的成员)来实现绘制不同的形状(该示例假设使用 java.awt.Shape 来描述要绘制的元素,并将其传递给构造函数):
public class MyShape {
private String label;
private Shape awtShape;
public MyShape(String label, Shape awtShape) {
this.label = label;
this.awtShape = awtShape;
}
public String toString() {
return label;
}
public int hashCode() {
return label.hashCode();
}
public boolean equals(Object obj) {
return obj instanceof MyShape && ((MyShape) obj).label.equals(label);
}
// x and y parameters may be useful when the shape needs to be relocated
// when drawing. Use Graphics.translate(x, y) to draw the shape at different
// coordinates (don't forget to undo the translater after that).
public void draw(Graphics2D g, int x, int y) {
g.fill(awtShape);
}
}
通过实现 toString()、hashCode() 和 equals() 方法,您可以使用 MyShape 类作为组合框项目(toString() 控制组合框中的显示,hashCode/equals 建立标识 - 您可能想要实现它们根据具体要求而有所不同)。
关于java - 无法弄清楚如何返回要添加到框架的多边形绘图数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11650544/
我一直在试图理解人们一直在使用的这个网格系统。有时让我觉得自己很蠢。 我了解如果您使用无边距的 12 网格系统。第 12 列将是 100%,而第 1 列将约为 8.33333%。 我一直在看一些网格系
我们被分配了一个用于系统编程的 ASCII 压缩项目,但我在代码中的某一特定行上遇到了困难。 我问了question关于压缩,在处理完纸上示例文件的前十几个字母后,我将数组代码调整到了我的程序中。在
我正在使用 Appcelerator 框架编写应用程序,但偶尔会发生崩溃。我正在尝试找出导致崩溃的原因,因此我决定查看 iOS 模拟器崩溃报告。当然,这对我来说都是希腊语,但我希望得到一些指导,了解其
有人可以给我一些指导或指导我阅读有关 C++ set 对象的优秀教程吗? 我有一段这样的简单代码: #include using namespace std; int main() { ch
老实说,我不知道我的问题是否有解决方案,但我想在 Swift 中捕捉上下文切换发生的时间。 我正在想象一个需要很长时间才能完成的功能,例如远程服务器上的写操作,我在想是否有办法了解何时(至少在哪一行)
我正在使用 Yii2 并且一直在阅读 theming和 theme inheritance ;但是有一些问题: 考虑以下示例: 'view' => [ 'theme' => [
我尝试使用 AJAX 发布,因为我不想使用提交按钮并在每次单击它时重新加载页面。我正在使用此代码进行 ajax: Ajax loading error, please try again.").sho
我正在尝试找出将在 NodeJS 应用程序中使用的 MongoDB 模型的理想设计。该应用程序的设置类似于调查,某些步骤会根据之前的选择提供选项。这是选择和可能性的示例。 第 1 级:图案类型:纯色、
我有一个 API/Express 路由器: router.post("/signup", async function (req, res) { try { var user
我注意到 JFileChooser 隐藏了 Windows 系统文件。 hiberfil.sys、pagefile.sys、$Recycle.Bin 等文件、一些无法打开的快捷方式文件夹等... 我可
这是我第一次使用 Django,到目前为止,我对这个框架的工作方式印象深刻。我目前正在开发我的第一个应用程序,并正在处理数据库内容,但是,我在弄清楚如何在不运行原始查询的情况下进行内部联接时遇到问题。
我在自动调整蒙版大小方面遇到了一些问题。这是交易:我正在使用最近发布的 TwUI ,它从 UIKit 中获取了很多,但它在 Mac 上。这就是我为 iOS 和 Mac 标记的原因。因此,我创建了一个底
好吧,这是一个很长的,打起精神来! :) 最近我尝试在启动期间启动一个用 bash 编写的看门狗脚本。所以我在 rc.local 中添加了一行,其中包含以下内容: su someuser -c "/h
我在我的机器上安装了多个版本的 Windows 软件开发工具包,有趣的是,我的机器上已经安装了一个 Visual studio Installer工具的版本低于近一年前安装的版本: Windows S
widget('zii.widgets.CMenu', array( 'items'=>array( array('label'=>'Home', '
我是一名优秀的程序员,十分优秀!