2012-11-28 39 views
1

當用戶輸入函數I.E.時,我正在通過Java GUI編寫圖形計算器(是的,我知道這裏有庫)。 x^6,我希望抽屜根據最小值和最大值動態調整自己的大小。在Java GUI中動態調整2D繪圖框的大小

例如,如果用戶輸入的x^2從-4到4 I具有0分鐘和16的最大值,所以我想顯示在框中全圖,並適當大小它。現在這個圖很小,如果我使用x^6作爲多項式,它看起來非常擁擠。

下面是我在哪裏。

Graphics2D g2 = (Graphics2D) g; 
    double myStart1 = Double.parseDouble(myStart); 
    double myEnd1 = Double.parseDouble(myEnd); 
    g2.translate(getWidth()/2, getHeight()/2); 
    g2.scale(5.0, 5.0); 
    g2.draw(new Line2D.Double(-myStart1 * 100,0, -myEnd1 * 100,0)); 
    if (min < 0) { 
     g2.draw(new Line2D.Double(0, -min * 100, 0, -max * 100)); 
    } else { 
     g2.draw(new Line2D.Double(0, min * 100, 0, -max * 100)); 
    } 
    g2.setColor(Color.RED); 
    for (int i = 0; i < x.length; i++) { 
     if (i + 1 < x.length) { 
      g2.draw(new Line2D.Double(x[i], -y[i], x[i + 1], -y[i + 1])); 

     } else { 
      break; 
     } 
    } 

} 
+0

無需進一步方面,'paint'不負責調整大小的內容,該組件是。 – MadProgrammer

+0

是的,但是我使用g2的scale屬性來做到這一點嗎?規模實際上是做什麼的?它是否實際上改變了抽屜的組成部分,還是隻是讓事情變得更大? –

+0

這就像試圖在photoshop中放大圖像一樣。它會影響整體像素大小... – MadProgrammer

回答

2

至少考慮JFreeChart,其擴展到填充包封ChartPanel的優選尺寸和支持通過右鍵點擊或鼠標滾輪縮放。

附錄:如果外部庫被禁止,SineTest,引用here,可能是一種方法。

enter image description here

import java.awt.Dimension; 
import java.util.Random; 
import javax.swing.JFrame; 
import org.jfree.chart.*; 
import org.jfree.chart.plot.PlotOrientation; 
import org.jfree.data.xy.XYDataset; 
import org.jfree.data.xy.XYSeries; 
import org.jfree.data.xy.XYSeriesCollection; 

/** @see https://stackoverflow.com/a/13597045/230513 */ 
public class ChartPanelTest { 

    private static final Random random = new Random(); 

    private static XYDataset createDataset() { 

     final XYSeries series = new XYSeries("Data"); 
     for (double x = -4; x < 4.01; x += 0.1) { 
      series.add(x, Math.pow(x, 6d)); 
     } 
     return new XYSeriesCollection(series); 
    } 

    private static JFreeChart createChart(final XYDataset dataset) { 
     JFreeChart chart = ChartFactory.createXYLineChart(
      "f(x) = x^6", "x", "y", dataset, 
      PlotOrientation.VERTICAL, false, false, false); 
     return chart; 
    } 

    public static void main(String[] args) { 

     JFrame f = new JFrame(); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     XYDataset dataset = createDataset(); 
     JFreeChart chart = createChart(dataset); 
     ChartPanel chartPanel = new ChartPanel(chart) { 

      @Override 
      public Dimension getPreferredSize() { 
       return new Dimension(640, 480); 
      } 
     }; 
     chartPanel.setMouseWheelEnabled(true); 
     f.add(chartPanel); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 
} 
+0

這是針對學校的,所以JFree很不幸不在。 –