簡體   English   中英

在JPanel中創建可見網格

[英]Creating a visible grid in a JPanel

我想做什么

我想創建一個API(個人),允許我輸入一個尺寸(例如10x10),並創建一個由10平方乘10平方的可見網格,並具有增加的“功能”,可以更改任何通過方法調用平方。 不嘗試使用mouse listener或任何類型的任何listener

我的想法過程是這樣的:讓主JPanel遞歸地保存網格,添加“框” objects並用array位置引用每個objects 我的問題不是主要的JPanel ,我已經很輕松地JPanel了下來。 我的問題是它添加的object 我不知道這應該是哪種component 我嘗試使用JPanel但看不到任何東西。 此外,“網格”外觀也不會出現。

我猜想我將不得不利用swing.GraphicsGraphics2D但是我在網上找到的每個示例對我來說都不是一件swing.Graphics 尋找有關使用Graphics建議,或者如果有一種更好的方法來獲得我想要的東西,我很樂意嘗試一下。

  1. 有一個MainPanel類,該類接受尺寸標注,並根據指定的尺寸將其布局設置為GridLayout

     public class MainPanel extends JPanel { public MainPanel(int rows, int cols) { setLayout(new GridLayout(rows, cols)); } } 
  2. 創建一個具有draw()方法的接口

     public interface Drawable { void draw(Graphics g); } 
  3. 創建一個具有Drawable屬性的自定義面板,在其中將其稱為draw方法

     public class DrawPanel extends JPanel { private Drawable drawable; public DrawPanel() {} public DrawPanel(Drawable drawable) { this.drawable = drawable; } public void setDrawable(Drawable drawable) { this.drawable = drawable; repaint(); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); if (drawable != null) { drawable.draw(g); } } } 
  4. 創建的二維數組DrawPanelsMainPanel類,只是你可以通過索引來訪問他們,如果你需要到

     public class MainPanel extends JPanel { private DrawPanel[][] panels; public MainPanel(int rows, int cols) { setLayout(new GridLayout(rows, cols)); panels = new DrawPanel[rows][cols]; } } 
  5. new DrawPanel填充數組並將其添加到MainPanel

     for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { DrawPanel panel = new DrawPanel(); panels[i][j] = panel; MainPanel.this.add(panel); } } 
  6. 使用您想要的任何/多少個實現來實現Drawable接口。 喜歡

     public class Ball implements Drawable { private int x, y; private JPanel surface; public Ball(int x, int y, JPanel surface) { this.x = x; this.y = y; this.surface = surface; } @Override public void draw(Graphics g) { g.fillOval(x, y, sirface.getWidth(), surface.getHeight()); } } 
  7. 將可繪制對象添加到面板

     JPanel panel = panels[3][4]; panel.setDrawable(new Ball(0, 0, panel)); 
  8. 您可以根據需要創建Drawable許多不同實現,並且每個面板可以繪制一個不同的對象。

     public class Midget implements Drawable { @Override public void draw(Graphics g) { // draw midget } } .... panels[5][5].setDrawable(new Midget()); 

使用JLabel嘗試以下示例代碼

JPanel panel = new JPanel(new GridLayout(10, 10));
JLabel[] labels = new JLabel[20];

Color[] colors = new Color[] { Color.GREEN, Color.RED, Color.BLUE };
Random random = new Random();

for (int i = 0; i < labels.length; i++) {
    JLabel label = new JLabel();

    label.setBackground(colors[random.nextInt(colors.length)]);
    label.setOpaque(true);

    panel.add(label);
    labels[i] = label;
}

快照:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM