JPanel в JFrame - Java
Формулировка задачи:
Ув., необходимо нарисовать сетку с лайнов. И на пересечении этих линий ставить точку.
Вот КОД:
Сетку я реализовал,но тут возникла проблема. Не могу понять почему панель вылазит за её размеры?Панель должна быть равна строго размеру сетки. Но что-то ни как. Не могу понять в чем ошибка. И могу ли я в интерфейсе указать метод draw(Graphics g); и использовать его вместо paintChildren? Были попытки,но ничего в итоге не отображалось. И клик мышки срабатывает на всем фрейме...
Подскажите пожалуйста,как это исправить
Теперь не могу забиться того,что бы на клик мышки хоть что-то рисовало. Оно вроде и рисует,но буквально 1 мл. секунду,если очень долго долбить по мышке.
package main; import javax.swing.*; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; interface gridPanel{ void paintChildren(Graphics g); } public class Dots { public static void main(String args[]){ WindowMain ml = new WindowMain("Dots Game"); ml.setVisible(true); } } class WindowMain extends JFrame { private final int DEFUALT_WIDTH=600; private final int DEFAULT_HEIGHT=500; private Container container = new Container(); WindowMain (String name){ setTitle(name); setSize(DEFUALT_WIDTH, DEFAULT_HEIGHT); setLocationRelativeTo(null); setResizable(false); setDefaultCloseOperation(EXIT_ON_CLOSE); add(new CellPane()); } } class CellPane extends JPanel implements gridPanel{ private final int scale=19; private int ArrayCells[][]; private final int DEFAULT_WIDTH=456; private final int DEFAUTL_HEIGHT=456; CellPane() { setBackground(Color.WHITE); setSize(DEFAULT_WIDTH,DEFAUTL_HEIGHT); addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { super.mouseClicked(e); System.out.print("Clicked"); } }); } @Override public void paintChildren(Graphics g) { super.paintChildren(g); // g.setColor(Color.WHITE); // g.fillRect(0,0,DEFAULT_WIDTH,DEFAUTL_HEIGHT); g.setColor(Color.LIGHT_GRAY); for(int X=0;X<DEFAULT_WIDTH;X+=scale) for(int Y=0;Y<DEFAUTL_HEIGHT;Y+=scale){ g.drawLine(X,0,X,DEFAUTL_HEIGHT); g.drawLine(0,Y,DEFAULT_WIDTH,Y); } repaint(); } }
Исправил проблему с сеткой:
class WindowMain extends JFrame { private final int DEFUALT_WIDTH=600; private final int DEFAULT_HEIGHT=500; private Container container = new Container(); WindowMain (String name){ setTitle(name); setSize(DEFUALT_WIDTH, DEFAULT_HEIGHT); setLocationRelativeTo(null); setResizable(false); setDefaultCloseOperation(EXIT_ON_CLOSE); CellPane cp= new CellPane(); Container content = getContentPane(); content.add(cp); } } class CellPane extends JPanel implements gridPanel{ private final int scale=19; private int ArrayCells[][]; private final int DEFAULT_WIDTH=456; private final int DEFAUTL_HEIGHT=456; CellPane() { addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { super.mouseClicked(e); Graphics g; g=getGraphics(); Graphics2D g2= (Graphics2D) g; g2.draw(new Ellipse2D.Double(10,10,10,10)); repaint(); } }); } @Override public void paintComponent(Graphics g) { super.paintComponent(g); setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY)); setSize(DEFAULT_WIDTH,DEFAUTL_HEIGHT); g.setColor(Color.WHITE); g.fillRect(0,0,DEFAULT_WIDTH,DEFAUTL_HEIGHT); g.setColor(Color.LIGHT_GRAY); for(int X=0;X<DEFAULT_WIDTH;X+=scale) for(int Y=0;Y<DEFAUTL_HEIGHT;Y+=scale){ g.drawLine(X,0,X,DEFAUTL_HEIGHT); g.drawLine(0,Y,DEFAULT_WIDTH,Y); } } }
Решение задачи: «JPanel в JFrame»
textual
Листинг программы
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package cyberforum; import java.awt.Color; import java.awt.Graphics; import java.awt.Point; import java.util.ArrayList; import java.util.List; /** * * @author BleStaR */ public class NewJFrame extends javax.swing.JFrame { private List<Point> points = new ArrayList<>(); /** * Creates new form NewJFrame */ public NewJFrame() { initComponents(); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { formMouseClicked(evt); } }); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 400, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 300, Short.MAX_VALUE) ); pack(); }// </editor-fold> private void formMouseClicked(java.awt.event.MouseEvent evt) { points.add(evt.getPoint()); repaint(); } @Override public void paint(Graphics g) { super.paintComponents(g); //To change body of generated methods, choose Tools | Templates. g.setColor(Color.red); for(int i = 0 ; i < 300; i+=30) { g.drawLine(i, 0, i, 300); g.drawLine(0, i, 300, i); } for(int i = 0; i < points.size(); i++) { g.fillOval(points.get(i).x, points.get(i).y, 10, 10); } } /** * @param args the command line arguments */ public static void main(String args[]) { /* Set the Nimbus look and feel */ //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. * For details see [url]http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html[/url] */ try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } //</editor-fold> /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new NewJFrame().setVisible(true); } }); } // Variables declaration - do not modify // End of variables declaration }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д