Java - Problema redimensionare componenta

Cunoscutul limbaj de programare Java a fost creat să întrunească câteva caracteristici de bază, printre care OOP, să fie independent de arhitectură (portabilitatea), să fie dinamic şi securizat. Aici vom vorbi despre Java SE, Java ME, respectiv Java EE. Dacă acesta este domeniul tău de interes, aceasta este secţiunea potrivită pentru tine.

Java - Problema redimensionare componenta

Postby smith » 26 Mar 2011, 13:41

Mă jucam recent cu interfețe grafice (awt mai precis) în Java, dar am dat peste o problemă.

Am atașat la post un fișier .jar care exemplifică problema.

Pentru layout am folosit un GridLayout cu 3 linii și 1 coloana. Pe linii am în următoarea ordine: un obiect de tip canvas și două butoane. Când se redimensionează fereastra, dreptunghiul din obiectul de tip canvas ar trebui să se redeseneze în funcție de dimensiunile ferestrei. Problema este că butoanele se redimensionează în timp REAL, iar dreptunghiul nu (decât după ce butonul mouse-ului este lăsat liber).

Cum aș putea să fac să se redimensioneze și deptunghiul în timp real?

--LATER EDIT--
Am să postez totuși codul, poate nu am fost destul de clar în explicații (și apoi, ca bump):
  1. import java.awt.*;
  2. import java.awt.event.*;
  3.  
  4. class WindowSizeListener extends ComponentAdapter {
  5.     Window win;
  6.     public WindowSizeListener(Window w){
  7.         this.win = w;
  8.     }
  9.     public void componentResized(ComponentEvent e) {
  10.         Dimension winDimension = win.getSize();
  11.         win.setGraphSize( winDimension.width -20 , (winDimension.height /3)-20 );
  12.         win.repaintGraph();
  13.     }
  14. }
  15.  
  16. @SuppressWarnings("serial")
  17. class Board extends Canvas {
  18.  
  19.     Dimension canvasSize = new Dimension(100, 100);
  20.     public void paint(Graphics g) {
  21.         g.setColor(Color.RED);
  22.         g.drawRect(0, 0, canvasSize.width-2, canvasSize.height-3);
  23.     }
  24.     public Dimension getMinimumSize() {
  25.         return canvasSize;
  26.     }
  27.     public Dimension getPreferredSize() {
  28.         return canvasSize;
  29.     }
  30.     public void setSize(int width, int height){
  31.         canvasSize = new Dimension(width, height);
  32.     }
  33. }
  34.  
  35. @SuppressWarnings("serial")
  36. class Window extends Frame {
  37.     private Button closeButton = new Button("Close");
  38.     private Button aboutButton = new Button("About");
  39.     private Board graph = new Board();
  40.  
  41.     public Window(String titlu) {
  42.         super(titlu);
  43.  
  44.     }
  45.     public void initialize() {
  46.  
  47.         this.setSize(300, 300);
  48.         this.setLocationToCenter();
  49.         this.initializeComponents();
  50.  
  51.         //window size listener
  52.         this.addComponentListener( new WindowSizeListener(this));
  53.         //listener for close X button
  54.         this.addWindowListener(new WindowAdapter() {
  55.             public void windowClosing(WindowEvent e) {
  56.                 System.exit(0);
  57.             }
  58.         });
  59.     }
  60.    
  61.     //sets the window in the center of the screen
  62.     private void setLocationToCenter(){
  63.        
  64.         Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
  65.         Dimension windowSize = this.getSize();
  66.        
  67.         int y = (screenSize.height - windowSize.height) / 2;
  68.         int x = (screenSize.width  - windowSize.width ) / 2;
  69.        
  70.         this.setLocation(x, y);
  71.     }
  72.    
  73.     //initialize components
  74.     private void initializeComponents(){
  75.         this.setLayout(new GridLayout(3,1));
  76.        
  77.         this.add(graph);
  78.         this.add(aboutButton);
  79.         this.add(closeButton);
  80.     }
  81.    
  82.     public void setGraphSize(int width, int height){
  83.         graph.setSize(width, height);      
  84.     }
  85.     public void repaintGraph(){
  86.         graph.repaint();
  87.     }
  88.    
  89.     public Dimension getGraphDimension(){
  90.         return graph.canvasSize;
  91.     }
  92. }
  93.  
  94. public class HelloWorld {
  95.     public static void main(String args[]) {
  96.         Window f = new Window("Test");
  97.         f.initialize();
  98.         f.setVisible(true);
  99.     }
  100. }
0,0p / 0 votes
Attachments
test.rar
(4.31 KiB) Downloaded 36 times
Ilea Cristian
User avatar
smith
Enum
 
Joined: 29 Dec 2009
Location: Cluj-Napoca
Status: 82

Re: Java - Problema redimensionare componenta

Postby morpheus » 26 Mar 2011, 22:53

Nu am observat problema pe sistemul meu:
  1.  
  2. java version "1.6.0_24"
  3. Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
  4. Java HotSpot(TM) Server VM (build 19.1-b02, mixed mode)
  5. Linux ADRIAN-LAPTOP 2.6.32-5-686 #1 SMP Tue Mar 8 21:36:00 UTC 2011 i686 GNU/Linux
  6. Debian 6
  7.  


http://www.mediafire.com/download.php?4y5gxag5f5ef51r
0,0p / 0 votes
User avatar
morpheus
Word
 
Joined: 30 Dec 2009
Location: Bucharest, Romania
Status: 54.84

Re: Java - Problema redimensionare componenta

Postby smith » 26 Mar 2011, 23:01

Hm... oare de ce? Și la mine pe ubuntu merge seamless - cum aș vrea.
0,0p / 0 votes
Ilea Cristian
User avatar
smith
Enum
 
Joined: 29 Dec 2009
Location: Cluj-Napoca
Status: 82

Re: Java - Problema redimensionare componenta

Postby morpheus » 26 Mar 2011, 23:05

Nu pot sa investighez, am scos XP-ul momentan ...
0,0p / 0 votes
User avatar
morpheus
Word
 
Joined: 30 Dec 2009
Location: Bucharest, Romania
Status: 54.84


Return to Java

Who is online

Users browsing this forum: No registered users and 0 guests

cron