簡體   English   中英

我無法在我的 JFrame 中顯示圖形

[英]Im having trouble trying to display graphics in my JFrame

我正在嘗試創建具有與 Wordle 類似的布局的游戲,其中顯示了一個 5 個字母的加擾詞,在其下方有 5 個單獨的文本字段供用戶輸入加擾詞的字母將進入的順序。基本上他們有解讀這個詞。 抱歉解釋不好。

我試圖在 JLabels lb1、lb2、lb3、lb4、lb5 的每個字母周圍以及每個 JTextField tf1、tf2、tf3、tf4、tf5 周圍制作矩形/正方形。 我根本不知道如何顯示這些矩形,也不知道它們將如何顯示在已經存在的 JPanel 之上。

這里也只是一個獎勵,是否有組織這些標簽和文本字段以便我可以在那里設置確切的位置? 我想在 5 個文本字段的頂部有 5 個標簽。

import java.awt.*;
import javax.swing.*;



public class scramble extends JFrame {

    Font mainFont = new Font("Impact", Font.BOLD, 60);
    Font smallFont = new Font("Impact", Font.BOLD, 30);

    JLabel lbWelcome;
    JLabel lb1, lb2, lb3, lb4, lb5;
    JTextField tf1, tf2, tf3, tf4, tf5;
    JFrame frame;
    GridBagConstraints gbc = new GridBagConstraints();
    


    scramble() {

      gbc.gridx = 0;
      gbc.gridy = 0;
      gbc.anchor = GridBagConstraints.PAGE_START;
      gbc.weightx = 1.0;
      gbc.weighty = 1.0;

         //mainPanel
         JPanel mainPanel = new JPanel();
         mainPanel.setLayout(new GridBagLayout());
         mainPanel.setBackground(new Color(12, 177, 237));
         mainPanel.setBorder(BorderFactory.createEmptyBorder(10, 40, 30, 40));
         
         

         //header/title
         lbWelcome = new JLabel("Scramble", SwingConstants.CENTER);
         lbWelcome.setFont(mainFont);
         lbWelcome.setToolTipText("Scramble is a game created by Glen Filson");
         gbc.gridx = 0;
         gbc.gridy = 0;
         mainPanel.add(lbWelcome, gbc);

          //input panel
          JPanel inputs = new JPanel();
          inputs.setSize(new Dimension(300,300));
          inputs.setBackground(new Color(12, 177, 200));
          inputs.setLayout(new GridBagLayout());
          gbc.gridx = 0;
          gbc.gridy = 3;
          mainPanel.add(inputs, gbc);

          gbc.insets = new Insets(30, 10,30,10);
        
          
         //JLabels main
         lb1  = new JLabel("F", SwingConstants.CENTER);
         lb1.setFont(smallFont);
         gbc.gridx = 0;
         gbc.gridy = 0;
         inputs.add(lb1, gbc);
      

         lb2  = new JLabel("I", SwingConstants.CENTER);
         lb2.setFont(smallFont);
         gbc.gridx = 1;
         gbc.gridy = 0;
         inputs.add(lb2, gbc);
        

         lb3  = new JLabel("G", SwingConstants.CENTER);
         lb3.setFont(smallFont);
         gbc.gridx = 2;
         gbc.gridy = 0;
         inputs.add(lb3, gbc);
         

         lb4  = new JLabel("H", SwingConstants.CENTER);
         lb4.setFont(smallFont);
         gbc.gridx = 3;
         gbc.gridy = 0;
         inputs.add(lb4, gbc);
        

         lb5  = new JLabel("T", SwingConstants.CENTER);
         lb5.setFont(smallFont);
         gbc.gridx = 4;
         gbc.gridy = 0;
         inputs.add(lb5, gbc);


         
         

         //JTextField main
         tf1  = new JTextField("s");
         tf1.setFont(smallFont);
         tf1.setHorizontalAlignment(JTextField.CENTER);
         gbc.gridx = 0;
         gbc.gridy = 1;
         inputs.add(tf1, gbc);
         


         tf2  = new JTextField("u");
         tf2.setFont(smallFont);
         tf2.setHorizontalAlignment(JTextField.CENTER);
         gbc.gridx = 1;
         gbc.gridy = 1;
         inputs.add(tf2, gbc);
       
         

         tf3  = new JTextField("s");
         tf3.setFont(smallFont);
         tf3.setHorizontalAlignment(JTextField.CENTER);
         gbc.gridx = 2;
         gbc.gridy = 1;
         inputs.add(tf3, gbc);
        

         tf4  = new JTextField("s");
         tf4.setFont(smallFont);
         tf4.setHorizontalAlignment(JTextField.CENTER);
         gbc.gridx = 3;
         gbc.gridy = 1;
         inputs.add(tf4, gbc);
         
         
         tf5  = new JTextField("y");
         tf5.setFont(smallFont);
         tf5.setHorizontalAlignment(JTextField.CENTER);
         gbc.gridx = 4;
         gbc.gridy = 1;
         inputs.add(tf5, gbc);

     
        
         

          
        



           
           
            //JFrame
            JFrame frame = new JFrame();      
            frame.setTitle("Scramble");
            frame.setSize(500, 650);
            
            frame.setLocationRelativeTo(null);
            frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            frame.getContentPane().setBackground(new Color(100, 60, 100));
            frame.setVisible(true);
            frame.add(mainPanel);
           
    }

    public static void main(String[] args){
       scramble myFrame = new scramble();
      
     

}
public class graphicsPanel extends JPanel {
   public void paint(Graphics g ){
      
      Graphics g2d = (Graphics2D) g;

      g2d.drawRect(250,325,300,300);

   }



}
}

您提出的所有問題都有解決方案。 所以讓我們看看從哪里拿它。

  1. 您可以為任何 JComponent 及其子類添加邊框。 只需使用setBorder()
  2. 要在每個字母周圍有一個帶有矩形的 JLabel,最好不要使用 JLabel。 子類 JComponent,添加一個 String 屬性,以便您知道要呈現哪些文本,然后覆蓋paintComponent()方法。 您只需要遍歷字符串的字符,通過 GraphicsContext 和 Font 計算字符大小,為您的框添加空間。 然后使用g.drawRect() 繪制框,最后使用 g.drawString() 繪制
  3. 要組織位置,請使用 LayoutMangers。 GridBagLayout是最強大的,它會做你需要的任何事情。 查看不錯的教程

暫無
暫無

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

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