我正在設計一個使用java swing的接口。用戶可以繪製畫布(圓形,三角形,方形等)。當用戶繪製形狀時,我想按字母順序命名形狀中的每個點。我知道如何獲得座標,但我如何命名點?如何命名Java Swing中的座標(點數)
回答
這是一種方法。您使用Character.toString(char)
並使用'A'+offset
從字母表中獲取任何字符。
請參閱這個小示例,它繪製多邊形。
- 單一的點擊創建您的多邊形
- 雙擊存儲當前多邊形的頂點,並開始創建一個新的多邊形
- 右鍵單擊清除當前的多邊形,並開始一個新的。
注意:文字的定位不夠智能,所以它有時會與多邊形的線重疊。
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.Polygon;
import java.awt.event.MouseAdapter;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class TestNaming {
private static final int PANEL_WIDTH = 600;
private static final int PANEL_HEIGHT = 600;
public static class Drawing extends JPanel {
private static final Font FONT = new Font("Arial", Font.PLAIN, 12);
private List<Polygon> polygons = new ArrayList<Polygon>();
private Polygon currentPolygon = new Polygon();
private MouseAdapter mouseListener = new MouseAdapter() {
@Override
public void mouseClicked(java.awt.event.MouseEvent e) {
if (SwingUtilities.isLeftMouseButton(e)) {
if (e.getClickCount() == 1) {
addPoint(e.getX(), e.getY());
} else if (e.getClickCount() == 2) {
createPolygon();
}
} else if (SwingUtilities.isRightMouseButton(e)) {
clearCurrentPolygon();
}
}
};
public Drawing() {
addMouseListener(mouseListener);
}
protected void addPoint(int x, int y) {
currentPolygon.addPoint(x, y);
repaint();
}
protected void clearCurrentPolygon() {
currentPolygon = new Polygon();
repaint();
}
protected void createPolygon() {
if (currentPolygon.npoints > 2) {
polygons.add(currentPolygon);
}
clearCurrentPolygon();
repaint();
}
@Override
public Dimension getPreferredSize() {
return new Dimension(PANEL_WIDTH, PANEL_HEIGHT);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.RED);
g.setFont(FONT);
for (Polygon polygon : polygons) {
drawPolygon(g, polygon);
}
g.setColor(Color.GREEN);
drawPolygon(g, currentPolygon);
}
private void drawPolygon(Graphics g, Polygon polygon) {
if (polygon.npoints < 3) {
if (polygon.npoints == 1) {
g.fillOval(polygon.xpoints[0] - 2, polygon.ypoints[0] - 2, 4, 4);
drawNthPoint(g, polygon, 0);
} else if (polygon.npoints == 2) {
g.drawLine(polygon.xpoints[0], polygon.ypoints[0], polygon.xpoints[1], polygon.ypoints[1]);
drawNthPoint(g, polygon, 0);
drawNthPoint(g, polygon, 1);
}
} else {
g.drawPolygon(polygon);
for (int i = 0; i < polygon.npoints; i++) {
drawNthPoint(g, polygon, i);
}
}
}
private void drawNthPoint(Graphics g, Polygon polygon, int nth) {
// Only works 26 times!
String name = Character.toString((char) ('A' + nth));
int x = polygon.xpoints[nth];
int height = g.getFontMetrics().getHeight();
int y = polygon.ypoints[nth] < height ? polygon.ypoints[nth] + height : polygon.ypoints[nth];
g.drawString(name, x, y);
}
}
protected static void initUI() {
JFrame frame = new JFrame("test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new Drawing());
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
initUI();
}
});
}
}
非常感謝!但是有沒有辦法讓文字的定位更好?或者沒有可能的辦法? – 2013-05-02 21:40:37
@csstudent當然,這是可能的。您需要考慮構成頂點的兩條邊並計算出最適合放置文本的位置。你可以通過使用'Rectangle2D stringBounds = g.getFontMetrics()。getStringBounds(name,g);' – 2013-05-03 12:46:23
如果我正確認識你,你要標籤座標字母(如A,B,C,d)
既然你說你知道的座標已經...使用JLabel
:
JLabel A_label = new JLabel("A");
JLabel B_label = new JLabel("B");
A_label.setLocation(shape1_x, shape1_y);
B_label.setLocation(shape2_x, shape2_y);
'setLocation'將不能用於'LayoutManager' – Justin 2013-04-26 21:51:30
- 1. Java Swing Gridlayout:訪問Specfic座標
- 2. 如何在java swing中從tablemodel中提取命名列
- 3. 中心座標周圍的命令座標 - JAVA
- 4. 命名座標在python
- 5. 如何使在Java正數的座標
- 6. Java效率 - 點與座標
- 7. 如何在java中獲得組件的原點座標
- 8. 如何在Java Swing中抓取鼠標?
- 9. 如何訪問點座標
- 10. 如何從JAVA SWING程序給CMD命令(從JAVA Swing打印命令到CMD)
- 11. 根據比例因子變換鼠標座標 - java swing
- 12. 如何僅使用Java Swing驗證JFormattedText中的浮點數?
- 13. 如何根據鼠標點擊獲取3D中點的座標?
- 14. 如何命名在Java中
- 15. 點座標數據集中的模式
- 16. 如何在Java JUNG中設置頂點座標?
- 17. 對齊座標原點的座標軸
- 18. OpenGL中的頂點座標
- 19. Java Slick2d - 如何將鼠標座標轉換爲世界座標
- 20. 在Swing應用程序中命名基本/根Java類的標準方法
- 21. MATLAB如何讓鼠標點擊座標
- 22. 座標點
- 23. 如何獲得座標爲IN JAVA的城市名稱?
- 24. Java Swing MenuItem點擊
- 25. 如何找到點的座標?
- 26. 如何點擊頁面上的座標?
- 27. 如何點擊屏幕上的座標?
- 28. 如何獲取cow.osg的頂點座標?
- 29. 如何獲得骨架的座標點?
- 30. 如何獲取點擊的座標?
A,B,C,d ...?我不明白你的問題的重點。 – SJuan76 2013-04-26 20:28:32
是的。就像用戶繪製三角形時一樣,我希望三角形的三個點被命名爲A,B和C. – 2013-04-26 20:31:29
'Graphics#drawString()'? – trashgod 2013-04-26 20:34:29