【发布时间】:2022-09-24 11:16:11
【问题描述】:
我正在尝试制作一个使用 2 个 JSlider 的 GUI; 1个垂直和1个水平。我希望他们分别返回 x 和 y 值。我能够得到 x 和 y 值,但我不知道如何使用它们,所以我可以画一个圆。
import javax.swing.JSlider;
import java.awt.*;
public class MyFrame extends javax.swing.JFrame {
private javax.swing.JPanel canvas;
private javax.swing.JComboBox<String> colorBox;
private javax.swing.JSlider horizontalSlider, verticalSlider;
private javax.swing.JButton state;
public MyFrame() {
initComponents();
}
private void initComponents() {
canvas = new javax.swing.JPanel();
horizontalSlider = new javax.swing.JSlider();
verticalSlider = new javax.swing.JSlider();
colorBox = new javax.swing.JComboBox<>();
state = new javax.swing.JButton();
int diameter = 30;
Color color;
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
canvas.setBackground(new java.awt.Color(250, 250, 250));
javax.swing.GroupLayout canvasLayout = new javax.swing.GroupLayout(canvas);
canvas.setLayout(canvasLayout);
canvasLayout.setHorizontalGroup(
canvasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 0, Short.MAX_VALUE)
);
canvasLayout.setVerticalGroup(
canvasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 0, Short.MAX_VALUE)
);
horizontalSlider.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
horizontalSliderStateChanged(evt);
}
});
verticalSlider.setOrientation(javax.swing.JSlider.VERTICAL);
verticalSlider.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
verticalSliderStateChanged(evt);
}
});
colorBox.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { \"Red\", \"Orange\", \"Yellow\", \"Green\" }));
state.setText(\"Show\");
state.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
stateActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(7, 7, 7)
.addComponent(verticalSlider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(horizontalSlider, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(canvas, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addComponent(colorBox, javax.swing.GroupLayout.PREFERRED_SIZE, 400, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 92, Short.MAX_VALUE)
.addComponent(state, javax.swing.GroupLayout.PREFERRED_SIZE, 157, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(verticalSlider, javax.swing.GroupLayout.DEFAULT_SIZE, 475, Short.MAX_VALUE)
.addComponent(canvas, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGap(18, 18, 18)
.addComponent(horizontalSlider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(27, 27, 27)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(colorBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(state))
.addContainerGap(31, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
private void stateActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
public void horizontalSliderStateChanged(javax.swing.event.ChangeEvent evt) {
horizontalSlider = (JSlider) evt.getSource();
int coordinateX = horizontalSlider.getValue();
System.out.println(\"X: \" + coordinateX);
}
public void verticalSliderStateChanged(javax.swing.event.ChangeEvent evt) {
verticalSlider = (JSlider) evt.getSource();
int coordinateY = verticalSlider.getValue();
System.out.println(\"Y: \" + coordinateY);
}
private void colorBoxActionPerformed(java.awt.event.ActionEvent evt,Color color) {
if(colorBox.getSelectedItem() == \"Red\") {
color = Color.RED;
repaint();
}
}
public void draw(Graphics2D g) {
g.fillOval(horizontalSlider.getValue(),verticalSlider.getValue(),30, 30);
//g.setColor(color.getColor);
}
}
关于我的问题,我没有什么要问或说的了,我只是不能提交这个问题,因为代码比没有的多。 所以这是另一个问题......我如何使用 JComboBox 根据选择的颜色来改变圆圈的颜色?
-
首先,您需要学习如何进行自定义绘画。然后您可以添加逻辑以使用组合框和滑块。查看Custom Painting Approaches 中的几个示例。
-
这实际上有很多内容 - 早在我构建 MVC 区域管理器 (sourceforge.net/p/tus/code/HEAD/tree/tjacobs/ui/shape) 的那一天,您可能想要查看,但无论如何,您可能需要一个用于您的 Shapes 的模型,一个用于显示它们的视图,以及用于单击和以其他方式操作它们的控制器。